blob: 3987eac97eac5c4a2896f77ec5bc7a53d71f67a0 [file] [log] [blame]
Haibo Huangb9f6b1a2020-03-16 15:41:29 -07001cmake_minimum_required(VERSION 2.8.12)
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +07002# generate compile_commands.json
3set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Vladimir Glavnyy5f32f942018-11-17 00:24:06 +07004include(CheckCXXSymbolExists)
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -08005
6project(FlatBuffers)
7
8# NOTE: Code coverage only works on Linux & OSX.
9option(FLATBUFFERS_CODE_COVERAGE "Enable the code coverage build option." OFF)
Stewart Miles3f851832014-09-10 16:01:13 -070010option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +080011option(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
Wouter van Oortmerssen3101e322016-07-01 18:08:51 -070012option(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library"
13 ON)
14option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
15 ON)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070016option(FLATBUFFERS_STATIC_FLATC "Build flatbuffers compiler with -static flag"
17 OFF)
Alex Amesd5753212015-02-13 15:58:29 -080018option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -070019option(FLATBUFFERS_BUILD_GRPCTEST "Enable the build of grpctest" OFF)
changneta15659e2016-09-07 01:12:04 +080020option(FLATBUFFERS_BUILD_SHAREDLIB
21 "Enable the build of the flatbuffers shared library"
22 OFF)
Kamil Rojewski6bfa1072018-07-19 18:40:28 +020023option(FLATBUFFERS_LIBCXX_WITH_CLANG "Force libc++ when using Clang" ON)
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +070024# NOTE: Sanitizer check only works on Linux & OSX (gcc & llvm).
Kamil Rojewski30c49482018-12-06 20:12:06 +010025option(FLATBUFFERS_CODE_SANITIZE
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +070026 "Add '-fsanitize' flags to 'flattests' and 'flatc' targets."
27 OFF)
Marc Butler4567b132019-02-22 06:06:04 +110028option(FLATBUFFERS_PACKAGE_REDHAT
29 "Build an rpm using the 'package' target."
30 OFF)
31option(FLATBUFFERS_PACKAGE_DEBIAN
32 "Build an deb using the 'package' target."
33 OFF)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070034option(FLATBUFFERS_BUILD_CPP17
35 "Enable the build of c++17 test target. \"
36 Requirements: Clang6, GCC7, MSVC2017 (_MSC_VER >= 1914) or higher."
37 OFF)
38option(FLATBUFFERS_BUILD_LEGACY
39 "Run C++ code generator with '--cpp-std c++0x' switch."
40 OFF)
Wouter van Oortmerssen9bf9b182019-02-25 11:42:37 -080041
Leander Bessa Beernaert3ec8d7f2015-01-02 13:51:31 +010042if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
43 message(WARNING
44 "Cannot build tests without building the compiler. Tests will be disabled.")
45 set(FLATBUFFERS_BUILD_TESTS OFF)
46endif()
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -080047
Vladimir Glavnyy925c1d72018-10-04 23:27:37 +070048if(DEFINED FLATBUFFERS_MAX_PARSING_DEPTH)
49 # Override the default recursion depth limit.
50 add_definitions(-DFLATBUFFERS_MAX_PARSING_DEPTH=${FLATBUFFERS_MAX_PARSING_DEPTH})
51 message(STATUS "FLATBUFFERS_MAX_PARSING_DEPTH: ${FLATBUFFERS_MAX_PARSING_DEPTH}")
52endif()
53
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070054# Auto-detect locale-narrow 'strtod_l' and 'strtoull_l' functions.
Vladimir Glavnyy5f32f942018-11-17 00:24:06 +070055if(NOT DEFINED FLATBUFFERS_LOCALE_INDEPENDENT)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070056 set(FLATBUFFERS_LOCALE_INDEPENDENT 0)
Vladimir Glavnyy5f32f942018-11-17 00:24:06 +070057 if(MSVC)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070058 check_cxx_symbol_exists(_strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
59 check_cxx_symbol_exists(_strtoui64_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
Vladimir Glavnyy5f32f942018-11-17 00:24:06 +070060 else()
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070061 check_cxx_symbol_exists(strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
62 check_cxx_symbol_exists(strtoull_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
63 endif()
64 if(FLATBUFFERS_HAS_STRTOF_L AND FLATBUFFERS_HAS_STRTOULL_L)
65 set(FLATBUFFERS_LOCALE_INDEPENDENT 1)
Vladimir Glavnyy5f32f942018-11-17 00:24:06 +070066 endif()
67endif()
68add_definitions(-DFLATBUFFERS_LOCALE_INDEPENDENT=$<BOOL:${FLATBUFFERS_LOCALE_INDEPENDENT}>)
69
Martell Malone79d3cb62015-07-22 13:18:59 +010070set(FlatBuffers_Library_SRCS
Wouter van Oortmerssen88a85ff2017-06-15 20:54:04 -070071 include/flatbuffers/base.h
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -080072 include/flatbuffers/flatbuffers.h
Alex Amesd5753212015-02-13 15:58:29 -080073 include/flatbuffers/hash.h
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -080074 include/flatbuffers/idl.h
75 include/flatbuffers/util.h
Wouter van Oortmerssen81312c22015-05-21 16:33:29 -070076 include/flatbuffers/reflection.h
77 include/flatbuffers/reflection_generated.h
Stewart Milesa8923222017-07-13 06:27:39 -070078 include/flatbuffers/stl_emulation.h
Wouter van Oortmerssenaac6be12016-02-01 18:00:30 -080079 include/flatbuffers/flexbuffers.h
Wouter van Oortmerssen88a85ff2017-06-15 20:54:04 -070080 include/flatbuffers/registry.h
Wouter van Oortmerssen72a99ab2017-08-24 17:44:03 -070081 include/flatbuffers/minireflect.h
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -080082 src/idl_parser.cpp
Martell Malone79d3cb62015-07-22 13:18:59 +010083 src/idl_gen_text.cpp
Wouter van Oortmerssen71012242015-07-31 13:55:53 -070084 src/reflection.cpp
Wouter van Oortmerssene98b1912016-03-30 17:34:52 -070085 src/util.cpp
Martell Malone79d3cb62015-07-22 13:18:59 +010086)
87
88set(FlatBuffers_Compiler_SRCS
89 ${FlatBuffers_Library_SRCS}
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -080090 src/idl_gen_cpp.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070091 src/idl_gen_csharp.cpp
Dan Field88912642018-05-18 14:06:15 -040092 src/idl_gen_dart.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070093 src/idl_gen_kotlin.cpp
rw74d5f372014-07-11 16:12:35 -070094 src/idl_gen_go.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -070095 src/idl_gen_java.cpp
Kamil Rojewski30c49482018-12-06 20:12:06 +010096 src/idl_gen_js_ts.cpp
Shuhei Taunma5ce86822015-11-05 16:19:28 +090097 src/idl_gen_php.cpp
rw48dfc692014-12-16 00:32:11 -080098 src/idl_gen_python.cpp
aardappel48988092018-07-23 19:03:11 -070099 src/idl_gen_lobster.cpp
Derek Baileyba5eb3b2018-07-05 15:55:57 -0700100 src/idl_gen_lua.cpp
Robert3c54fd92018-09-02 17:05:50 -0700101 src/idl_gen_rust.cpp
Wouter van Oortmerssend38b9af2014-09-26 16:46:30 -0700102 src/idl_gen_fbs.cpp
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700103 src/idl_gen_grpc.cpp
schoetbif2020412017-07-10 17:05:59 +0200104 src/idl_gen_json_schema.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700105 src/idl_gen_swift.cpp
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800106 src/flatc.cpp
Wouter van Oortmerssenb3953592017-01-25 13:41:34 -0800107 src/flatc_main.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700108 include/flatbuffers/code_generators.h
109 src/code_generators.cpp
Harsh Vardhan2e7806e2016-08-19 10:41:11 +0530110 grpc/src/compiler/schema_interface.h
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700111 grpc/src/compiler/cpp_generator.h
112 grpc/src/compiler/cpp_generator.cc
Ronak Jaina31ddd22016-12-06 02:50:38 +0530113 grpc/src/compiler/go_generator.h
114 grpc/src/compiler/go_generator.cc
Yuri Finkelstein8518b3f2017-12-21 07:55:57 -1000115 grpc/src/compiler/java_generator.h
116 grpc/src/compiler/java_generator.cc
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700117 grpc/src/compiler/python_generator.h
118 grpc/src/compiler/python_private_generator.h
119 grpc/src/compiler/python_generator.cc
120 grpc/src/compiler/swift_generator.h
121 grpc/src/compiler/swift_generator.cc
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800122)
123
Alex Amesd5753212015-02-13 15:58:29 -0800124set(FlatHash_SRCS
125 include/flatbuffers/hash.h
126 src/flathash.cpp
127)
128
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800129set(FlatBuffers_Tests_SRCS
Wouter van Oortmerssen71012242015-07-31 13:55:53 -0700130 ${FlatBuffers_Library_SRCS}
Wouter van Oortmerssend38b9af2014-09-26 16:46:30 -0700131 src/idl_gen_fbs.cpp
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800132 tests/test.cpp
Sumant Tambe49fed8c2018-09-24 12:03:31 -0700133 tests/test_assert.h
134 tests/test_assert.cpp
135 tests/test_builder.h
136 tests/test_builder.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700137 tests/native_type_test_impl.h
138 tests/native_type_test_impl.cpp
139 include/flatbuffers/code_generators.h
140 src/code_generators.cpp
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800141 # file generate by running compiler on tests/monster_test.fbs
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800142 ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700143 # file generate by running compiler on namespace_test/namespace_test1.fbs
144 ${CMAKE_CURRENT_BINARY_DIR}/tests/namespace_test/namespace_test1_generated.h
145 ${CMAKE_CURRENT_BINARY_DIR}/tests/namespace_test/namespace_test2_generated.h
146 # file generate by running compiler on union_vector/union_vector.fbs
147 ${CMAKE_CURRENT_BINARY_DIR}/tests/union_vector/union_vector_generated.h
148 # file generate by running compiler on tests/arrays_test.fbs
149 ${CMAKE_CURRENT_BINARY_DIR}/tests/arrays_test_generated.h
150 # file generate by running compiler on tests/native_type_test.fbs
151 ${CMAKE_CURRENT_BINARY_DIR}/tests/native_type_test_generated.h
152 # file generate by running compiler on tests/monster_extra.fbs
153 ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_extra_generated.h
154 # file generate by running compiler on tests/monster_test.fbs
155 ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_bfbs_generated.h
156)
157
158set(FlatBuffers_Tests_CPP17_SRCS
159 ${FlatBuffers_Library_SRCS}
160 tests/test_assert.h
161 tests/test_assert.cpp
162 tests/cpp17/test_cpp17.cpp
163 # file generate by running compiler on tests/monster_test.fbs
164 ${CMAKE_CURRENT_BINARY_DIR}/tests/cpp17/generated_cpp17/monster_test_generated.h
165 ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
Vladimir Glavnyy44bf7192019-12-24 03:13:48 +0700166)
167
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800168set(FlatBuffers_Sample_Binary_SRCS
169 include/flatbuffers/flatbuffers.h
170 samples/sample_binary.cpp
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800171 # file generated by running compiler on samples/monster.fbs
172 ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800173)
174
175set(FlatBuffers_Sample_Text_SRCS
Wouter van Oortmerssen7b94eab2017-01-13 17:44:42 -0800176 ${FlatBuffers_Library_SRCS}
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800177 samples/sample_text.cpp
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800178 # file generated by running compiler on samples/monster.fbs
179 ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800180)
181
tira-misudba962e2018-12-13 20:59:27 +0100182set(FlatBuffers_Sample_BFBS_SRCS
183 ${FlatBuffers_Library_SRCS}
tira-misudba962e2018-12-13 20:59:27 +0100184 samples/sample_bfbs.cpp
185 # file generated by running compiler on samples/monster.fbs
186 ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
187)
188
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700189set(FlatBuffers_GRPCTest_SRCS
190 include/flatbuffers/flatbuffers.h
191 include/flatbuffers/grpc.h
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700192 include/flatbuffers/util.h
193 src/util.cpp
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700194 tests/monster_test.grpc.fb.h
Sumant Tambe49fed8c2018-09-24 12:03:31 -0700195 tests/test_assert.h
196 tests/test_builder.h
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700197 tests/monster_test.grpc.fb.cc
Sumant Tambe49fed8c2018-09-24 12:03:31 -0700198 tests/test_assert.cpp
199 tests/test_builder.cpp
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700200 grpc/tests/grpctest.cpp
Sumant Tambee7578542018-08-30 16:43:22 -0700201 grpc/tests/message_builder_test.cpp
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700202 # file generate by running compiler on tests/monster_test.fbs
203 ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700204)
205
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800206# source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS})
207# source_group(Tests FILES ${FlatBuffers_Tests_SRCS})
208
Andrew Hundt520d6842016-10-05 16:20:30 -0400209if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
Wouter van Oortmerssen606098c2016-10-17 13:06:11 -0700210 # do not apply any global settings if the toolchain
Andrew Hundt520d6842016-10-05 16:20:30 -0400211 # is being configured externally
Vladimir Glavnyy7d3930a2019-01-29 01:16:12 +0700212 message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
Andrew Hundt520d6842016-10-05 16:20:30 -0400213elseif(APPLE)
Jason Sanmiya30c07f42016-07-22 19:04:23 -0700214 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
Per Grön9aeeddf2017-05-12 18:48:17 +0200215 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Wno-unused-parameter")
Frank Benkstein20396a12018-10-16 00:11:31 +0200216 set(FLATBUFFERS_PRIVATE_CXX_FLAGS "-Wold-style-cast")
Wouter van Oortmerssen932b22f2015-05-27 16:57:21 -0700217elseif(CMAKE_COMPILER_IS_GNUCXX)
Tony Kelman4c160382016-04-01 21:42:23 -0700218 if(CYGWIN)
219 set(CMAKE_CXX_FLAGS
220 "${CMAKE_CXX_FLAGS} -std=gnu++11")
221 else(CYGWIN)
222 set(CMAKE_CXX_FLAGS
223 "${CMAKE_CXX_FLAGS} -std=c++0x")
224 endif(CYGWIN)
Wouter van Oortmerssenbc5fa9d2014-08-25 10:42:38 -0700225 set(CMAKE_CXX_FLAGS
Tony Kelman4c160382016-04-01 21:42:23 -0700226 "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Werror=shadow")
Frank Benkstein20396a12018-10-16 00:11:31 +0200227 set(FLATBUFFERS_PRIVATE_CXX_FLAGS "-Wold-style-cast")
Kamil Rojewski474ba682018-02-12 17:37:51 +0100228 if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.4)
229 if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
230 set(CMAKE_CXX_FLAGS
Wouter van Oortmerssena821b152018-12-26 16:02:14 -0800231 "${CMAKE_CXX_FLAGS} -faligned-new -Werror=implicit-fallthrough=2")
Kamil Rojewski474ba682018-02-12 17:37:51 +0100232 endif()
maurice barnum697cad72016-02-11 00:03:53 +0000233 set(CMAKE_CXX_FLAGS
Juyeon Yoon09988612018-04-06 01:17:33 +0900234 "${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result -Wunused-parameter -Werror=unused-parameter")
maurice barnum697cad72016-02-11 00:03:53 +0000235 endif()
Will Gardnerce4d3312016-02-29 17:28:40 +0000236
237 # Certain platforms such as ARM do not use signed chars by default
238 # which causes issues with certain bounds checks.
239 set(CMAKE_CXX_FLAGS
240 "${CMAKE_CXX_FLAGS} -fsigned-char")
241
Jason Sanmiya985de212016-09-08 10:47:50 -0700242elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
Wouter van Oortmerssen932b22f2015-05-27 16:57:21 -0700243 set(CMAKE_CXX_FLAGS
Alex Amesf2627e12017-10-20 16:29:51 -0700244 "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic -Werror -Wextra -Wno-unused-parameter")
Frank Benkstein20396a12018-10-16 00:11:31 +0200245 set(FLATBUFFERS_PRIVATE_CXX_FLAGS "-Wold-style-cast")
Vladimir Glavnyy7d3930a2019-01-29 01:16:12 +0700246 if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.8)
Wouter van Oortmerssene237f532019-03-07 15:14:40 -0800247 list(APPEND FLATBUFFERS_PRIVATE_CXX_FLAGS "-Wimplicit-fallthrough" "-Wextra-semi" "-Werror=unused-private-field") # enable warning
Vladimir Glavnyy7d3930a2019-01-29 01:16:12 +0700248 endif()
Kamil Rojewski6bfa1072018-07-19 18:40:28 +0200249 if(FLATBUFFERS_LIBCXX_WITH_CLANG)
250 if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
251 set(CMAKE_CXX_FLAGS
252 "${CMAKE_CXX_FLAGS} -stdlib=libc++")
253 endif()
254 if(NOT ("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD" OR
255 "${CMAKE_SYSTEM_NAME}" MATCHES "Linux"))
256 set(CMAKE_EXE_LINKER_FLAGS
257 "${CMAKE_EXE_LINKER_FLAGS} -lc++abi")
258 endif()
Yuri26f15bc2016-03-02 17:15:42 -0800259 endif()
Will Gardnerce4d3312016-02-29 17:28:40 +0000260
261 # Certain platforms such as ARM do not use signed chars by default
262 # which causes issues with certain bounds checks.
263 set(CMAKE_CXX_FLAGS
264 "${CMAKE_CXX_FLAGS} -fsigned-char")
265
Wouter van Oortmerssen6561c7a2017-02-15 17:44:55 -0800266elseif(MSVC)
chronoxorf5387382017-03-10 21:27:30 +0300267 # Visual Studio pedantic build settings
Wouter van Oortmerssen238a8eb2017-03-29 12:01:11 -0700268 # warning C4512: assignment operator could not be generated
Wouter van Oortmerssene93a5652017-04-24 10:29:25 -0700269 # warning C4316: object allocated on the heap may not be aligned
270 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /wd4512 /wd4316")
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800271endif()
272
273if(FLATBUFFERS_CODE_COVERAGE)
Stefan Eilemann52f4f452014-07-26 13:12:56 +0200274 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
Wouter van Oortmerssen8f80fec2014-07-29 10:29:38 -0700275 set(CMAKE_EXE_LINKER_FLAGS
276 "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800277endif()
278
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +0700279function(add_fsanitize_to_target _target _sanitizer)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700280 if(WIN32)
281 target_compile_definitions(${_target} PRIVATE FLATBUFFERS_MEMORY_LEAK_TRACKING)
282 message(STATUS "Sanitizer MSVC::_CrtDumpMemoryLeaks added to ${_target}")
283 else()
284 # FLATBUFFERS_CODE_SANITIZE: boolean {ON,OFF,YES,NO} or string with list of sanitizer.
285 # List of sanitizer is string starts with '=': "=address,undefined,thread,memory".
286 if((${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") OR
287 ((${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9"))
288 )
289 set(_sanitizer_flags "=address,undefined")
290 if(_sanitizer MATCHES "=.*")
291 # override default by user-defined sanitizer list
292 set(_sanitizer_flags ${_sanitizer})
293 endif()
294 target_compile_options(${_target} PRIVATE
295 -g -fsigned-char -fno-omit-frame-pointer
296 "-fsanitize${_sanitizer_flags}")
297 target_link_libraries(${_target} PRIVATE
298 "-fsanitize${_sanitizer_flags}")
299 set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ON)
300 message(STATUS "Sanitizer ${_sanitizer_flags} added to ${_target}")
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +0700301 endif()
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +0700302 endif()
303endfunction()
304
franramirez688da0f0962015-01-31 11:14:59 -0500305if(BIICODE)
franchuti68823f75f52015-04-01 12:35:37 +0200306 include(biicode/cmake/biicode.cmake)
franramirez688da0f0962015-01-31 11:14:59 -0500307 return()
franchuti68823f75f52015-04-01 12:35:37 +0200308endif()
franramirez688da0f0962015-01-31 11:14:59 -0500309
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800310include_directories(include)
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700311include_directories(grpc)
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800312
Martell Malone79d3cb62015-07-22 13:18:59 +0100313if(FLATBUFFERS_BUILD_FLATLIB)
Vladimir Glavnyy27e4f432018-08-07 04:59:29 +0700314 add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700315 # Attach header directory for when build via add_subdirectory().
Vladimir Glavnyy27e4f432018-08-07 04:59:29 +0700316 target_include_directories(flatbuffers INTERFACE
317 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
Frank Benkstein20396a12018-10-16 00:11:31 +0200318 target_compile_options(flatbuffers PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
Martell Malone79d3cb62015-07-22 13:18:59 +0100319endif()
320
Leander Bessa Beernaert3ec8d7f2015-01-02 13:51:31 +0100321if(FLATBUFFERS_BUILD_FLATC)
Alex Amesd5753212015-02-13 15:58:29 -0800322 add_executable(flatc ${FlatBuffers_Compiler_SRCS})
Frank Benkstein20396a12018-10-16 00:11:31 +0200323 target_compile_options(flatc PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
Vladimir Glavnyy3f388ec2019-01-25 04:30:11 +0700324 if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
Vladimir Glavnyy0fb1d442018-10-30 01:29:05 +0700325 add_fsanitize_to_target(flatc ${FLATBUFFERS_CODE_SANITIZE})
326 endif()
Xiaolei Yu3a8bc302016-05-01 11:15:53 +0800327 if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
328 set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
329 endif()
Wouter van Oortmerssencb2481e2017-05-10 15:42:23 -0700330 if(MSVC)
331 # Make flatc.exe not depend on runtime dlls for easy distribution.
332 target_compile_options(flatc PUBLIC $<$<CONFIG:Release>:/MT>)
333 endif()
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700334 if(FLATBUFFERS_STATIC_FLATC AND NOT MSVC)
335 target_link_libraries(flatc PRIVATE -static)
336 endif()
Alex Amesd5753212015-02-13 15:58:29 -0800337endif()
338
Jason Sanmiyaf47660f2015-04-28 15:44:10 -0700339if(FLATBUFFERS_BUILD_FLATHASH)
Alex Amesd5753212015-02-13 15:58:29 -0800340 add_executable(flathash ${FlatHash_SRCS})
Leander Bessa Beernaert3ec8d7f2015-01-02 13:51:31 +0100341endif()
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800342
changneta15659e2016-09-07 01:12:04 +0800343if(FLATBUFFERS_BUILD_SHAREDLIB)
344 add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
Sergey Avseyevca52bfe2017-11-10 01:39:32 +0300345
346 # Shared object version: "major.minor.micro"
347 # - micro updated every release when there is no API/ABI changes
348 # - minor updated when there are additions in API/ABI
349 # - major (ABI number) updated when there are changes in ABI (or removals)
350 set(FlatBuffers_Library_SONAME_MAJOR "1")
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700351 set(FlatBuffers_Library_SONAME_FULL "${FlatBuffers_Library_SONAME_MAJOR}.12.0")
Sergey Avseyevca52bfe2017-11-10 01:39:32 +0300352 set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
353 SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}"
354 VERSION "${FlatBuffers_Library_SONAME_FULL}")
changneta15659e2016-09-07 01:12:04 +0800355endif()
356
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700357# Global list of generated files.
358# Use the global property to be independent of PARENT_SCOPE.
359set_property(GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
360
361function(get_generated_output generated_files)
362 get_property(tmp GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
363 set(${generated_files} ${tmp} PARENT_SCOPE)
364endfunction(get_generated_output)
365
366function(register_generated_output file_name)
367 get_property(tmp GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
368 list(APPEND tmp ${file_name})
369 set_property(GLOBAL PROPERTY FBS_GENERATED_OUTPUTS ${tmp})
370endfunction(register_generated_output)
371
372function(compile_flatbuffers_schema_to_cpp_opt SRC_FBS OPT)
373 if(FLATBUFFERS_BUILD_LEGACY)
374 set(OPT ${OPT};--cpp-std c++0x)
375 else()
376 # --cpp-std is defined by flatc default settings.
377 endif()
378 message(STATUS "`${SRC_FBS}`: add generation of C++ code with '${OPT}'")
Wouter van Oortmerssen4cdf3eb2014-10-24 14:26:29 -0700379 get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
Wouter van Oortmerssen7b805352014-09-23 11:55:42 -0700380 string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800381 add_custom_command(
382 OUTPUT ${GEN_HEADER}
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700383 COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
384 --cpp --gen-mutable --gen-object-api --reflect-names
Stewart Milesa8923222017-07-13 06:27:39 -0700385 --cpp-ptr-type flatbuffers::unique_ptr # Used to test with C++98 STLs
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700386 ${OPT}
Wouter van Oortmerssen22743ca2017-05-24 15:21:26 -0700387 -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700388 -o "${SRC_FBS_DIR}"
Wouter van Oortmerssen3101e322016-07-01 18:08:51 -0700389 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700390 DEPENDS flatc
391 COMMENT "Run generation: '${GEN_HEADER}'")
392 register_generated_output(${GEN_HEADER})
393endfunction()
394
395function(compile_flatbuffers_schema_to_cpp SRC_FBS)
396 compile_flatbuffers_schema_to_cpp_opt(${SRC_FBS} "--no-includes;--gen-compare")
svenk177e6351412019-06-18 00:15:13 +0200397endfunction()
398
Wouter van Oortmerssen81312c22015-05-21 16:33:29 -0700399function(compile_flatbuffers_schema_to_binary SRC_FBS)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700400 message(STATUS "`${SRC_FBS}`: add generation of binary (.bfbs) schema")
Wouter van Oortmerssen81312c22015-05-21 16:33:29 -0700401 get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
402 string(REGEX REPLACE "\\.fbs$" ".bfbs" GEN_BINARY_SCHEMA ${SRC_FBS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700403 # For details about flags see generate_code.bat(sh)
Wouter van Oortmerssen81312c22015-05-21 16:33:29 -0700404 add_custom_command(
405 OUTPUT ${GEN_BINARY_SCHEMA}
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700406 COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
407 -b --schema --bfbs-comments --bfbs-builtins
408 -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
409 -o "${SRC_FBS_DIR}"
Wouter van Oortmerssen3101e322016-07-01 18:08:51 -0700410 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700411 DEPENDS flatc
412 COMMENT "Run generation: '${GEN_BINARY_SCHEMA}'")
413 register_generated_output(${GEN_BINARY_SCHEMA})
414endfunction()
415
416function(compile_flatbuffers_schema_to_embedded_binary SRC_FBS OPT)
417 if(FLATBUFFERS_BUILD_LEGACY)
418 set(OPT ${OPT};--cpp-std c++0x)
419 else()
420 # --cpp-std is defined by flatc default settings.
421 endif()
422 message(STATUS "`${SRC_FBS}`: add generation of C++ embedded binary schema code with '${OPT}'")
423 get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
424 string(REGEX REPLACE "\\.fbs$" "_bfbs_generated.h" GEN_BFBS_HEADER ${SRC_FBS})
425 # For details about flags see generate_code.bat(sh)
426 add_custom_command(
427 OUTPUT ${GEN_BFBS_HEADER}
428 COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
429 --cpp --gen-mutable --gen-object-api --reflect-names
430 --cpp-ptr-type flatbuffers::unique_ptr # Used to test with C++98 STLs
431 ${OPT}
432 --bfbs-comments --bfbs-builtins --bfbs-gen-embed
433 -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
434 -o "${SRC_FBS_DIR}"
435 "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
436 DEPENDS flatc
437 COMMENT "Run generation: '${GEN_BFBS_HEADER}'")
438 register_generated_output(${GEN_BFBS_HEADER})
sjoblom6547026ea2020-01-24 17:55:34 -0500439endfunction()
440
Stewart Miles3f851832014-09-10 16:01:13 -0700441if(FLATBUFFERS_BUILD_TESTS)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700442 file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
443 file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/samples" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
444
445 # TODO Add (monster_test.fbs monsterdata_test.json)->monsterdata_test.mon
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800446 compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700447 compile_flatbuffers_schema_to_binary(tests/monster_test.fbs)
448 compile_flatbuffers_schema_to_cpp(tests/namespace_test/namespace_test1.fbs)
449 compile_flatbuffers_schema_to_cpp(tests/namespace_test/namespace_test2.fbs)
450 compile_flatbuffers_schema_to_cpp(tests/union_vector/union_vector.fbs)
451 compile_flatbuffers_schema_to_cpp_opt(tests/native_type_test.fbs "")
452 compile_flatbuffers_schema_to_cpp_opt(tests/arrays_test.fbs "--scoped-enums;--gen-compare")
453 compile_flatbuffers_schema_to_binary(tests/arrays_test.fbs)
454 compile_flatbuffers_schema_to_embedded_binary(tests/monster_test.fbs "--no-includes;--gen-compare")
455 if(NOT (MSVC AND (MSVC_VERSION LESS 1900)))
456 compile_flatbuffers_schema_to_cpp(tests/monster_extra.fbs) # Test floating-point NAN/INF.
457 endif()
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800458 include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
Stewart Miles3f851832014-09-10 16:01:13 -0700459 add_executable(flattests ${FlatBuffers_Tests_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700460 add_dependencies(flattests generated_code)
Zarian Waheed6d6271d2016-12-16 08:46:30 -0800461 set_property(TARGET flattests
462 PROPERTY COMPILE_DEFINITIONS FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
463 FLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1)
Vladimir Glavnyy3f388ec2019-01-25 04:30:11 +0700464 if(FLATBUFFERS_CODE_SANITIZE)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700465 add_fsanitize_to_target(flattests ${FLATBUFFERS_CODE_SANITIZE})
Vladimir Glavnyy3f388ec2019-01-25 04:30:11 +0700466 endif()
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800467
468 compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700469 compile_flatbuffers_schema_to_binary(samples/monster.fbs)
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800470 include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
Stewart Miles3f851832014-09-10 16:01:13 -0700471 add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700472 add_dependencies(flatsamplebinary generated_code)
Stewart Miles3f851832014-09-10 16:01:13 -0700473 add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700474 add_dependencies(flatsampletext generated_code)
tira-misudba962e2018-12-13 20:59:27 +0100475 add_executable(flatsamplebfbs ${FlatBuffers_Sample_BFBS_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700476 add_dependencies(flatsamplebfbs generated_code)
477
478 if(FLATBUFFERS_BUILD_CPP17)
479 # Don't generate header for flattests_cpp17 target.
480 # This target uses "generated_cpp17/monster_test_generated.h"
481 # produced by direct call of generate_code.bat(sh) script.
482 add_executable(flattests_cpp17 ${FlatBuffers_Tests_CPP17_SRCS})
483 add_dependencies(flattests_cpp17 generated_code)
484 target_compile_features(flattests_cpp17 PRIVATE cxx_std_17)
485 target_compile_definitions(flattests_cpp17 PRIVATE
486 FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
487 FLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1
488 )
489 if(FLATBUFFERS_CODE_SANITIZE)
490 add_fsanitize_to_target(flattests_cpp17 ${FLATBUFFERS_CODE_SANITIZE})
491 endif()
492 endif(FLATBUFFERS_BUILD_CPP17)
Stewart Miles3f851832014-09-10 16:01:13 -0700493endif()
Wouter van Oortmerssen26a30732014-01-27 16:52:49 -0800494
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700495if(FLATBUFFERS_BUILD_GRPCTEST)
496 if(CMAKE_COMPILER_IS_GNUCXX)
Lawrence Chanda67c0a2017-06-07 15:56:49 -0500497 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-shadow")
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700498 endif()
Sumant Tambee7578542018-08-30 16:43:22 -0700499 if(NOT GRPC_INSTALL_PATH)
500 message(SEND_ERROR "GRPC_INSTALL_PATH variable is not defined. See grpc/README.md")
501 endif()
502 if(NOT PROTOBUF_DOWNLOAD_PATH)
503 message(SEND_ERROR "PROTOBUF_DOWNLOAD_PATH variable is not defined. See grpc/README.md")
504 endif()
505 INCLUDE_DIRECTORIES(${GRPC_INSTALL_PATH}/include)
506 INCLUDE_DIRECTORIES(${PROTOBUF_DOWNLOAD_PATH}/src)
507 LINK_DIRECTORIES(${GRPC_INSTALL_PATH}/lib)
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700508 add_executable(grpctest ${FlatBuffers_GRPCTest_SRCS})
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700509 add_dependencies(grpctest generated_code)
510 target_link_libraries(grpctest PRIVATE grpc++_unsecure grpc_unsecure gpr pthread dl)
511 if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
512 # GRPC test has problems with alignment and will fail under ASAN/UBSAN.
513 # add_fsanitize_to_target(grpctest ${FLATBUFFERS_CODE_SANITIZE})
514 endif()
Wouter van Oortmerssen48f37f92016-04-13 18:16:05 -0700515endif()
516
Dmitry Volosnykhdaf0a422018-02-16 00:39:15 +0300517include(CMake/Version.cmake)
518
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800519if(FLATBUFFERS_INSTALL)
Sergey Avseyev2edb1dc2017-11-06 21:38:53 +0300520 include(GNUInstallDirs)
red19397e803c42017-11-16 21:51:25 +0100521
Sergey Avseyev2edb1dc2017-11-06 21:38:53 +0300522 install(DIRECTORY include/flatbuffers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
red19397e803c42017-11-16 21:51:25 +0100523
524 set(FB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/flatbuffers")
525
Dmitry Volosnykhdaf0a422018-02-16 00:39:15 +0300526 configure_file(CMake/FlatbuffersConfigVersion.cmake.in FlatbuffersConfigVersion.cmake @ONLY)
red19397e803c42017-11-16 21:51:25 +0100527 install(
Dmitry Volosnykhdaf0a422018-02-16 00:39:15 +0300528 FILES "CMake/FlatbuffersConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/FlatbuffersConfigVersion.cmake"
red19397e803c42017-11-16 21:51:25 +0100529 DESTINATION ${FB_CMAKE_DIR}
530 )
531
Martell Malone79d3cb62015-07-22 13:18:59 +0100532 if(FLATBUFFERS_BUILD_FLATLIB)
Bastien Brunnensteinba08b0e2017-11-30 17:45:58 +0100533 if(CMAKE_VERSION VERSION_LESS 3.0)
534 install(
535 TARGETS flatbuffers EXPORT FlatbuffersTargets
536 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
537 )
538 else()
539 install(
540 TARGETS flatbuffers EXPORT FlatbuffersTargets
541 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
542 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
543 )
544 endif()
red19397e803c42017-11-16 21:51:25 +0100545
546 install(EXPORT FlatbuffersTargets
547 FILE FlatbuffersTargets.cmake
548 NAMESPACE flatbuffers::
549 DESTINATION ${FB_CMAKE_DIR}
550 )
Martell Malone79d3cb62015-07-22 13:18:59 +0100551 endif()
red19397e803c42017-11-16 21:51:25 +0100552
Leander Bessa Beernaert3ec8d7f2015-01-02 13:51:31 +0100553 if(FLATBUFFERS_BUILD_FLATC)
red19397e803c42017-11-16 21:51:25 +0100554 install(
555 TARGETS flatc EXPORT FlatcTargets
556 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
red19397e803c42017-11-16 21:51:25 +0100557 )
558
559 install(
560 EXPORT FlatcTargets
561 FILE FlatcTargets.cmake
562 NAMESPACE flatbuffers::
563 DESTINATION ${FB_CMAKE_DIR}
red19397e803c42017-11-16 21:51:25 +0100564 )
Leander Bessa Beernaert3ec8d7f2015-01-02 13:51:31 +0100565 endif()
red19397e803c42017-11-16 21:51:25 +0100566
changneta15659e2016-09-07 01:12:04 +0800567 if(FLATBUFFERS_BUILD_SHAREDLIB)
Bastien Brunnensteinba08b0e2017-11-30 17:45:58 +0100568 if(CMAKE_VERSION VERSION_LESS 3.0)
569 install(
570 TARGETS flatbuffers_shared EXPORT FlatbuffersSharedTargets
571 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
572 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
573 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
574 )
575 else()
576 install(
577 TARGETS flatbuffers_shared EXPORT FlatbuffersSharedTargets
578 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
579 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
580 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
581 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
582 )
583 endif()
red19397e803c42017-11-16 21:51:25 +0100584
585 install(
586 EXPORT FlatbuffersSharedTargets
587 FILE FlatbuffersSharedTargets.cmake
588 NAMESPACE flatbuffers::
589 DESTINATION ${FB_CMAKE_DIR}
590 )
changneta15659e2016-09-07 01:12:04 +0800591 endif()
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800592endif()
Daniel Nachbaur7a99b3c2014-07-15 15:09:36 +0200593
Stewart Miles3f851832014-09-10 16:01:13 -0700594if(FLATBUFFERS_BUILD_TESTS)
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800595 enable_testing()
596
Zbigniew Mandziejewicz3f8700b2014-09-16 00:50:23 +0800597 add_test(NAME flattests COMMAND flattests)
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700598 if(FLATBUFFERS_BUILD_CPP17)
599 add_test(NAME flattests_cpp17 COMMAND flattests_cpp17)
600 endif()
Sumant Tambee7578542018-08-30 16:43:22 -0700601 if(FLATBUFFERS_BUILD_GRPCTEST)
602 add_test(NAME grpctest COMMAND grpctest)
603 endif()
Stewart Miles3f851832014-09-10 16:01:13 -0700604endif()
Johan Euphrosine331d2d82015-11-17 13:39:37 -0800605
Haibo Huangb9f6b1a2020-03-16 15:41:29 -0700606# This target is sync-barrier.
607# Other generate-dependent targets can depend on 'generated_code' only.
608get_generated_output(fbs_generated)
609if(fbs_generated)
610 # message(STATUS "Add generated_code target with files:${fbs_generated}")
611 add_custom_target(generated_code
612 DEPENDS ${fbs_generated}
613 COMMENT "All generated files were updated.")
614endif()
615
Johan Euphrosine331d2d82015-11-17 13:39:37 -0800616include(CMake/BuildFlatBuffers.cmake)
Vitaly Isaev928effd2015-05-13 15:15:59 +0300617
Marc Butler4567b132019-02-22 06:06:04 +1100618if(UNIX)
619 # Use of CPack only supported on Linux systems.
620 if(FLATBUFFERS_PACKAGE_DEBIAN)
621 include(CMake/PackageDebian.cmake)
622 endif()
623 if (FLATBUFFERS_PACKAGE_REDHAT)
624 include(CMake/PackageRedhat.cmake)
625 endif()
626 include(CPack)
Vitaly Isaev928effd2015-05-13 15:15:59 +0300627endif()