mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 04:04:19 +00:00
The new line in the set(CMAKE_CXX_FLAGS...) line was getting insert verbatim into the Makefile. Makefiles don't like new lines in their assignment operators. The newline escape fix works for CMake 3.0 and above, but since we support 2.x, we need to use the legacy solution, which is to split into two separate statements. Tested: cmake -G"Unix Makefiles" works now on Mac. Change-Id: I6f4655981b85087c4760c3d26ed0c97c4469ba93
225 lines
6.8 KiB
CMake
225 lines
6.8 KiB
CMake
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(FlatBuffers)
|
|
|
|
# NOTE: Code coverage only works on Linux & OSX.
|
|
option(FLATBUFFERS_CODE_COVERAGE "Enable the code coverage build option." OFF)
|
|
option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
|
|
option(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
|
|
option(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library"
|
|
ON)
|
|
option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
|
|
ON)
|
|
option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
|
|
option(FLATBUFFERS_BUILD_GRPCTEST "Enable the build of grpctest" OFF)
|
|
|
|
if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
|
|
message(WARNING
|
|
"Cannot build tests without building the compiler. Tests will be disabled.")
|
|
set(FLATBUFFERS_BUILD_TESTS OFF)
|
|
endif()
|
|
|
|
set(FlatBuffers_Library_SRCS
|
|
include/flatbuffers/code_generators.h
|
|
include/flatbuffers/flatbuffers.h
|
|
include/flatbuffers/hash.h
|
|
include/flatbuffers/idl.h
|
|
include/flatbuffers/util.h
|
|
include/flatbuffers/reflection.h
|
|
include/flatbuffers/reflection_generated.h
|
|
src/idl_parser.cpp
|
|
src/idl_gen_text.cpp
|
|
src/reflection.cpp
|
|
src/util.cpp
|
|
)
|
|
|
|
set(FlatBuffers_Compiler_SRCS
|
|
${FlatBuffers_Library_SRCS}
|
|
src/idl_gen_cpp.cpp
|
|
src/idl_gen_general.cpp
|
|
src/idl_gen_go.cpp
|
|
src/idl_gen_js.cpp
|
|
src/idl_gen_php.cpp
|
|
src/idl_gen_python.cpp
|
|
src/idl_gen_fbs.cpp
|
|
src/idl_gen_grpc.cpp
|
|
src/flatc.cpp
|
|
grpc/src/compiler/cpp_generator.h
|
|
grpc/src/compiler/cpp_generator.cc
|
|
)
|
|
|
|
set(FlatHash_SRCS
|
|
include/flatbuffers/hash.h
|
|
src/flathash.cpp
|
|
)
|
|
|
|
set(FlatBuffers_Tests_SRCS
|
|
${FlatBuffers_Library_SRCS}
|
|
src/idl_gen_fbs.cpp
|
|
src/idl_gen_general.cpp
|
|
tests/test.cpp
|
|
# file generate by running compiler on tests/monster_test.fbs
|
|
${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
|
|
)
|
|
|
|
set(FlatBuffers_Sample_Binary_SRCS
|
|
include/flatbuffers/flatbuffers.h
|
|
samples/sample_binary.cpp
|
|
# file generated by running compiler on samples/monster.fbs
|
|
${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
|
|
)
|
|
|
|
set(FlatBuffers_Sample_Text_SRCS
|
|
include/flatbuffers/flatbuffers.h
|
|
include/flatbuffers/hash.h
|
|
include/flatbuffers/idl.h
|
|
include/flatbuffers/util.h
|
|
src/idl_parser.cpp
|
|
src/idl_gen_text.cpp
|
|
src/util.cpp
|
|
samples/sample_text.cpp
|
|
# file generated by running compiler on samples/monster.fbs
|
|
${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
|
|
)
|
|
|
|
set(FlatBuffers_GRPCTest_SRCS
|
|
include/flatbuffers/flatbuffers.h
|
|
include/flatbuffers/grpc.h
|
|
tests/monster_test.grpc.fb.h
|
|
tests/monster_test.grpc.fb.cc
|
|
grpc/tests/grpctest.cpp
|
|
# file generated by running compiler on samples/monster.fbs
|
|
${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
|
|
)
|
|
|
|
# source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS})
|
|
# source_group(Tests FILES ${FlatBuffers_Tests_SRCS})
|
|
|
|
if(APPLE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra")
|
|
elseif(CMAKE_COMPILER_IS_GNUCXX)
|
|
if(CYGWIN)
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -std=gnu++11")
|
|
else(CYGWIN)
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -std=c++0x")
|
|
endif(CYGWIN)
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Werror=shadow")
|
|
if (GCC_VERSION VERSION_GREATER 4.4)
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result")
|
|
endif()
|
|
|
|
# Certain platforms such as ARM do not use signed chars by default
|
|
# which causes issues with certain bounds checks.
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -fsigned-char")
|
|
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -Wall -pedantic -Werror \
|
|
-Wextra")
|
|
if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
|
set(CMAKE_EXE_LINKER_FLAGS
|
|
"${CMAKE_EXE_LINKER_FLAGS} -lc++abi")
|
|
endif()
|
|
|
|
# Certain platforms such as ARM do not use signed chars by default
|
|
# which causes issues with certain bounds checks.
|
|
set(CMAKE_CXX_FLAGS
|
|
"${CMAKE_CXX_FLAGS} -fsigned-char")
|
|
|
|
endif()
|
|
|
|
if(FLATBUFFERS_CODE_COVERAGE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
|
|
set(CMAKE_EXE_LINKER_FLAGS
|
|
"${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
|
|
endif()
|
|
|
|
if(BIICODE)
|
|
include(biicode/cmake/biicode.cmake)
|
|
return()
|
|
endif()
|
|
|
|
include_directories(include)
|
|
include_directories(grpc)
|
|
|
|
if(FLATBUFFERS_BUILD_FLATLIB)
|
|
add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
|
|
endif()
|
|
|
|
if(FLATBUFFERS_BUILD_FLATC)
|
|
add_executable(flatc ${FlatBuffers_Compiler_SRCS})
|
|
if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
|
|
set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
|
|
endif()
|
|
endif()
|
|
|
|
if(FLATBUFFERS_BUILD_FLATHASH)
|
|
add_executable(flathash ${FlatHash_SRCS})
|
|
endif()
|
|
|
|
function(compile_flatbuffers_schema_to_cpp SRC_FBS)
|
|
get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
|
|
string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
|
|
add_custom_command(
|
|
OUTPUT ${GEN_HEADER}
|
|
COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -c --no-includes --gen-mutable
|
|
--gen-object-api -o "${SRC_FBS_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
|
|
DEPENDS flatc)
|
|
endfunction()
|
|
|
|
function(compile_flatbuffers_schema_to_binary SRC_FBS)
|
|
get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
|
|
string(REGEX REPLACE "\\.fbs$" ".bfbs" GEN_BINARY_SCHEMA ${SRC_FBS})
|
|
add_custom_command(
|
|
OUTPUT ${GEN_BINARY_SCHEMA}
|
|
COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -b --schema -o "${SRC_FBS_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
|
|
DEPENDS flatc)
|
|
endfunction()
|
|
|
|
if(FLATBUFFERS_BUILD_TESTS)
|
|
compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
|
|
add_executable(flattests ${FlatBuffers_Tests_SRCS})
|
|
|
|
compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
|
|
add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
|
|
add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
|
|
endif()
|
|
|
|
if(FLATBUFFERS_BUILD_GRPCTEST)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
|
|
endif()
|
|
add_executable(grpctest ${FlatBuffers_GRPCTest_SRCS})
|
|
target_link_libraries(grpctest grpc++_unsecure grpc pthread dl)
|
|
endif()
|
|
|
|
if(FLATBUFFERS_INSTALL)
|
|
install(DIRECTORY include/flatbuffers DESTINATION include)
|
|
if(FLATBUFFERS_BUILD_FLATLIB)
|
|
install(TARGETS flatbuffers DESTINATION lib)
|
|
endif()
|
|
if(FLATBUFFERS_BUILD_FLATC)
|
|
install(TARGETS flatc DESTINATION bin)
|
|
endif()
|
|
endif()
|
|
|
|
if(FLATBUFFERS_BUILD_TESTS)
|
|
enable_testing()
|
|
|
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION
|
|
"${CMAKE_CURRENT_BINARY_DIR}")
|
|
add_test(NAME flattests COMMAND flattests)
|
|
endif()
|
|
|
|
include(CMake/BuildFlatBuffers.cmake)
|