Skip to content

Commit ab19cee

Browse files
authored
Merge pull request #623 from denizevrenci/cmake
Optional build, JAR file generation in CMake
2 parents 9868cca + 2b996c7 commit ab19cee

File tree

7 files changed

+120
-58
lines changed

7 files changed

+120
-58
lines changed

.travis.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ matrix:
4040
- libsparsehash-dev
4141
sources:
4242
- ubuntu-toolchain-r-test
43-
before_script: ./gradlew
4443
script: ./cppbuild/cppbuild
4544

4645
- env: COMPILER=g++-7
@@ -54,7 +53,6 @@ matrix:
5453
- libsparsehash-dev
5554
sources:
5655
- ubuntu-toolchain-r-test
57-
before_script: ./gradlew
5856
script: ./cppbuild/cppbuild
5957

6058
- env: COMPILER=g++-8
@@ -68,7 +66,6 @@ matrix:
6866
- libsparsehash-dev
6967
sources:
7068
- ubuntu-toolchain-r-test
71-
before_script: ./gradlew
7269
script: ./cppbuild/cppbuild
7370

7471
- env: COMPILER=clang++-4.0
@@ -84,7 +81,6 @@ matrix:
8481
sources:
8582
- ubuntu-toolchain-r-test
8683
- llvm-toolchain-trusty-4.0
87-
before_script: ./gradlew
8884
script: ./cppbuild/cppbuild
8985

9086
- env: COMPILER=clang++-5.0
@@ -100,7 +96,6 @@ matrix:
10096
sources:
10197
- ubuntu-toolchain-r-test
10298
- llvm-toolchain-trusty-5.0
103-
before_script: ./gradlew
10499
script: ./cppbuild/cppbuild
105100

106101
- env: COMPILER=clang++-6.0
@@ -116,14 +111,12 @@ matrix:
116111
sources:
117112
- ubuntu-toolchain-r-test
118113
- llvm-toolchain-trusty-6.0
119-
before_script: ./gradlew
120114
script: ./cppbuild/cppbuild
121115

122116
- env: COMPILER=clang++
123117
language: c++
124118
compiler: clang
125119
os: osx
126-
before_script: ./gradlew
127120
script: ./cppbuild/cppbuild
128121

129122
before_cache:

CMakeLists.txt

Lines changed: 72 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,44 @@ project("sbe" VERSION "${SBE_VERSION_NUMERIC}")
2525
include(ExternalProject)
2626
include(CheckLibraryExists)
2727

28-
enable_testing()
28+
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
29+
set(STANDALONE_BUILD TRUE)
30+
endif()
31+
32+
option(SBE_TESTS "Enable tests" ${STANDALONE_BUILD})
33+
option(SBE_BUILD_SAMPLES "Enable building the sample projects" ${STANDALONE_BUILD})
34+
option(SBE_BUILD_BENCHMARKS "Enable building the benchmarks" ${STANDALONE_BUILD})
35+
36+
unset(STANDALONE_BUILD)
37+
38+
if(SBE_TESTS)
39+
enable_testing()
40+
endif()
2941

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

