Skip to content

Optional build, JAR file generation in CMake #623

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 17, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ matrix:
- libsparsehash-dev
sources:
- ubuntu-toolchain-r-test
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=g++-7
Expand All @@ -54,7 +53,6 @@ matrix:
- libsparsehash-dev
sources:
- ubuntu-toolchain-r-test
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=g++-8
Expand All @@ -68,7 +66,6 @@ matrix:
- libsparsehash-dev
sources:
- ubuntu-toolchain-r-test
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=clang++-4.0
Expand All @@ -84,7 +81,6 @@ matrix:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=clang++-5.0
Expand All @@ -100,7 +96,6 @@ matrix:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=clang++-6.0
Expand All @@ -116,14 +111,12 @@ matrix:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-6.0
before_script: ./gradlew
script: ./cppbuild/cppbuild

- env: COMPILER=clang++
language: c++
compiler: clang
os: osx
before_script: ./gradlew
script: ./cppbuild/cppbuild

before_cache:
Expand Down
100 changes: 72 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,44 @@ project("sbe" VERSION "${SBE_VERSION_NUMERIC}")
include(ExternalProject)
include(CheckLibraryExists)

enable_testing()
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
set(STANDALONE_BUILD TRUE)
endif()

option(SBE_TESTS "Enable tests" ${STANDALONE_BUILD})
option(SBE_BUILD_SAMPLES "Enable building the sample projects" ${STANDALONE_BUILD})
option(SBE_BUILD_BENCHMARKS "Enable building the benchmarks" ${STANDALONE_BUILD})

unset(STANDALONE_BUILD)

if(SBE_TESTS)
enable_testing()
endif()

# default built type is Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build" FORCE)
endif(NOT CMAKE_BUILD_TYPE)

