• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1cmake_minimum_required(VERSION 2.8)
2
3project(FlatBuffers)
4
5# NOTE: Code coverage only works on Linux & OSX.
6option(FLATBUFFERS_CODE_COVERAGE "Enable the code coverage build option." OFF)
7option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
8option(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
9option(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library"
10       ON)
11option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
12       ON)
13option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
14option(FLATBUFFERS_BUILD_GRPCTEST "Enable the build of grpctest" OFF)
15option(FLATBUFFERS_BUILD_SHAREDLIB
16       "Enable the build of the flatbuffers shared library"
17       OFF)
18
19if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
20    message(WARNING
21    "Cannot build tests without building the compiler. Tests will be disabled.")
22    set(FLATBUFFERS_BUILD_TESTS OFF)
23endif()
24
25set(FlatBuffers_Library_SRCS
26  include/flatbuffers/code_generators.h
27  include/flatbuffers/flatbuffers.h
28  include/flatbuffers/hash.h
29  include/flatbuffers/idl.h
30  include/flatbuffers/util.h
31  include/flatbuffers/reflection.h
32  include/flatbuffers/reflection_generated.h
33  include/flatbuffers/flexbuffers.h
34  src/code_generators.cpp
35  src/idl_parser.cpp
36  src/idl_gen_text.cpp
37  src/reflection.cpp
38  src/util.cpp
39)
40
41set(FlatBuffers_Compiler_SRCS
42  ${FlatBuffers_Library_SRCS}
43  src/idl_gen_cpp.cpp
44  src/idl_gen_general.cpp
45  src/idl_gen_go.cpp
46  src/idl_gen_js.cpp
47  src/idl_gen_php.cpp
48  src/idl_gen_python.cpp
49  src/idl_gen_fbs.cpp
50  src/idl_gen_grpc.cpp
51  src/flatc.cpp
52  src/flatc_main.cpp
53  grpc/src/compiler/schema_interface.h
54  grpc/src/compiler/cpp_generator.h
55  grpc/src/compiler/cpp_generator.cc
56  grpc/src/compiler/go_generator.h
57  grpc/src/compiler/go_generator.cc
58)
59
60set(FlatHash_SRCS
61  include/flatbuffers/hash.h
62  src/flathash.cpp
63)
64
65set(FlatBuffers_Tests_SRCS
66  ${FlatBuffers_Library_SRCS}
67  src/idl_gen_fbs.cpp
68  tests/test.cpp
69  # file generate by running compiler on tests/monster_test.fbs
70  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
71)
72
73set(FlatBuffers_Sample_Binary_SRCS
74  include/flatbuffers/flatbuffers.h
75  samples/sample_binary.cpp
76  # file generated by running compiler on samples/monster.fbs
77  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
78)
79
80set(FlatBuffers_Sample_Text_SRCS
81  ${FlatBuffers_Library_SRCS}
82  samples/sample_text.cpp
83  # file generated by running compiler on samples/monster.fbs
84  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
85)
86
87set(FlatBuffers_GRPCTest_SRCS
88  include/flatbuffers/flatbuffers.h
89  include/flatbuffers/grpc.h
90  tests/monster_test.grpc.fb.h
91  tests/monster_test.grpc.fb.cc
92  grpc/tests/grpctest.cpp
93  # file generated by running compiler on samples/monster.fbs
94  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
95)
96
97# source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS})
98# source_group(Tests FILES ${FlatBuffers_Tests_SRCS})
99
100if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
101  # do not apply any global settings if the toolchain
102  # is being configured externally
103elseif(APPLE)
104  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
105  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra")
106elseif(CMAKE_COMPILER_IS_GNUCXX)
107  if(CYGWIN)
108    set(CMAKE_CXX_FLAGS
109      "${CMAKE_CXX_FLAGS} -std=gnu++11")
110  else(CYGWIN)
111    set(CMAKE_CXX_FLAGS
112      "${CMAKE_CXX_FLAGS} -std=c++0x")
113  endif(CYGWIN)
114  set(CMAKE_CXX_FLAGS
115    "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Werror=shadow")
116  if (GCC_VERSION VERSION_GREATER 4.4)
117    set(CMAKE_CXX_FLAGS
118      "${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result \
119                          -Wunused-parameter -Werror=unused-parameter")
120  endif()
121
122  # Certain platforms such as ARM do not use signed chars by default
123  # which causes issues with certain bounds checks.
124  set(CMAKE_CXX_FLAGS
125    "${CMAKE_CXX_FLAGS} -fsigned-char")
126
127elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
128  set(CMAKE_CXX_FLAGS
129      "${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -Wall -pedantic -Werror \
130                          -Wextra")
131  if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
132    set(CMAKE_EXE_LINKER_FLAGS
133        "${CMAKE_EXE_LINKER_FLAGS} -lc++abi")
134  endif()
135
136  # Certain platforms such as ARM do not use signed chars by default
137  # which causes issues with certain bounds checks.
138  set(CMAKE_CXX_FLAGS
139    "${CMAKE_CXX_FLAGS} -fsigned-char")
140
141endif()
142
143if(FLATBUFFERS_CODE_COVERAGE)
144  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
145  set(CMAKE_EXE_LINKER_FLAGS
146      "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
147endif()
148
149if(BIICODE)
150  include(biicode/cmake/biicode.cmake)
151  return()
152endif()
153
154include_directories(include)
155include_directories(grpc)
156
157if(FLATBUFFERS_BUILD_FLATLIB)
158add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
159endif()
160
161if(FLATBUFFERS_BUILD_FLATC)
162  add_executable(flatc ${FlatBuffers_Compiler_SRCS})
163  if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
164    set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
165  endif()
166endif()
167
168if(FLATBUFFERS_BUILD_FLATHASH)
169  add_executable(flathash ${FlatHash_SRCS})
170endif()
171
172if(FLATBUFFERS_BUILD_SHAREDLIB)
173  add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
174  set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers)
175endif()
176
177function(compile_flatbuffers_schema_to_cpp SRC_FBS)
178  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
179  string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
180  add_custom_command(
181    OUTPUT ${GEN_HEADER}
182    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -c --no-includes --gen-mutable
183            --gen-object-api -o "${SRC_FBS_DIR}"
184            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
185    DEPENDS flatc)
186endfunction()
187
188function(compile_flatbuffers_schema_to_binary SRC_FBS)
189  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
190  string(REGEX REPLACE "\\.fbs$" ".bfbs" GEN_BINARY_SCHEMA ${SRC_FBS})
191  add_custom_command(
192    OUTPUT ${GEN_BINARY_SCHEMA}
193    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -b --schema -o "${SRC_FBS_DIR}"
194            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
195    DEPENDS flatc)
196endfunction()
197
198if(FLATBUFFERS_BUILD_TESTS)
199  compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
200  include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
201  add_executable(flattests ${FlatBuffers_Tests_SRCS})
202  set_property(TARGET flattests
203    PROPERTY COMPILE_DEFINITIONS FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
204    FLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1)
205
206  compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
207  include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
208  add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
209  add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
210endif()
211
212if(FLATBUFFERS_BUILD_GRPCTEST)
213  if(CMAKE_COMPILER_IS_GNUCXX)
214    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
215  endif()
216  add_executable(grpctest ${FlatBuffers_GRPCTest_SRCS})
217  target_link_libraries(grpctest grpc++_unsecure grpc pthread dl)
218endif()
219
220if(FLATBUFFERS_INSTALL)
221  install(DIRECTORY include/flatbuffers DESTINATION include)
222  if(FLATBUFFERS_BUILD_FLATLIB)
223    install(TARGETS flatbuffers DESTINATION lib)
224  endif()
225  if(FLATBUFFERS_BUILD_FLATC)
226    install(TARGETS flatc DESTINATION bin)
227  endif()
228  if(FLATBUFFERS_BUILD_SHAREDLIB)
229    install(TARGETS flatbuffers_shared DESTINATION lib)
230  endif()
231endif()
232
233if(FLATBUFFERS_BUILD_TESTS)
234  enable_testing()
235
236  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION
237       "${CMAKE_CURRENT_BINARY_DIR}")
238  add_test(NAME flattests COMMAND flattests)
239endif()
240
241include(CMake/BuildFlatBuffers.cmake)
242
243if(FLATBUFFERS_PACKAGE_DEBIAN)
244    include(CMake/PackageDebian.cmake)
245endif()
246