35-
ExternalProject_Add(
36-
gtest
37-
URL ${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/lib/gtest-1.7.0.zip
38-
URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
39-
INSTALL_COMMAND ""
40-
LOG_CONFIGURE ON
41-
LOG_BUILD ON
42-
)
43-
44-
ExternalProject_Get_Property(gtest source_dir)
45-
set(GTEST_SOURCE_DIR ${source_dir})
46-
ExternalProject_Get_Property(gtest binary_dir)
47-
set(GTEST_BINARY_DIR ${binary_dir})
47+
if(SBE_TESTS)
48+
set(SBE_THIRDPARTY_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/thirdparty")
49+
50+
ExternalProject_Add(
51+
gtest
52+
URL ${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/lib/gtest-1.7.0.zip
53+
URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
54+
PREFIX "${SBE_THIRDPARTY_BINARY_DIR}/gtest"
55+
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}"
56+
INSTALL_COMMAND ""
57+
LOG_CONFIGURE ON
58+
LOG_BUILD ON
59+
)
60+
61+
ExternalProject_Get_Property(gtest source_dir)
62+
set(GTEST_SOURCE_DIR ${source_dir})
63+
ExternalProject_Get_Property(gtest binary_dir)
64+
set(GTEST_BINARY_DIR ${binary_dir})
65+
endif()
4866

4967
find_package(Threads)
5068

@@ -55,16 +73,16 @@ if(UNIX)
5573
endif()
5674

5775
if(APPLE)
58-
# -Wall doesn't enable everything we want to see
59-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare")
60-
add_definitions(-DDarwin)
76+
# -Wall doesn't enable everything we want to see
77+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare")
78+
add_definitions(-DDarwin)
6179
elseif(MSVC)
62-
add_definitions(-DWIN32)
80+
add_definitions(-DWIN32)
6381

6482
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /Od /Zi")
6583
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
6684
else()
67-
add_definitions(-D_GNU_SOURCE)
85+
add_definitions(-D_GNU_SOURCE)
6886
endif()
6987

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

7694
set(SBE_JAR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-all/build/libs/sbe-all-${SBE_VERSION_TXT}.jar")
7795
if(EXISTS "${SBE_JAR}")
78-
message("latest SBE jar found: ${SBE_JAR}")
96+
message("latest SBE jar found: ${SBE_JAR}")
7997
else()
80-
message(FATAL_ERROR "could not find latest SBE jar in ${CMAKE_CURRENT_SOURCE_DIR}/sbe-all/build/libs")
98+
message("Generating SBE jar")
99+
execute_process(
100+
COMMAND ./gradlew build -x check -x javadoc --info --stacktrace :sbe-all:build
101+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
102+
)
81103
endif()
82104

105+
file(GLOB_RECURSE SBE_SOURCES
106+
"${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/java/*.java"
107+
)
108+
109+
add_custom_command(OUTPUT ${SBE_JAR}
110+
COMMAND ./gradlew build -x check -x javadoc --info --stacktrace :sbe-all:build
111+
DEPENDS ${SBE_SOURCES}
112+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
113+
COMMENT "Generating SBE jar"
114+
)
115+
116+
add_custom_target(sbe-jar
117+
DEPENDS ${SBE_JAR}
118+
)
119+
83120
set(CODEC_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
84121
set(CODEC_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/resources")
85122
set(CODEC_PERF_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/resources")
86123
set(CODEC_EXAMPLES_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/resources")
87124

88125
include_directories(
89-
${GTEST_SOURCE_DIR}/include
90-
${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp
91-
${CODEC_TARGET_DIR}
126+
${GTEST_SOURCE_DIR}/include
127+
${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp
128+
${CODEC_TARGET_DIR}
92129
)
93130

94131
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp)
95-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/cpp)
96-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/cpp)
97-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/cpp)
98132

99-
add_dependencies(sbe ir_codecs)
133+
if(SBE_TESTS)
134+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/cpp)
135+
endif()
136+
137+
if(SBE_BUILD_SAMPLES)
138+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/cpp)
139+
endif()
140+
141+
if(SBE_BUILD_BENCHMARKS)
142+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/cpp)
143+
endif()

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,6 @@ NOTE: Linux, Mac OS, and Windows only for the moment. See
7474
[FAQ](https://github.com/real-logic/simple-binary-encoding/wiki/Frequently-Asked-Questions).
7575
Windows builds have been tested with Visual Studio Express 12.
7676

77-
First build using Gradle to generate the SBE jar.
78-
79-
$ ./gradlew
80-
8177
For convenience, a script is provided that does a full clean, build, and test of all targets as a Release build.
8278

8379
$ ./cppbuild/cppbuild

sbe-benchmarks/src/main/cpp/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,27 @@ find_package(Java REQUIRED)
1919
CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME_RT)
2020

2121
if (CMAKE_BUILD_TYPE STREQUAL "Release")
22-
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning OFF bounds checks")
23-
add_definitions(-DNDEBUG)
24-
add_definitions(-DSBE_NO_BOUNDS_CHECK)
22+
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning OFF bounds checks")
23+
add_definitions(-DNDEBUG)
24+
add_definitions(-DSBE_NO_BOUNDS_CHECK)
2525
else ()
26-
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning ON bounds checks")
26+
message("Build type(${CMAKE_BUILD_TYPE}): perf tests turning ON bounds checks")
2727
endif ()
2828

2929
set(SRCS_BENCHLET_MAIN benchlet-main.cpp)
3030

3131
set(GENERATED_CODECS
32-
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
33-
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
32+
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
33+
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
3434
)
3535

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

3939
add_custom_command(
40-
OUTPUT ${GENERATED_CODECS}
41-
DEPENDS ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
42-
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
40+
OUTPUT ${GENERATED_CODECS}
41+
DEPENDS ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA} sbe-jar ${SBE_JAR}
42+
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
4343
)
4444
add_custom_target(perf_codecs DEPENDS ${GENERATED_CODECS})
4545

@@ -49,6 +49,6 @@ add_dependencies(benchlet-sbe-md-runner perf_codecs)
4949
add_dependencies(benchlet-sbe-car-runner perf_codecs)
5050

5151
if (HAVE_CLOCK_GETTIME_RT)
52-
target_link_libraries(benchlet-sbe-md-runner rt)
53-
target_link_libraries(benchlet-sbe-car-runner rt)
52+
target_link_libraries(benchlet-sbe-md-runner rt)
53+
target_link_libraries(benchlet-sbe-car-runner rt)
5454
endif (HAVE_CLOCK_GETTIME_RT)

sbe-samples/src/main/cpp/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
find_package(Java REQUIRED)
1818

1919
set(GENERATED_CODECS
20-
${CODEC_TARGET_DIR}/baseline
20+
${CODEC_TARGET_DIR}/baseline
2121
)
2222

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

2525
add_custom_command(
26-
OUTPUT ${GENERATED_CODECS}
27-
DEPENDS ${EXAMPLES_SCHEMA}
28-
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
26+
OUTPUT ${GENERATED_CODECS}
27+
DEPENDS ${EXAMPLES_SCHEMA} sbe-jar ${SBE_JAR}
28+
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
2929
)
3030
add_custom_target(examples_codecs DEPENDS ${GENERATED_CODECS})
3131

sbe-tool/src/main/cpp/CMakeLists.txt

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,43 @@
1414
# limitations under the License.
1515
#
1616

17+
file(GLOB_RECURSE CODECS
18+
"uk_co_real_logic_sbe_ir_generated/*.h"
19+
)
20+
1721
find_package(Java REQUIRED)
1822

19-
add_custom_target(
20-
ir_codecs
23+
if(NOT(CODECS))
24+
execute_process(
25+
COMMAND
26+
${Java_JAVA_EXECUTABLE}
27+
"-Dsbe.output.dir=${CMAKE_CURRENT_SOURCE_DIR}"
28+
"-Dsbe.target.language=CPP"
29+
"-jar" "${SBE_JAR}"
30+
"../resources/sbe-ir.xml"
31+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
32+
)
33+
34+
file(GLOB_RECURSE CODECS
35+
"uk_co_real_logic_sbe_ir_generated/*.h"
36+
)
37+
endif()
38+
39+
add_custom_command(OUTPUT ${CODECS}
40+
COMMAND
2141
${Java_JAVA_EXECUTABLE}
2242
"-Dsbe.output.dir=${CMAKE_CURRENT_SOURCE_DIR}"
2343
"-Dsbe.target.language=CPP"
2444
"-jar" "${SBE_JAR}"
2545
"../resources/sbe-ir.xml"
26-
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
27-
COMMENT "Generate IR codecs"
46+
DEPENDS ${SBE_JAR} sbe-jar "../resources/sbe-ir.xml"
47+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
48+
COMMENT "Generate IR codecs"
49+
)
50+
51+
add_custom_target(
52+
ir_codecs
53+
DEPENDS ${CODECS}
2854
)
2955

3056
set(HEADERS
@@ -37,3 +63,5 @@ set(HEADERS
3763
)
3864

3965
add_library(sbe STATIC ${HEADERS} dummy.cpp)
66+
67+
add_dependencies(sbe ir_codecs)

sbe-tool/src/test/cpp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ set(GENERATED_CODECS
4444
add_custom_command(
4545
OUTPUT ${GENERATED_CODECS}
4646
DEPENDS ${CODE_GENERATION_SCHEMA} ${CODE_GENERATION_SCHEMA_CPP} ${COMPOSITE_OFFSETS_SCHEMA} ${MESSAGE_BLOCK_LENGTH_TEST}
47+
sbe-jar ${SBE_JAR}
4748
COMMAND ${Java_JAVA_EXECUTABLE}
4849
-Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir="true" -Dsbe.target.language="cpp" -jar ${SBE_JAR}
4950
${CODE_GENERATION_SCHEMA}

0 commit comments

Comments
 (0)