ExternalProject_Add(
gtest
URL ${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/lib/gtest-1.7.0.zip
URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
INSTALL_COMMAND ""
LOG_CONFIGURE ON
LOG_BUILD ON
)

ExternalProject_Get_Property(gtest source_dir)
set(GTEST_SOURCE_DIR ${source_dir})
ExternalProject_Get_Property(gtest binary_dir)
set(GTEST_BINARY_DIR ${binary_dir})
if(SBE_TESTS)
set(SBE_THIRDPARTY_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/thirdparty")

ExternalProject_Add(
gtest
URL ${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/lib/gtest-1.7.0.zip
URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
PREFIX "${SBE_THIRDPARTY_BINARY_DIR}/gtest"
BUILD_BYPRODUCTS "${SBE_THIRDPARTY_BINARY_DIR}/gtest/src/gtest-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX};${SBE_THIRDPARTY_BINARY_DIR}/gtest/src/gtest-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}"
INSTALL_COMMAND ""
LOG_CONFIGURE ON
LOG_BUILD ON
)

ExternalProject_Get_Property(gtest source_dir)
set(GTEST_SOURCE_DIR ${source_dir})
ExternalProject_Get_Property(gtest binary_dir)
set(GTEST_BINARY_DIR ${binary_dir})
endif()

find_package(Threads)

Expand All @@ -55,16 +73,16 @@ if(UNIX)
endif()

if(APPLE)
# -Wall doesn't enable everything we want to see
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare")
add_definitions(-DDarwin)
# -Wall doesn't enable everything we want to see
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare")
add_definitions(-DDarwin)
elseif(MSVC)
add_definitions(-DWIN32)
add_definitions(-DWIN32)

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /Od /Zi")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
else()
add_definitions(-D_GNU_SOURCE)
add_definitions(-D_GNU_SOURCE)
endif()

set(LIBPREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}")
Expand All @@ -75,25 +93,51 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")

set(SBE_JAR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-all/build/libs/sbe-all-${SBE_VERSION_TXT}.jar")
if(EXISTS "${SBE_JAR}")
message("latest SBE jar found: ${SBE_JAR}")
message("latest SBE jar found: ${SBE_JAR}")
else()
message(FATAL_ERROR "could not find latest SBE jar in ${CMAKE_CURRENT_SOURCE_DIR}/sbe-all/build/libs")
message("Generating SBE jar")
execute_process(
COMMAND ./gradlew build -x check -x javadoc --info --stacktrace :sbe-all:build
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()

file(GLOB_RECURSE SBE_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/java/*.java"
)

add_custom_command(OUTPUT ${SBE_JAR}
COMMAND ./gradlew build -x check -x javadoc --info --stacktrace :sbe-all:build
DEPENDS ${SBE_SOURCES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating SBE jar"
)

add_custom_target(sbe-jar
DEPENDS ${SBE_JAR}
)

set(CODEC_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(CODEC_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/resources")
set(CODEC_PERF_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/resources")
set(CODEC_EXAMPLES_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/resources")

include_directories(
${GTEST_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp
${CODEC_TARGET_DIR}
${GTEST_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp
${CODEC_TARGET_DIR}
)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/cpp)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/cpp)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/cpp)

add_dependencies(sbe ir_codecs)
if(SBE_TESTS)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/cpp)
endif()

if(SBE_BUILD_SAMPLES)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/cpp)
endif()

if(SBE_BUILD_BENCHMARKS)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/cpp)
endif()
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,6 @@ NOTE: Linux, Mac OS, and Windows only for the moment. See
[FAQ](https://github.com/real-logic/simple-binary-encoding/wiki/Frequently-Asked-Questions).
Windows builds have been tested with Visual Studio Express 12.

First build using Gradle to generate the SBE jar.

$ ./gradlew

For convenience, a script is provided that does a full clean, build, and test of all targets as a Release build.

$ ./cppbuild/cppbuild
Expand Down
22 changes: 11 additions & 11 deletions sbe-benchmarks/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,27 @@ find_package(Java REQUIRED)
CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME_RT)

if (CMAKE_BUILD_TYPE STREQUAL "Release")
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning OFF bounds checks")
add_definitions(-DNDEBUG)
add_definitions(-DSBE_NO_BOUNDS_CHECK)
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning OFF bounds checks")
add_definitions(-DNDEBUG)
add_definitions(-DSBE_NO_BOUNDS_CHECK)
else ()
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning ON bounds checks")
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning ON bounds checks")
endif ()

set(SRCS_BENCHLET_MAIN benchlet-main.cpp)

set(GENERATED_CODECS
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
)

set(SBE_CAR_SCHEMA ${CODEC_PERF_SCHEMA_DIR}/car.xml)
set(SBE_MD_SCHEMA ${CODEC_PERF_SCHEMA_DIR}/fix-message-samples.xml)

add_custom_command(
OUTPUT ${GENERATED_CODECS}
DEPENDS ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
OUTPUT ${GENERATED_CODECS}
DEPENDS ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA} sbe-jar ${SBE_JAR}
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
)
add_custom_target(perf_codecs DEPENDS ${GENERATED_CODECS})

Expand All @@ -49,6 +49,6 @@ add_dependencies(benchlet-sbe-md-runner perf_codecs)
add_dependencies(benchlet-sbe-car-runner perf_codecs)

if (HAVE_CLOCK_GETTIME_RT)
target_link_libraries(benchlet-sbe-md-runner rt)
target_link_libraries(benchlet-sbe-car-runner rt)
target_link_libraries(benchlet-sbe-md-runner rt)
target_link_libraries(benchlet-sbe-car-runner rt)
endif (HAVE_CLOCK_GETTIME_RT)
8 changes: 4 additions & 4 deletions sbe-samples/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@
find_package(Java REQUIRED)

set(GENERATED_CODECS
${CODEC_TARGET_DIR}/baseline
${CODEC_TARGET_DIR}/baseline
)

set(EXAMPLES_SCHEMA ${CODEC_EXAMPLES_SCHEMA_DIR}/example-schema.xml)

add_custom_command(
OUTPUT ${GENERATED_CODECS}
DEPENDS ${EXAMPLES_SCHEMA}
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
OUTPUT ${GENERATED_CODECS}
DEPENDS ${EXAMPLES_SCHEMA} sbe-jar ${SBE_JAR}
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
)
add_custom_target(examples_codecs DEPENDS ${GENERATED_CODECS})

Expand Down
36 changes: 32 additions & 4 deletions sbe-tool/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,43 @@
# limitations under the License.
#

file(GLOB_RECURSE CODECS
"uk_co_real_logic_sbe_ir_generated/*.h"
)

find_package(Java REQUIRED)

add_custom_target(
ir_codecs
if(NOT(CODECS))
execute_process(
COMMAND
${Java_JAVA_EXECUTABLE}
"-Dsbe.output.dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dsbe.target.language=CPP"
"-jar" "${SBE_JAR}"
"../resources/sbe-ir.xml"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)

file(GLOB_RECURSE CODECS
"uk_co_real_logic_sbe_ir_generated/*.h"
)
endif()

add_custom_command(OUTPUT ${CODECS}
COMMAND
${Java_JAVA_EXECUTABLE}
"-Dsbe.output.dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dsbe.target.language=CPP"
"-jar" "${SBE_JAR}"
"../resources/sbe-ir.xml"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Generate IR codecs"
DEPENDS ${SBE_JAR} sbe-jar "../resources/sbe-ir.xml"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Generate IR codecs"
)

add_custom_target(
ir_codecs
DEPENDS ${CODECS}
)

set(HEADERS
Expand All @@ -37,3 +63,5 @@ set(HEADERS
)

add_library(sbe STATIC ${HEADERS} dummy.cpp)

add_dependencies(sbe ir_codecs)
1 change: 1 addition & 0 deletions sbe-tool/src/test/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ set(GENERATED_CODECS
add_custom_command(
OUTPUT ${GENERATED_CODECS}
DEPENDS ${CODE_GENERATION_SCHEMA} ${CODE_GENERATION_SCHEMA_CPP} ${COMPOSITE_OFFSETS_SCHEMA} ${MESSAGE_BLOCK_LENGTH_TEST}
sbe-jar ${SBE_JAR}
COMMAND ${Java_JAVA_EXECUTABLE}
-Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR}
${CODE_GENERATION_SCHEMA}
Expand Down