xref: /aosp_15_r20/external/flatbuffers/CMakeLists.txt (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Worker# This is the legacy minimum version flatbuffers supported for a while.
2*890232f2SAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12...3.22.1)
3*890232f2SAndroid Build Coastguard Worker
4*890232f2SAndroid Build Coastguard Worker# CMake version 3.16 is the 'de-facto' minimum version for flatbuffers. If the
5*890232f2SAndroid Build Coastguard Worker# current cmake is older than this, warn the user and include the legacy file to
6*890232f2SAndroid Build Coastguard Worker# provide some level of support.
7*890232f2SAndroid Build Coastguard Workerif(CMAKE_VERSION VERSION_LESS 3.16)
8*890232f2SAndroid Build Coastguard Worker  message(WARNING "Using cmake version ${CMAKE_VERSION} which is older than "
9*890232f2SAndroid Build Coastguard Worker  "our target version of 3.16. This will use the legacy CMakeLists.txt that "
10*890232f2SAndroid Build Coastguard Worker  "supports version 2.8.12 and higher, but not actively maintained. Consider "
11*890232f2SAndroid Build Coastguard Worker  "upgrading cmake to a newer version, as this may become a fatal error in the "
12*890232f2SAndroid Build Coastguard Worker  "future.")
13*890232f2SAndroid Build Coastguard Worker  # Use the legacy version of CMakeLists.txt
14*890232f2SAndroid Build Coastguard Worker  include(CMake/CMakeLists_legacy.cmake.in)
15*890232f2SAndroid Build Coastguard Worker  return()
16*890232f2SAndroid Build Coastguard Workerendif()
17*890232f2SAndroid Build Coastguard Worker
18*890232f2SAndroid Build Coastguard Worker# Attempt to read the current version of flatbuffers by looking at the latest tag.
19*890232f2SAndroid Build Coastguard Workerinclude(CMake/Version.cmake)
20*890232f2SAndroid Build Coastguard Worker
21*890232f2SAndroid Build Coastguard Workerif (POLICY CMP0048)
22*890232f2SAndroid Build Coastguard Worker  cmake_policy(SET CMP0048 NEW)
23*890232f2SAndroid Build Coastguard Worker  project(FlatBuffers
24*890232f2SAndroid Build Coastguard Worker        DESCRIPTION "Flatbuffers serialization library"
25*890232f2SAndroid Build Coastguard Worker        VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
26*890232f2SAndroid Build Coastguard Worker        LANGUAGES CXX)
27*890232f2SAndroid Build Coastguard Workerelse()
28*890232f2SAndroid Build Coastguard Worker  project(FlatBuffers)
29*890232f2SAndroid Build Coastguard Workerendif (POLICY CMP0048)
30*890232f2SAndroid Build Coastguard Worker
31*890232f2SAndroid Build Coastguard Worker# generate compile_commands.json
32*890232f2SAndroid Build Coastguard Workerset(CMAKE_EXPORT_COMPILE_COMMANDS ON)
33*890232f2SAndroid Build Coastguard Worker
34*890232f2SAndroid Build Coastguard Worker# NOTE: Code coverage only works on Linux & OSX.
35*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_CODE_COVERAGE "Enable the code coverage build option." OFF)
36*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
37*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
38*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library"
39*890232f2SAndroid Build Coastguard Worker       ON)
40*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
41*890232f2SAndroid Build Coastguard Worker       ON)
42*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_STATIC_FLATC "Build flatbuffers compiler with -static flag"
43*890232f2SAndroid Build Coastguard Worker       OFF)
44*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
45*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_BENCHMARKS "Enable the build of flatbenchmark."
46*890232f2SAndroid Build Coastguard Worker       OFF)
47*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_GRPCTEST "Enable the build of grpctest" OFF)
48*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_SHAREDLIB
49*890232f2SAndroid Build Coastguard Worker       "Enable the build of the flatbuffers shared library"
50*890232f2SAndroid Build Coastguard Worker       OFF)
51*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_LIBCXX_WITH_CLANG "Force libc++ when using Clang" ON)
52*890232f2SAndroid Build Coastguard Worker# NOTE: Sanitizer check only works on Linux & OSX (gcc & llvm).
53*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_CODE_SANITIZE
54*890232f2SAndroid Build Coastguard Worker      "Add '-fsanitize' flags to 'flattests' and 'flatc' targets."
55*890232f2SAndroid Build Coastguard Worker      OFF)
56*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_PACKAGE_REDHAT
57*890232f2SAndroid Build Coastguard Worker       "Build an rpm using the 'package' target."
58*890232f2SAndroid Build Coastguard Worker       OFF)
59*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_PACKAGE_DEBIAN
60*890232f2SAndroid Build Coastguard Worker       "Build an deb using the 'package' target."
61*890232f2SAndroid Build Coastguard Worker       OFF)
62*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_CPP17
63*890232f2SAndroid Build Coastguard Worker       "Enable the build of c++17 test target. \"
64*890232f2SAndroid Build Coastguard Worker       Requirements: Clang6, GCC7, MSVC2017 (_MSC_VER >= 1914)  or higher."
65*890232f2SAndroid Build Coastguard Worker       OFF)
66*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_BUILD_LEGACY
67*890232f2SAndroid Build Coastguard Worker       "Run C++ code generator with '--cpp-std c++0x' switch."
68*890232f2SAndroid Build Coastguard Worker       OFF)
69*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_ENABLE_PCH
70*890232f2SAndroid Build Coastguard Worker       "Enable precompile headers support for 'flatbuffers' and 'flatc'. \"
71*890232f2SAndroid Build Coastguard Worker        Only work if CMake supports 'target_precompile_headers'. \"
72*890232f2SAndroid Build Coastguard Worker        This can speed up compilation time."
73*890232f2SAndroid Build Coastguard Worker       OFF)
74*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_SKIP_MONSTER_EXTRA
75*890232f2SAndroid Build Coastguard Worker      "Skip generating monster_extra.fbs that contains non-supported numerical\"
76*890232f2SAndroid Build Coastguard Worker      types." OFF)
77*890232f2SAndroid Build Coastguard Workeroption(FLATBUFFERS_STRICT_MODE
78*890232f2SAndroid Build Coastguard Worker      "Build flatbuffers with all warnings as errors (-Werror or /WX)."
79*890232f2SAndroid Build Coastguard Worker      OFF)
80*890232f2SAndroid Build Coastguard Worker
81*890232f2SAndroid Build Coastguard Workerset(MSVC_LIKE OFF)
82*890232f2SAndroid Build Coastguard Workerif(MSVC OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
83*890232f2SAndroid Build Coastguard Worker    set(MSVC_LIKE ON)
84*890232f2SAndroid Build Coastguard Workerendif()
85*890232f2SAndroid Build Coastguard Worker
86*890232f2SAndroid Build Coastguard Workerif(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
87*890232f2SAndroid Build Coastguard Worker    message(WARNING
88*890232f2SAndroid Build Coastguard Worker    "Cannot build tests without building the compiler. Tests will be disabled.")
89*890232f2SAndroid Build Coastguard Worker    set(FLATBUFFERS_BUILD_TESTS OFF)
90*890232f2SAndroid Build Coastguard Workerendif()
91*890232f2SAndroid Build Coastguard Worker
92*890232f2SAndroid Build Coastguard Workerif(DEFINED FLATBUFFERS_MAX_PARSING_DEPTH)
93*890232f2SAndroid Build Coastguard Worker  # Override the default recursion depth limit.
94*890232f2SAndroid Build Coastguard Worker  add_definitions(-DFLATBUFFERS_MAX_PARSING_DEPTH=${FLATBUFFERS_MAX_PARSING_DEPTH})
95*890232f2SAndroid Build Coastguard Worker  message(STATUS "FLATBUFFERS_MAX_PARSING_DEPTH: ${FLATBUFFERS_MAX_PARSING_DEPTH}")
96*890232f2SAndroid Build Coastguard Workerendif()
97*890232f2SAndroid Build Coastguard Worker
98*890232f2SAndroid Build Coastguard Worker# Auto-detect locale-narrow 'strtod_l' and  'strtoull_l' functions.
99*890232f2SAndroid Build Coastguard Workerif(NOT DEFINED FLATBUFFERS_LOCALE_INDEPENDENT)
100*890232f2SAndroid Build Coastguard Worker  include(CheckCXXSymbolExists)
101*890232f2SAndroid Build Coastguard Worker
102*890232f2SAndroid Build Coastguard Worker  set(FLATBUFFERS_LOCALE_INDEPENDENT 0)
103*890232f2SAndroid Build Coastguard Worker  if(MSVC_LIKE)
104*890232f2SAndroid Build Coastguard Worker    check_cxx_symbol_exists(_strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
105*890232f2SAndroid Build Coastguard Worker    check_cxx_symbol_exists(_strtoui64_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
106*890232f2SAndroid Build Coastguard Worker  else()
107*890232f2SAndroid Build Coastguard Worker    check_cxx_symbol_exists(strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
108*890232f2SAndroid Build Coastguard Worker    check_cxx_symbol_exists(strtoull_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
109*890232f2SAndroid Build Coastguard Worker  endif()
110*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_HAS_STRTOF_L AND FLATBUFFERS_HAS_STRTOULL_L)
111*890232f2SAndroid Build Coastguard Worker    set(FLATBUFFERS_LOCALE_INDEPENDENT 1)
112*890232f2SAndroid Build Coastguard Worker  endif()
113*890232f2SAndroid Build Coastguard Workerendif()
114*890232f2SAndroid Build Coastguard Workeradd_definitions(-DFLATBUFFERS_LOCALE_INDEPENDENT=$<BOOL:${FLATBUFFERS_LOCALE_INDEPENDENT}>)
115*890232f2SAndroid Build Coastguard Worker
116*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Library_SRCS
117*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/allocator.h
118*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/array.h
119*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/base.h
120*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/bfbs_generator.h
121*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/buffer.h
122*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/buffer_ref.h
123*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/default_allocator.h
124*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/detached_buffer.h
125*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flatbuffer_builder.h
126*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flatbuffers.h
127*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flexbuffers.h
128*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flex_flat_util.h
129*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/hash.h
130*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/idl.h
131*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/minireflect.h
132*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/reflection.h
133*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/reflection_generated.h
134*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/registry.h
135*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/stl_emulation.h
136*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/string.h
137*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/struct.h
138*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/table.h
139*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/util.h
140*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/vector.h
141*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/vector_downward.h
142*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/verifier.h
143*890232f2SAndroid Build Coastguard Worker  src/idl_parser.cpp
144*890232f2SAndroid Build Coastguard Worker  src/idl_gen_text.cpp
145*890232f2SAndroid Build Coastguard Worker  src/reflection.cpp
146*890232f2SAndroid Build Coastguard Worker  src/util.cpp
147*890232f2SAndroid Build Coastguard Worker)
148*890232f2SAndroid Build Coastguard Worker
149*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Compiler_SRCS
150*890232f2SAndroid Build Coastguard Worker  ${FlatBuffers_Library_SRCS}
151*890232f2SAndroid Build Coastguard Worker  src/idl_gen_cpp.cpp
152*890232f2SAndroid Build Coastguard Worker  src/idl_gen_csharp.cpp
153*890232f2SAndroid Build Coastguard Worker  src/idl_gen_dart.cpp
154*890232f2SAndroid Build Coastguard Worker  src/idl_gen_kotlin.cpp
155*890232f2SAndroid Build Coastguard Worker  src/idl_gen_go.cpp
156*890232f2SAndroid Build Coastguard Worker  src/idl_gen_java.cpp
157*890232f2SAndroid Build Coastguard Worker  src/idl_gen_ts.cpp
158*890232f2SAndroid Build Coastguard Worker  src/idl_gen_php.cpp
159*890232f2SAndroid Build Coastguard Worker  src/idl_gen_python.cpp
160*890232f2SAndroid Build Coastguard Worker  src/idl_gen_lobster.cpp
161*890232f2SAndroid Build Coastguard Worker  src/idl_gen_lua.cpp
162*890232f2SAndroid Build Coastguard Worker  src/idl_gen_rust.cpp
163*890232f2SAndroid Build Coastguard Worker  src/idl_gen_fbs.cpp
164*890232f2SAndroid Build Coastguard Worker  src/idl_gen_grpc.cpp
165*890232f2SAndroid Build Coastguard Worker  src/idl_gen_json_schema.cpp
166*890232f2SAndroid Build Coastguard Worker  src/idl_gen_swift.cpp
167*890232f2SAndroid Build Coastguard Worker  src/idl_namer.h
168*890232f2SAndroid Build Coastguard Worker  src/namer.h
169*890232f2SAndroid Build Coastguard Worker  src/flatc.cpp
170*890232f2SAndroid Build Coastguard Worker  src/flatc_main.cpp
171*890232f2SAndroid Build Coastguard Worker  src/bfbs_gen.h
172*890232f2SAndroid Build Coastguard Worker  src/bfbs_gen_lua.h
173*890232f2SAndroid Build Coastguard Worker  src/bfbs_namer.h
174*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/code_generators.h
175*890232f2SAndroid Build Coastguard Worker  src/binary_annotator.h
176*890232f2SAndroid Build Coastguard Worker  src/binary_annotator.cpp
177*890232f2SAndroid Build Coastguard Worker  src/annotated_binary_text_gen.h
178*890232f2SAndroid Build Coastguard Worker  src/annotated_binary_text_gen.cpp
179*890232f2SAndroid Build Coastguard Worker  src/bfbs_gen_lua.cpp
180*890232f2SAndroid Build Coastguard Worker  src/code_generators.cpp
181*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/schema_interface.h
182*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/cpp_generator.h
183*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/cpp_generator.cc
184*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/go_generator.h
185*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/go_generator.cc
186*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/java_generator.h
187*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/java_generator.cc
188*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/python_generator.h
189*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/python_generator.cc
190*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/swift_generator.h
191*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/swift_generator.cc
192*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/ts_generator.h
193*890232f2SAndroid Build Coastguard Worker  grpc/src/compiler/ts_generator.cc
194*890232f2SAndroid Build Coastguard Worker)
195*890232f2SAndroid Build Coastguard Worker
196*890232f2SAndroid Build Coastguard Workerset(FlatHash_SRCS
197*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/hash.h
198*890232f2SAndroid Build Coastguard Worker  src/flathash.cpp
199*890232f2SAndroid Build Coastguard Worker)
200*890232f2SAndroid Build Coastguard Worker
201*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Tests_SRCS
202*890232f2SAndroid Build Coastguard Worker  ${FlatBuffers_Library_SRCS}
203*890232f2SAndroid Build Coastguard Worker  src/idl_gen_fbs.cpp
204*890232f2SAndroid Build Coastguard Worker  tests/test.cpp
205*890232f2SAndroid Build Coastguard Worker  tests/test_assert.h
206*890232f2SAndroid Build Coastguard Worker  tests/test_assert.cpp
207*890232f2SAndroid Build Coastguard Worker  tests/test_builder.h
208*890232f2SAndroid Build Coastguard Worker  tests/test_builder.cpp
209*890232f2SAndroid Build Coastguard Worker  tests/native_type_test_impl.h
210*890232f2SAndroid Build Coastguard Worker  tests/native_type_test_impl.cpp
211*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/code_generators.h
212*890232f2SAndroid Build Coastguard Worker  src/code_generators.cpp
213*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/monster_test.fbs
214*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
215*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on namespace_test/namespace_test1.fbs
216*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/namespace_test/namespace_test1_generated.h
217*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/namespace_test/namespace_test2_generated.h
218*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on union_vector/union_vector.fbs
219*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/union_vector/union_vector_generated.h
220*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/arrays_test.fbs
221*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/arrays_test_generated.h
222*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/native_type_test.fbs
223*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/native_type_test_generated.h
224*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/monster_extra.fbs
225*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_extra_generated.h
226*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/monster_test.fbs
227*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_bfbs_generated.h
228*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/optional_scalars.fbs
229*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/optional_scalars_generated.h
230*890232f2SAndroid Build Coastguard Worker)
231*890232f2SAndroid Build Coastguard Worker
232*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Tests_CPP17_SRCS
233*890232f2SAndroid Build Coastguard Worker  ${FlatBuffers_Library_SRCS}
234*890232f2SAndroid Build Coastguard Worker  tests/test_assert.h
235*890232f2SAndroid Build Coastguard Worker  tests/test_assert.cpp
236*890232f2SAndroid Build Coastguard Worker  tests/cpp17/test_cpp17.cpp
237*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/monster_test.fbs
238*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/cpp17/generated_cpp17/monster_test_generated.h
239*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
240*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/cpp17/generated_cpp17/optional_scalars_generated.h
241*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/optional_scalars_generated.h
242*890232f2SAndroid Build Coastguard Worker)
243*890232f2SAndroid Build Coastguard Worker
244*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Sample_Binary_SRCS
245*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flatbuffers.h
246*890232f2SAndroid Build Coastguard Worker  samples/sample_binary.cpp
247*890232f2SAndroid Build Coastguard Worker  # file generated by running compiler on samples/monster.fbs
248*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
249*890232f2SAndroid Build Coastguard Worker)
250*890232f2SAndroid Build Coastguard Worker
251*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Sample_Text_SRCS
252*890232f2SAndroid Build Coastguard Worker  ${FlatBuffers_Library_SRCS}
253*890232f2SAndroid Build Coastguard Worker  samples/sample_text.cpp
254*890232f2SAndroid Build Coastguard Worker  # file generated by running compiler on samples/monster.fbs
255*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
256*890232f2SAndroid Build Coastguard Worker)
257*890232f2SAndroid Build Coastguard Worker
258*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_Sample_BFBS_SRCS
259*890232f2SAndroid Build Coastguard Worker  ${FlatBuffers_Library_SRCS}
260*890232f2SAndroid Build Coastguard Worker  samples/sample_bfbs.cpp
261*890232f2SAndroid Build Coastguard Worker  # file generated by running compiler on samples/monster.fbs
262*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
263*890232f2SAndroid Build Coastguard Worker)
264*890232f2SAndroid Build Coastguard Worker
265*890232f2SAndroid Build Coastguard Workerset(FlatBuffers_GRPCTest_SRCS
266*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/flatbuffers.h
267*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/grpc.h
268*890232f2SAndroid Build Coastguard Worker  include/flatbuffers/util.h
269*890232f2SAndroid Build Coastguard Worker  src/util.cpp
270*890232f2SAndroid Build Coastguard Worker  tests/monster_test.grpc.fb.h
271*890232f2SAndroid Build Coastguard Worker  tests/test_assert.h
272*890232f2SAndroid Build Coastguard Worker  tests/test_builder.h
273*890232f2SAndroid Build Coastguard Worker  tests/monster_test.grpc.fb.cc
274*890232f2SAndroid Build Coastguard Worker  tests/test_assert.cpp
275*890232f2SAndroid Build Coastguard Worker  tests/test_builder.cpp
276*890232f2SAndroid Build Coastguard Worker  grpc/tests/grpctest.cpp
277*890232f2SAndroid Build Coastguard Worker  grpc/tests/message_builder_test.cpp
278*890232f2SAndroid Build Coastguard Worker  # file generate by running compiler on tests/monster_test.fbs
279*890232f2SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
280*890232f2SAndroid Build Coastguard Worker)
281*890232f2SAndroid Build Coastguard Worker
282*890232f2SAndroid Build Coastguard Worker# TODO(dbaileychess): Figure out how this would now work. I posted a question on
283*890232f2SAndroid Build Coastguard Worker# https://stackoverflow.com/questions/71772330/override-target-compile-options-via-cmake-command-line.
284*890232f2SAndroid Build Coastguard Worker# Append FLATBUFFERS_CXX_FLAGS to CMAKE_CXX_FLAGS.
285*890232f2SAndroid Build Coastguard Workerif(DEFINED FLATBUFFERS_CXX_FLAGS AND NOT EXISTS "${CMAKE_TOOLCHAIN_FILE}")
286*890232f2SAndroid Build Coastguard Worker  message(STATUS "extend CXX_FLAGS with ${FLATBUFFERS_CXX_FLAGS}")
287*890232f2SAndroid Build Coastguard Worker  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLATBUFFERS_CXX_FLAGS}")
288*890232f2SAndroid Build Coastguard Workerendif()
289*890232f2SAndroid Build Coastguard Workermessage(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
290*890232f2SAndroid Build Coastguard Worker
291*890232f2SAndroid Build Coastguard Workerfunction(add_fsanitize_to_target _target _sanitizer)
292*890232f2SAndroid Build Coastguard Worker  if(WIN32)
293*890232f2SAndroid Build Coastguard Worker    target_compile_definitions(${_target} PRIVATE FLATBUFFERS_MEMORY_LEAK_TRACKING)
294*890232f2SAndroid Build Coastguard Worker    message(STATUS "Sanitizer MSVC::_CrtDumpMemoryLeaks added to ${_target}")
295*890232f2SAndroid Build Coastguard Worker  else()
296*890232f2SAndroid Build Coastguard Worker    # FLATBUFFERS_CODE_SANITIZE: boolean {ON,OFF,YES,NO} or string with list of sanitizer.
297*890232f2SAndroid Build Coastguard Worker    # List of sanitizer is string starts with '=': "=address,undefined,thread,memory".
298*890232f2SAndroid Build Coastguard Worker    if((${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") OR
299*890232f2SAndroid Build Coastguard Worker      ((${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9"))
300*890232f2SAndroid Build Coastguard Worker    )
301*890232f2SAndroid Build Coastguard Worker      set(_sanitizer_flags "=address,undefined")
302*890232f2SAndroid Build Coastguard Worker      if(_sanitizer MATCHES "=.*")
303*890232f2SAndroid Build Coastguard Worker        # override default by user-defined sanitizer list
304*890232f2SAndroid Build Coastguard Worker        set(_sanitizer_flags ${_sanitizer})
305*890232f2SAndroid Build Coastguard Worker      endif()
306*890232f2SAndroid Build Coastguard Worker      target_compile_options(${_target} PRIVATE
307*890232f2SAndroid Build Coastguard Worker        -g -fsigned-char -fno-omit-frame-pointer
308*890232f2SAndroid Build Coastguard Worker        "-fsanitize${_sanitizer_flags}")
309*890232f2SAndroid Build Coastguard Worker      target_link_libraries(${_target} PRIVATE
310*890232f2SAndroid Build Coastguard Worker        "-fsanitize${_sanitizer_flags}")
311*890232f2SAndroid Build Coastguard Worker      set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ON)
312*890232f2SAndroid Build Coastguard Worker      message(STATUS "Sanitizer ${_sanitizer_flags} added to ${_target}")
313*890232f2SAndroid Build Coastguard Worker    endif()
314*890232f2SAndroid Build Coastguard Worker  endif()
315*890232f2SAndroid Build Coastguard Workerendfunction()
316*890232f2SAndroid Build Coastguard Worker
317*890232f2SAndroid Build Coastguard Workerfunction(add_pch_to_target _target _pch_header)
318*890232f2SAndroid Build Coastguard Worker  if(COMMAND target_precompile_headers)
319*890232f2SAndroid Build Coastguard Worker    target_precompile_headers(${_target} PRIVATE ${_pch_header})
320*890232f2SAndroid Build Coastguard Worker    if(NOT MSVC)
321*890232f2SAndroid Build Coastguard Worker      set_source_files_properties(src/util.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
322*890232f2SAndroid Build Coastguard Worker    endif()
323*890232f2SAndroid Build Coastguard Worker  endif()
324*890232f2SAndroid Build Coastguard Workerendfunction()
325*890232f2SAndroid Build Coastguard Worker
326*890232f2SAndroid Build Coastguard Workerinclude_directories(include)
327*890232f2SAndroid Build Coastguard Workerinclude_directories(grpc)
328*890232f2SAndroid Build Coastguard Worker
329*890232f2SAndroid Build Coastguard Worker# Creates an interface library that stores the configuration settings that each
330*890232f2SAndroid Build Coastguard Worker# target links too. This is a compromise between setting configuration globally
331*890232f2SAndroid Build Coastguard Worker# with add_compile_options() and the more targetted target_compile_options().
332*890232f2SAndroid Build Coastguard Worker# This way each target in this file can share settings and override them if
333*890232f2SAndroid Build Coastguard Worker# needed.
334*890232f2SAndroid Build Coastguard Workeradd_library(ProjectConfig INTERFACE)
335*890232f2SAndroid Build Coastguard Workertarget_compile_features(ProjectConfig
336*890232f2SAndroid Build Coastguard Worker  INTERFACE
337*890232f2SAndroid Build Coastguard Worker    cxx_std_11
338*890232f2SAndroid Build Coastguard Worker)
339*890232f2SAndroid Build Coastguard Worker
340*890232f2SAndroid Build Coastguard Worker# Force the standard to be met.
341*890232f2SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD_REQUIRED ON)
342*890232f2SAndroid Build Coastguard Worker
343*890232f2SAndroid Build Coastguard Worker# We shouldn't rely on any compiler-extensions to make things work.
344*890232f2SAndroid Build Coastguard Workerset(CMAKE_CXX_EXTENSIONS OFF)
345*890232f2SAndroid Build Coastguard Worker
346*890232f2SAndroid Build Coastguard Workerif(MSVC_LIKE)
347*890232f2SAndroid Build Coastguard Worker  target_compile_options(ProjectConfig
348*890232f2SAndroid Build Coastguard Worker    INTERFACE
349*890232f2SAndroid Build Coastguard Worker      /W4
350*890232f2SAndroid Build Coastguard Worker      $<$<BOOL:${FLATBUFFERS_STRICT_MODE}>:
351*890232f2SAndroid Build Coastguard Worker        /WX       # Treat all compiler warnings as errors
352*890232f2SAndroid Build Coastguard Worker      >
353*890232f2SAndroid Build Coastguard Worker      /wd4512   # C4512: assignment operator could not be generated
354*890232f2SAndroid Build Coastguard Worker      /wd4316   # C4316: object allocated on the heap may not be aligned
355*890232f2SAndroid Build Coastguard Worker      /wd4456   # C4456: hides previous local declaration
356*890232f2SAndroid Build Coastguard Worker      $<$<CXX_COMPILER_ID:Clang>:
357*890232f2SAndroid Build Coastguard Worker        /D_CRT_SECURE_NO_WARNINGS
358*890232f2SAndroid Build Coastguard Worker      >
359*890232f2SAndroid Build Coastguard Worker  )
360*890232f2SAndroid Build Coastguard Workerelse()
361*890232f2SAndroid Build Coastguard Worker  target_compile_options(ProjectConfig
362*890232f2SAndroid Build Coastguard Worker    INTERFACE
363*890232f2SAndroid Build Coastguard Worker      -Wall
364*890232f2SAndroid Build Coastguard Worker      -Wno-unknown-warning-option
365*890232f2SAndroid Build Coastguard Worker      $<$<BOOL:${FLATBUFFERS_STRICT_MODE}>:
366*890232f2SAndroid Build Coastguard Worker        -Werror   # Treat all compiler warnings as errors
367*890232f2SAndroid Build Coastguard Worker
368*890232f2SAndroid Build Coastguard Worker        # False positive string overflow
369*890232f2SAndroid Build Coastguard Worker        # https://github.com/google/flatbuffers/issues/7366
370*890232f2SAndroid Build Coastguard Worker        -Wno-error=stringop-overflow
371*890232f2SAndroid Build Coastguard Worker      >
372*890232f2SAndroid Build Coastguard Worker      -pedantic
373*890232f2SAndroid Build Coastguard Worker      -Wextra
374*890232f2SAndroid Build Coastguard Worker      -Wno-unused-parameter
375*890232f2SAndroid Build Coastguard Worker      -Wold-style-cast
376*890232f2SAndroid Build Coastguard Worker      -Wimplicit-fallthrough
377*890232f2SAndroid Build Coastguard Worker      -fsigned-char
378*890232f2SAndroid Build Coastguard Worker      -Wnon-virtual-dtor
379*890232f2SAndroid Build Coastguard Worker
380*890232f2SAndroid Build Coastguard Worker      $<$<CXX_COMPILER_ID:CLANG>:
381*890232f2SAndroid Build Coastguard Worker        -Wmissing-declarations
382*890232f2SAndroid Build Coastguard Worker        -Wzero-as-null-pointer-constant
383*890232f2SAndroid Build Coastguard Worker        $<$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,3.8>:
384*890232f2SAndroid Build Coastguard Worker          -Wimplicit-fallthrough
385*890232f2SAndroid Build Coastguard Worker          -Wextra-semi
386*890232f2SAndroid Build Coastguard Worker          $<$<BOOL:${FLATBUFFERS_STRICT_MODE}>:
387*890232f2SAndroid Build Coastguard Worker            -Werror=unused-private-field
388*890232f2SAndroid Build Coastguard Worker          >
389*890232f2SAndroid Build Coastguard Worker        >
390*890232f2SAndroid Build Coastguard Worker      >
391*890232f2SAndroid Build Coastguard Worker
392*890232f2SAndroid Build Coastguard Worker      $<$<CXX_COMPILER_ID:GNU>:
393*890232f2SAndroid Build Coastguard Worker        $<$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,4.4>:
394*890232f2SAndroid Build Coastguard Worker          -Wunused-result
395*890232f2SAndroid Build Coastguard Worker          -Wunused-parameter
396*890232f2SAndroid Build Coastguard Worker          -Werror=unused-parameter
397*890232f2SAndroid Build Coastguard Worker          -Wmissing-declarations
398*890232f2SAndroid Build Coastguard Worker        >
399*890232f2SAndroid Build Coastguard Worker        $<$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,4.7>:
400*890232f2SAndroid Build Coastguard Worker          -Wzero-as-null-pointer-constant
401*890232f2SAndroid Build Coastguard Worker        >
402*890232f2SAndroid Build Coastguard Worker        $<$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,7.0>:
403*890232f2SAndroid Build Coastguard Worker          -faligned-new
404*890232f2SAndroid Build Coastguard Worker          $<$<BOOL:${FLATBUFFERS_STRICT_MODE}>:
405*890232f2SAndroid Build Coastguard Worker            -Werror=implicit-fallthrough=2
406*890232f2SAndroid Build Coastguard Worker          >
407*890232f2SAndroid Build Coastguard Worker        >
408*890232f2SAndroid Build Coastguard Worker        $<$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,8.0>:
409*890232f2SAndroid Build Coastguard Worker          -Wextra-semi
410*890232f2SAndroid Build Coastguard Worker        >
411*890232f2SAndroid Build Coastguard Worker      >
412*890232f2SAndroid Build Coastguard Worker
413*890232f2SAndroid Build Coastguard Worker      $<$<BOOL:${FLATBUFFERS_CODE_COVERAGE}>:
414*890232f2SAndroid Build Coastguard Worker        -g
415*890232f2SAndroid Build Coastguard Worker        -fprofile-arcs
416*890232f2SAndroid Build Coastguard Worker        -ftest-coverage
417*890232f2SAndroid Build Coastguard Worker      >
418*890232f2SAndroid Build Coastguard Worker    )
419*890232f2SAndroid Build Coastguard Worker
420*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_CODE_COVERAGE)
421*890232f2SAndroid Build Coastguard Worker    target_link_options(ProjectConfig
422*890232f2SAndroid Build Coastguard Worker      INTERFACE
423*890232f2SAndroid Build Coastguard Worker        -fprofile-arcs
424*890232f2SAndroid Build Coastguard Worker        -ftest-coverage
425*890232f2SAndroid Build Coastguard Worker    )
426*890232f2SAndroid Build Coastguard Worker  endif()
427*890232f2SAndroid Build Coastguard Workerendif()
428*890232f2SAndroid Build Coastguard Worker
429*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_FLATLIB)
430*890232f2SAndroid Build Coastguard Worker  add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
431*890232f2SAndroid Build Coastguard Worker
432*890232f2SAndroid Build Coastguard Worker  # Attach header directory for when build via add_subdirectory().
433*890232f2SAndroid Build Coastguard Worker  target_include_directories(flatbuffers
434*890232f2SAndroid Build Coastguard Worker    INTERFACE
435*890232f2SAndroid Build Coastguard Worker      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
436*890232f2SAndroid Build Coastguard Worker  )
437*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatbuffers PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
438*890232f2SAndroid Build Coastguard Worker
439*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_ENABLE_PCH)
440*890232f2SAndroid Build Coastguard Worker    add_pch_to_target(flatbuffers include/flatbuffers/pch/pch.h)
441*890232f2SAndroid Build Coastguard Worker  endif()
442*890232f2SAndroid Build Coastguard Workerendif()
443*890232f2SAndroid Build Coastguard Worker
444*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_FLATC)
445*890232f2SAndroid Build Coastguard Worker  add_executable(flatc ${FlatBuffers_Compiler_SRCS})
446*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_ENABLE_PCH)
447*890232f2SAndroid Build Coastguard Worker    add_pch_to_target(flatc include/flatbuffers/pch/flatc_pch.h)
448*890232f2SAndroid Build Coastguard Worker  endif()
449*890232f2SAndroid Build Coastguard Worker
450*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatc PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
451*890232f2SAndroid Build Coastguard Worker  target_compile_options(flatc
452*890232f2SAndroid Build Coastguard Worker    PUBLIC
453*890232f2SAndroid Build Coastguard Worker      $<$<AND:$<BOOL:${MSVC_LIKE}>,$<CONFIG:Release>>:
454*890232f2SAndroid Build Coastguard Worker        /MT
455*890232f2SAndroid Build Coastguard Worker      >
456*890232f2SAndroid Build Coastguard Worker  )
457*890232f2SAndroid Build Coastguard Worker
458*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
459*890232f2SAndroid Build Coastguard Worker    add_fsanitize_to_target(flatc ${FLATBUFFERS_CODE_SANITIZE})
460*890232f2SAndroid Build Coastguard Worker  endif()
461*890232f2SAndroid Build Coastguard Worker  if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
462*890232f2SAndroid Build Coastguard Worker    set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
463*890232f2SAndroid Build Coastguard Worker  endif()
464*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_STATIC_FLATC AND NOT MSVC)
465*890232f2SAndroid Build Coastguard Worker    target_link_libraries(flatc PRIVATE -static)
466*890232f2SAndroid Build Coastguard Worker  endif()
467*890232f2SAndroid Build Coastguard Workerendif()
468*890232f2SAndroid Build Coastguard Worker
469*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_FLATHASH)
470*890232f2SAndroid Build Coastguard Worker  add_executable(flathash ${FlatHash_SRCS})
471*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flathash PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
472*890232f2SAndroid Build Coastguard Workerendif()
473*890232f2SAndroid Build Coastguard Worker
474*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_SHAREDLIB)
475*890232f2SAndroid Build Coastguard Worker  add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
476*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatbuffers_shared PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
477*890232f2SAndroid Build Coastguard Worker  # Shared object version: "major.minor.micro"
478*890232f2SAndroid Build Coastguard Worker  # - micro updated every release when there is no API/ABI changes
479*890232f2SAndroid Build Coastguard Worker  # - minor updated when there are additions in API/ABI
480*890232f2SAndroid Build Coastguard Worker  # - major (ABI number) updated when there are changes in ABI (or removals)
481*890232f2SAndroid Build Coastguard Worker  set(FlatBuffers_Library_SONAME_MAJOR ${VERSION_MAJOR})
482*890232f2SAndroid Build Coastguard Worker  set(FlatBuffers_Library_SONAME_FULL "${FlatBuffers_Library_SONAME_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
483*890232f2SAndroid Build Coastguard Worker  set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
484*890232f2SAndroid Build Coastguard Worker                        SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}"
485*890232f2SAndroid Build Coastguard Worker                        VERSION "${FlatBuffers_Library_SONAME_FULL}")
486*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_ENABLE_PCH)
487*890232f2SAndroid Build Coastguard Worker    add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h)
488*890232f2SAndroid Build Coastguard Worker  endif()
489*890232f2SAndroid Build Coastguard Workerendif()
490*890232f2SAndroid Build Coastguard Worker
491*890232f2SAndroid Build Coastguard Worker# Global list of generated files.
492*890232f2SAndroid Build Coastguard Worker# Use the global property to be independent of PARENT_SCOPE.
493*890232f2SAndroid Build Coastguard Workerset_property(GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
494*890232f2SAndroid Build Coastguard Worker
495*890232f2SAndroid Build Coastguard Workerfunction(get_generated_output generated_files)
496*890232f2SAndroid Build Coastguard Worker  get_property(tmp GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
497*890232f2SAndroid Build Coastguard Worker  set(${generated_files} ${tmp} PARENT_SCOPE)
498*890232f2SAndroid Build Coastguard Workerendfunction(get_generated_output)
499*890232f2SAndroid Build Coastguard Worker
500*890232f2SAndroid Build Coastguard Workerfunction(register_generated_output file_name)
501*890232f2SAndroid Build Coastguard Worker  get_property(tmp GLOBAL PROPERTY FBS_GENERATED_OUTPUTS)
502*890232f2SAndroid Build Coastguard Worker  list(APPEND tmp ${file_name})
503*890232f2SAndroid Build Coastguard Worker  set_property(GLOBAL PROPERTY FBS_GENERATED_OUTPUTS ${tmp})
504*890232f2SAndroid Build Coastguard Workerendfunction(register_generated_output)
505*890232f2SAndroid Build Coastguard Worker
506*890232f2SAndroid Build Coastguard Workerfunction(compile_flatbuffers_schema_to_cpp_opt SRC_FBS OPT)
507*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_LEGACY)
508*890232f2SAndroid Build Coastguard Worker    set(OPT ${OPT};--cpp-std c++0x)
509*890232f2SAndroid Build Coastguard Worker  else()
510*890232f2SAndroid Build Coastguard Worker    # --cpp-std is defined by flatc default settings.
511*890232f2SAndroid Build Coastguard Worker  endif()
512*890232f2SAndroid Build Coastguard Worker  message(STATUS "`${SRC_FBS}`: add generation of C++ code with '${OPT}'")
513*890232f2SAndroid Build Coastguard Worker  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
514*890232f2SAndroid Build Coastguard Worker  string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
515*890232f2SAndroid Build Coastguard Worker  add_custom_command(
516*890232f2SAndroid Build Coastguard Worker    OUTPUT ${GEN_HEADER}
517*890232f2SAndroid Build Coastguard Worker    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
518*890232f2SAndroid Build Coastguard Worker            --cpp --gen-mutable --gen-object-api --reflect-names
519*890232f2SAndroid Build Coastguard Worker            --cpp-ptr-type flatbuffers::unique_ptr # Used to test with C++98 STLs
520*890232f2SAndroid Build Coastguard Worker            ${OPT}
521*890232f2SAndroid Build Coastguard Worker            -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
522*890232f2SAndroid Build Coastguard Worker            -o "${SRC_FBS_DIR}"
523*890232f2SAndroid Build Coastguard Worker            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
524*890232f2SAndroid Build Coastguard Worker    DEPENDS flatc
525*890232f2SAndroid Build Coastguard Worker    COMMENT "Run generation: '${GEN_HEADER}'")
526*890232f2SAndroid Build Coastguard Worker  register_generated_output(${GEN_HEADER})
527*890232f2SAndroid Build Coastguard Workerendfunction()
528*890232f2SAndroid Build Coastguard Worker
529*890232f2SAndroid Build Coastguard Workerfunction(compile_flatbuffers_schema_to_cpp SRC_FBS)
530*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(${SRC_FBS} "--no-includes;--gen-compare")
531*890232f2SAndroid Build Coastguard Workerendfunction()
532*890232f2SAndroid Build Coastguard Worker
533*890232f2SAndroid Build Coastguard Workerfunction(compile_flatbuffers_schema_to_binary SRC_FBS)
534*890232f2SAndroid Build Coastguard Worker  message(STATUS "`${SRC_FBS}`: add generation of binary (.bfbs) schema")
535*890232f2SAndroid Build Coastguard Worker  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
536*890232f2SAndroid Build Coastguard Worker  string(REGEX REPLACE "\\.fbs$" ".bfbs" GEN_BINARY_SCHEMA ${SRC_FBS})
537*890232f2SAndroid Build Coastguard Worker  # For details about flags see generate_code.py
538*890232f2SAndroid Build Coastguard Worker  add_custom_command(
539*890232f2SAndroid Build Coastguard Worker    OUTPUT ${GEN_BINARY_SCHEMA}
540*890232f2SAndroid Build Coastguard Worker    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
541*890232f2SAndroid Build Coastguard Worker            -b --schema --bfbs-comments --bfbs-builtins
542*890232f2SAndroid Build Coastguard Worker            --bfbs-filenames ${SRC_FBS_DIR}
543*890232f2SAndroid Build Coastguard Worker            -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
544*890232f2SAndroid Build Coastguard Worker            -o "${SRC_FBS_DIR}"
545*890232f2SAndroid Build Coastguard Worker            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
546*890232f2SAndroid Build Coastguard Worker    DEPENDS flatc
547*890232f2SAndroid Build Coastguard Worker    COMMENT "Run generation: '${GEN_BINARY_SCHEMA}'")
548*890232f2SAndroid Build Coastguard Worker  register_generated_output(${GEN_BINARY_SCHEMA})
549*890232f2SAndroid Build Coastguard Workerendfunction()
550*890232f2SAndroid Build Coastguard Worker
551*890232f2SAndroid Build Coastguard Workerfunction(compile_flatbuffers_schema_to_embedded_binary SRC_FBS OPT)
552*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_LEGACY)
553*890232f2SAndroid Build Coastguard Worker    set(OPT ${OPT};--cpp-std c++0x)
554*890232f2SAndroid Build Coastguard Worker  else()
555*890232f2SAndroid Build Coastguard Worker    # --cpp-std is defined by flatc default settings.
556*890232f2SAndroid Build Coastguard Worker  endif()
557*890232f2SAndroid Build Coastguard Worker  message(STATUS "`${SRC_FBS}`: add generation of C++ embedded binary schema code with '${OPT}'")
558*890232f2SAndroid Build Coastguard Worker  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
559*890232f2SAndroid Build Coastguard Worker  string(REGEX REPLACE "\\.fbs$" "_bfbs_generated.h" GEN_BFBS_HEADER ${SRC_FBS})
560*890232f2SAndroid Build Coastguard Worker  # For details about flags see generate_code.py
561*890232f2SAndroid Build Coastguard Worker  add_custom_command(
562*890232f2SAndroid Build Coastguard Worker          OUTPUT ${GEN_BFBS_HEADER}
563*890232f2SAndroid Build Coastguard Worker          COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}"
564*890232f2SAndroid Build Coastguard Worker          --cpp --gen-mutable --gen-object-api --reflect-names
565*890232f2SAndroid Build Coastguard Worker          --cpp-ptr-type flatbuffers::unique_ptr # Used to test with C++98 STLs
566*890232f2SAndroid Build Coastguard Worker          ${OPT}
567*890232f2SAndroid Build Coastguard Worker          --bfbs-comments --bfbs-builtins --bfbs-gen-embed
568*890232f2SAndroid Build Coastguard Worker          --bfbs-filenames ${SRC_FBS_DIR}
569*890232f2SAndroid Build Coastguard Worker          -I "${CMAKE_CURRENT_SOURCE_DIR}/tests/include_test"
570*890232f2SAndroid Build Coastguard Worker          -o "${SRC_FBS_DIR}"
571*890232f2SAndroid Build Coastguard Worker          "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
572*890232f2SAndroid Build Coastguard Worker          DEPENDS flatc
573*890232f2SAndroid Build Coastguard Worker          COMMENT "Run generation: '${GEN_BFBS_HEADER}'")
574*890232f2SAndroid Build Coastguard Worker  register_generated_output(${GEN_BFBS_HEADER})
575*890232f2SAndroid Build Coastguard Workerendfunction()
576*890232f2SAndroid Build Coastguard Worker
577*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_TESTS)
578*890232f2SAndroid Build Coastguard Worker  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
579*890232f2SAndroid Build Coastguard Worker  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/samples" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
580*890232f2SAndroid Build Coastguard Worker
581*890232f2SAndroid Build Coastguard Worker  # TODO Add (monster_test.fbs monsterdata_test.json)->monsterdata_test.mon
582*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
583*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_binary(tests/monster_test.fbs)
584*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(tests/namespace_test/namespace_test1.fbs "--no-includes;--gen-compare;--gen-name-strings")
585*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(tests/namespace_test/namespace_test2.fbs "--no-includes;--gen-compare;--gen-name-strings")
586*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(tests/union_vector/union_vector.fbs "--no-includes;--gen-compare;--gen-name-strings")
587*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp(tests/optional_scalars.fbs)
588*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(tests/native_type_test.fbs "")
589*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp_opt(tests/arrays_test.fbs "--scoped-enums;--gen-compare")
590*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_binary(tests/arrays_test.fbs)
591*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_embedded_binary(tests/monster_test.fbs "--no-includes;--gen-compare")
592*890232f2SAndroid Build Coastguard Worker  if(NOT (MSVC AND (MSVC_VERSION LESS 1900)))
593*890232f2SAndroid Build Coastguard Worker    compile_flatbuffers_schema_to_cpp(tests/monster_extra.fbs) # Test floating-point NAN/INF.
594*890232f2SAndroid Build Coastguard Worker  endif()
595*890232f2SAndroid Build Coastguard Worker  include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
596*890232f2SAndroid Build Coastguard Worker  add_executable(flattests ${FlatBuffers_Tests_SRCS})
597*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flattests PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
598*890232f2SAndroid Build Coastguard Worker
599*890232f2SAndroid Build Coastguard Worker  add_dependencies(flattests generated_code)
600*890232f2SAndroid Build Coastguard Worker
601*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_CODE_SANITIZE)
602*890232f2SAndroid Build Coastguard Worker    add_fsanitize_to_target(flattests ${FLATBUFFERS_CODE_SANITIZE})
603*890232f2SAndroid Build Coastguard Worker  endif()
604*890232f2SAndroid Build Coastguard Worker
605*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
606*890232f2SAndroid Build Coastguard Worker  compile_flatbuffers_schema_to_binary(samples/monster.fbs)
607*890232f2SAndroid Build Coastguard Worker  include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
608*890232f2SAndroid Build Coastguard Worker
609*890232f2SAndroid Build Coastguard Worker  add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
610*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatsamplebinary PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
611*890232f2SAndroid Build Coastguard Worker  add_dependencies(flatsamplebinary generated_code)
612*890232f2SAndroid Build Coastguard Worker
613*890232f2SAndroid Build Coastguard Worker  add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
614*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatsampletext PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
615*890232f2SAndroid Build Coastguard Worker  add_dependencies(flatsampletext generated_code)
616*890232f2SAndroid Build Coastguard Worker
617*890232f2SAndroid Build Coastguard Worker  add_executable(flatsamplebfbs ${FlatBuffers_Sample_BFBS_SRCS})
618*890232f2SAndroid Build Coastguard Worker  target_link_libraries(flatsamplebfbs PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
619*890232f2SAndroid Build Coastguard Worker  add_dependencies(flatsamplebfbs generated_code)
620*890232f2SAndroid Build Coastguard Worker
621*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_CPP17)
622*890232f2SAndroid Build Coastguard Worker    # Don't generate header for flattests_cpp17 target.
623*890232f2SAndroid Build Coastguard Worker    # This target uses "generated_cpp17/monster_test_generated.h"
624*890232f2SAndroid Build Coastguard Worker    add_executable(flattests_cpp17 ${FlatBuffers_Tests_CPP17_SRCS})
625*890232f2SAndroid Build Coastguard Worker    add_dependencies(flattests_cpp17 generated_code)
626*890232f2SAndroid Build Coastguard Worker    target_link_libraries(flattests_cpp17 PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
627*890232f2SAndroid Build Coastguard Worker    target_compile_features(flattests_cpp17 PRIVATE cxx_std_17)
628*890232f2SAndroid Build Coastguard Worker
629*890232f2SAndroid Build Coastguard Worker    if(FLATBUFFERS_CODE_SANITIZE)
630*890232f2SAndroid Build Coastguard Worker      add_fsanitize_to_target(flattests_cpp17 ${FLATBUFFERS_CODE_SANITIZE})
631*890232f2SAndroid Build Coastguard Worker    endif()
632*890232f2SAndroid Build Coastguard Worker  endif(FLATBUFFERS_BUILD_CPP17)
633*890232f2SAndroid Build Coastguard Workerendif()
634*890232f2SAndroid Build Coastguard Worker
635*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_GRPCTEST)
636*890232f2SAndroid Build Coastguard Worker  if(NOT GRPC_INSTALL_PATH)
637*890232f2SAndroid Build Coastguard Worker    message(SEND_ERROR "GRPC_INSTALL_PATH variable is not defined. See grpc/README.md")
638*890232f2SAndroid Build Coastguard Worker  endif()
639*890232f2SAndroid Build Coastguard Worker  if(NOT PROTOBUF_DOWNLOAD_PATH)
640*890232f2SAndroid Build Coastguard Worker    message(SEND_ERROR "PROTOBUF_DOWNLOAD_PATH variable is not defined. See grpc/README.md")
641*890232f2SAndroid Build Coastguard Worker  endif()
642*890232f2SAndroid Build Coastguard Worker  INCLUDE_DIRECTORIES(${GRPC_INSTALL_PATH}/include)
643*890232f2SAndroid Build Coastguard Worker  INCLUDE_DIRECTORIES(${PROTOBUF_DOWNLOAD_PATH}/src)
644*890232f2SAndroid Build Coastguard Worker  find_package(Threads REQUIRED)
645*890232f2SAndroid Build Coastguard Worker  list(APPEND CMAKE_PREFIX_PATH ${GRPC_INSTALL_PATH})
646*890232f2SAndroid Build Coastguard Worker  find_package(absl CONFIG REQUIRED)
647*890232f2SAndroid Build Coastguard Worker  find_package(protobuf CONFIG REQUIRED)
648*890232f2SAndroid Build Coastguard Worker  find_package(gRPC CONFIG REQUIRED)
649*890232f2SAndroid Build Coastguard Worker  add_executable(grpctest ${FlatBuffers_GRPCTest_SRCS})
650*890232f2SAndroid Build Coastguard Worker  add_dependencies(grpctest generated_code)
651*890232f2SAndroid Build Coastguard Worker  target_link_libraries(grpctext
652*890232f2SAndroid Build Coastguard Worker    PRIVATE
653*890232f2SAndroid Build Coastguard Worker      $<BUILD_INTERFACE:ProjectConfig>
654*890232f2SAndroid Build Coastguard Worker      gRPC::grpc++_unsecure
655*890232f2SAndroid Build Coastguard Worker      gRPC::gpr
656*890232f2SAndroid Build Coastguard Worker      pthread
657*890232f2SAndroid Build Coastguard Worker      dl
658*890232f2SAndroid Build Coastguard Worker  )
659*890232f2SAndroid Build Coastguard Workerendif()
660*890232f2SAndroid Build Coastguard Worker
661*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_INSTALL)
662*890232f2SAndroid Build Coastguard Worker  include(GNUInstallDirs)
663*890232f2SAndroid Build Coastguard Worker
664*890232f2SAndroid Build Coastguard Worker  install(DIRECTORY include/flatbuffers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
665*890232f2SAndroid Build Coastguard Worker
666*890232f2SAndroid Build Coastguard Worker  set(FB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/flatbuffers")
667*890232f2SAndroid Build Coastguard Worker
668*890232f2SAndroid Build Coastguard Worker  configure_file(CMake/FlatBuffersConfigVersion.cmake.in FlatBuffersConfigVersion.cmake @ONLY)
669*890232f2SAndroid Build Coastguard Worker  install(
670*890232f2SAndroid Build Coastguard Worker      FILES "CMake/FlatBuffersConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/FlatBuffersConfigVersion.cmake"
671*890232f2SAndroid Build Coastguard Worker      DESTINATION ${FB_CMAKE_DIR}
672*890232f2SAndroid Build Coastguard Worker  )
673*890232f2SAndroid Build Coastguard Worker
674*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_FLATLIB)
675*890232f2SAndroid Build Coastguard Worker    install(
676*890232f2SAndroid Build Coastguard Worker      TARGETS flatbuffers EXPORT FlatBuffersTargets
677*890232f2SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
678*890232f2SAndroid Build Coastguard Worker      INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
679*890232f2SAndroid Build Coastguard Worker    )
680*890232f2SAndroid Build Coastguard Worker
681*890232f2SAndroid Build Coastguard Worker    install(EXPORT FlatBuffersTargets
682*890232f2SAndroid Build Coastguard Worker      FILE FlatBuffersTargets.cmake
683*890232f2SAndroid Build Coastguard Worker      NAMESPACE flatbuffers::
684*890232f2SAndroid Build Coastguard Worker      DESTINATION ${FB_CMAKE_DIR}
685*890232f2SAndroid Build Coastguard Worker    )
686*890232f2SAndroid Build Coastguard Worker  endif()
687*890232f2SAndroid Build Coastguard Worker
688*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_FLATC)
689*890232f2SAndroid Build Coastguard Worker    install(
690*890232f2SAndroid Build Coastguard Worker      TARGETS flatc EXPORT FlatcTargets
691*890232f2SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
692*890232f2SAndroid Build Coastguard Worker    )
693*890232f2SAndroid Build Coastguard Worker
694*890232f2SAndroid Build Coastguard Worker    install(
695*890232f2SAndroid Build Coastguard Worker      EXPORT FlatcTargets
696*890232f2SAndroid Build Coastguard Worker      FILE FlatcTargets.cmake
697*890232f2SAndroid Build Coastguard Worker      NAMESPACE flatbuffers::
698*890232f2SAndroid Build Coastguard Worker      DESTINATION ${FB_CMAKE_DIR}
699*890232f2SAndroid Build Coastguard Worker    )
700*890232f2SAndroid Build Coastguard Worker  endif()
701*890232f2SAndroid Build Coastguard Worker
702*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_SHAREDLIB)
703*890232f2SAndroid Build Coastguard Worker    install(
704*890232f2SAndroid Build Coastguard Worker      TARGETS flatbuffers_shared EXPORT FlatBuffersSharedTargets
705*890232f2SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
706*890232f2SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
707*890232f2SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
708*890232f2SAndroid Build Coastguard Worker      INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
709*890232f2SAndroid Build Coastguard Worker    )
710*890232f2SAndroid Build Coastguard Worker
711*890232f2SAndroid Build Coastguard Worker    install(
712*890232f2SAndroid Build Coastguard Worker      EXPORT FlatBuffersSharedTargets
713*890232f2SAndroid Build Coastguard Worker      FILE FlatBuffersSharedTargets.cmake
714*890232f2SAndroid Build Coastguard Worker      NAMESPACE flatbuffers::
715*890232f2SAndroid Build Coastguard Worker      DESTINATION ${FB_CMAKE_DIR}
716*890232f2SAndroid Build Coastguard Worker    )
717*890232f2SAndroid Build Coastguard Worker  endif()
718*890232f2SAndroid Build Coastguard Worker
719*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_SHAREDLIB OR FLATBUFFERS_BUILD_FLATLIB)
720*890232f2SAndroid Build Coastguard Worker      configure_file(CMake/flatbuffers.pc.in flatbuffers.pc @ONLY)
721*890232f2SAndroid Build Coastguard Worker      install(
722*890232f2SAndroid Build Coastguard Worker        FILES "${CMAKE_CURRENT_BINARY_DIR}/flatbuffers.pc"
723*890232f2SAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
724*890232f2SAndroid Build Coastguard Worker      )
725*890232f2SAndroid Build Coastguard Worker  endif()
726*890232f2SAndroid Build Coastguard Workerendif()
727*890232f2SAndroid Build Coastguard Worker
728*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_TESTS)
729*890232f2SAndroid Build Coastguard Worker  enable_testing()
730*890232f2SAndroid Build Coastguard Worker
731*890232f2SAndroid Build Coastguard Worker  add_test(NAME flattests COMMAND flattests)
732*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_CPP17)
733*890232f2SAndroid Build Coastguard Worker    add_test(NAME flattests_cpp17 COMMAND flattests_cpp17)
734*890232f2SAndroid Build Coastguard Worker  endif()
735*890232f2SAndroid Build Coastguard Worker  if(FLATBUFFERS_BUILD_GRPCTEST)
736*890232f2SAndroid Build Coastguard Worker    add_test(NAME grpctest COMMAND grpctest)
737*890232f2SAndroid Build Coastguard Worker  endif()
738*890232f2SAndroid Build Coastguard Workerendif()
739*890232f2SAndroid Build Coastguard Worker
740*890232f2SAndroid Build Coastguard Worker# This target is sync-barrier.
741*890232f2SAndroid Build Coastguard Worker# Other generate-dependent targets can depend on 'generated_code' only.
742*890232f2SAndroid Build Coastguard Workerget_generated_output(fbs_generated)
743*890232f2SAndroid Build Coastguard Workerif(fbs_generated)
744*890232f2SAndroid Build Coastguard Worker  # message(STATUS "Add generated_code target with files:${fbs_generated}")
745*890232f2SAndroid Build Coastguard Worker  add_custom_target(generated_code
746*890232f2SAndroid Build Coastguard Worker    DEPENDS ${fbs_generated}
747*890232f2SAndroid Build Coastguard Worker    COMMENT "All generated files were updated.")
748*890232f2SAndroid Build Coastguard Workerendif()
749*890232f2SAndroid Build Coastguard Worker
750*890232f2SAndroid Build Coastguard Workerinclude(CMake/BuildFlatBuffers.cmake)
751*890232f2SAndroid Build Coastguard Worker
752*890232f2SAndroid Build Coastguard Workerif(UNIX)
753*890232f2SAndroid Build Coastguard Worker    # Use of CPack only supported on Linux systems.
754*890232f2SAndroid Build Coastguard Worker    if(FLATBUFFERS_PACKAGE_DEBIAN)
755*890232f2SAndroid Build Coastguard Worker        include(CMake/PackageDebian.cmake)
756*890232f2SAndroid Build Coastguard Worker        include(CPack)
757*890232f2SAndroid Build Coastguard Worker    endif()
758*890232f2SAndroid Build Coastguard Worker    if (FLATBUFFERS_PACKAGE_REDHAT)
759*890232f2SAndroid Build Coastguard Worker        include(CMake/PackageRedhat.cmake)
760*890232f2SAndroid Build Coastguard Worker        include(CPack)
761*890232f2SAndroid Build Coastguard Worker    endif()
762*890232f2SAndroid Build Coastguard Workerendif()
763*890232f2SAndroid Build Coastguard Worker
764*890232f2SAndroid Build Coastguard Worker# Include for running Google Benchmarks.
765*890232f2SAndroid Build Coastguard Workerif(FLATBUFFERS_BUILD_BENCHMARKS)
766*890232f2SAndroid Build Coastguard Worker  add_subdirectory(benchmarks)
767*890232f2SAndroid Build Coastguard Workerendif()
768*890232f2SAndroid Build Coastguard Worker
769*890232f2SAndroid Build Coastguard Worker# Add FlatBuffers::FlatBuffers interface, needed for FetchContent_Declare
770*890232f2SAndroid Build Coastguard Workeradd_library(FlatBuffers INTERFACE)
771*890232f2SAndroid Build Coastguard Workeradd_library(FlatBuffers::FlatBuffers ALIAS FlatBuffers)
772*890232f2SAndroid Build Coastguard Workertarget_include_directories(
773*890232f2SAndroid Build Coastguard Worker  FlatBuffers
774*890232f2SAndroid Build Coastguard Worker  INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
775*890232f2SAndroid Build Coastguard Worker            $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>)
776