2014-01-28 00:52:49 +00:00
|
|
|
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)
|
2014-09-10 23:01:13 +00:00
|
|
|
option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
|
2014-09-15 16:50:23 +00:00
|
|
|
option(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
|
2015-07-22 12:18:59 +00:00
|
|
|
option(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library" ON)
|
2015-01-02 12:51:31 +00:00
|
|
|
option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler" ON)
|
2015-02-13 23:58:29 +00:00
|
|
|
option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
|
2015-01-02 12:51:31 +00:00
|
|
|
|
|
|
|
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()
|
2014-01-28 00:52:49 +00:00
|
|
|
|
2015-07-22 12:18:59 +00:00
|
|
|
set(FlatBuffers_Library_SRCS
|
2014-01-28 00:52:49 +00:00
|
|
|
include/flatbuffers/flatbuffers.h
|
2015-02-13 23:58:29 +00:00
|
|
|
include/flatbuffers/hash.h
|
2014-01-28 00:52:49 +00:00
|
|
|
include/flatbuffers/idl.h
|
|
|
|
include/flatbuffers/util.h
|
2015-05-21 23:33:29 +00:00
|
|
|
include/flatbuffers/reflection.h
|
|
|
|
include/flatbuffers/reflection_generated.h
|
2014-01-28 00:52:49 +00:00
|
|
|
src/idl_parser.cpp
|
2015-07-22 12:18:59 +00:00
|
|
|
src/idl_gen_text.cpp
|
2015-07-31 20:55:53 +00:00
|
|
|
src/reflection.cpp
|
2016-03-31 00:34:52 +00:00
|
|
|
src/util.cpp
|
2015-07-22 12:18:59 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
set(FlatBuffers_Compiler_SRCS
|
|
|
|
${FlatBuffers_Library_SRCS}
|
2014-01-28 00:52:49 +00:00
|
|
|
src/idl_gen_cpp.cpp
|
2014-09-17 00:37:17 +00:00
|
|
|
src/idl_gen_general.cpp
|
2014-07-11 23:12:35 +00:00
|
|
|
src/idl_gen_go.cpp
|
2015-08-17 07:56:54 +00:00
|
|
|
src/idl_gen_js.cpp
|
(PHP) add experimental support for PHP language.
* codegen for all basic features: WIP (probably implemented all basic feature)
* JSON parsing: NO
* Simple mutation: NO
* Reflection: NO
* Buffer verifier: NO (will be add later)
* Testing: basic: Yes
* Testing: fuzz: Yes
* Performance: Not bad
* Platform: Supported Linux, OS X, Windows (has 32bit integer limitation)
* Engine Unity: No
flatc --php monster_test.fbs
<?php
//include neccessary files.
$fbb = new Google\FlatBuffers\FlatBufferBuilder(1);
$str = $fbb->createString("monster");
\MyGame\Example\Monster::startMonster($fbb);
\MyGame\Example\Monster::addHp($fbb, 80);
\MyGame\Example\Monster::addName($fbb, $str);
$mon = \MyGame\Example\Monster::endMonster($fbb);
$fbb->finish($mon);
echo $fbb->sizedByteArray();
PHP 5.4 higher
Currently, we do not register this library to packagist as still experimental and versioning problem.
If you intended to use flatbuffers with composer. add repostiories section to composer.json like below.
"repositories": [{
"type": "vcs",
"url": "https://github.com/google/flatbuffers"
}],
and just put google/flatbuffers.
"require": {
"google/flatbuffers": "*"
}
* PHP's integer is platform dependant. we strongly recommend use 64bit machine
and don't use uint, ulong types as prevent overflow issue.
ref: http://php.net/manual/en/language.types.integer.php
* php don't support float type. floating point numbers are always parsed as double precision internally.
ref: http://php.net/manual/en/language.types.float.php
* ByteBuffer is little bit slow implemnentation due to many chr/ord function calls. Especially encoding objects.
This is expected performance as PHP5 has parsing arguments overhead. probably we'll add C-extension.
Basically, PHP implementation respects Java and C# implementation.
Note: ByteBuffer and FlatBuffersBuilder class are not intended to use other purposes.
we may change internal API foreseeable future.
PSR-2, PSR-4 standards.
Implemented simple assertion class (respect JavaScript testcase implementation) as we prefer small code base.
this also keeps CI iteration speed.
we'll choose phpunit or something when the test cases grown.
2015-11-05 07:19:28 +00:00
|
|
|
src/idl_gen_php.cpp
|
2014-12-16 08:32:11 +00:00
|
|
|
src/idl_gen_python.cpp
|
2014-09-26 23:46:30 +00:00
|
|
|
src/idl_gen_fbs.cpp
|
2014-01-28 00:52:49 +00:00
|
|
|
src/flatc.cpp
|
|
|
|
)
|
|
|
|
|
2015-02-13 23:58:29 +00:00
|
|
|
set(FlatHash_SRCS
|
|
|
|
include/flatbuffers/hash.h
|
|
|
|
src/flathash.cpp
|
|
|
|
)
|
|
|
|
|
2014-01-28 00:52:49 +00:00
|
|
|
set(FlatBuffers_Tests_SRCS
|
2015-07-31 20:55:53 +00:00
|
|
|
${FlatBuffers_Library_SRCS}
|
2014-09-26 23:46:30 +00:00
|
|
|
src/idl_gen_fbs.cpp
|
2015-07-31 20:55:53 +00:00
|
|
|
src/idl_gen_general.cpp
|
2014-01-28 00:52:49 +00:00
|
|
|
tests/test.cpp
|
|
|
|
# file generate by running compiler on tests/monster_test.fbs
|
2014-09-15 16:50:23 +00:00
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
|
2014-01-28 00:52:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
set(FlatBuffers_Sample_Binary_SRCS
|
|
|
|
include/flatbuffers/flatbuffers.h
|
|
|
|
samples/sample_binary.cpp
|
2014-09-15 16:50:23 +00:00
|
|
|
# file generated by running compiler on samples/monster.fbs
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
|
2014-01-28 00:52:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
set(FlatBuffers_Sample_Text_SRCS
|
|
|
|
include/flatbuffers/flatbuffers.h
|
2015-02-13 23:58:29 +00:00
|
|
|
include/flatbuffers/hash.h
|
2014-01-28 00:52:49 +00:00
|
|
|
include/flatbuffers/idl.h
|
|
|
|
include/flatbuffers/util.h
|
|
|
|
src/idl_parser.cpp
|
|
|
|
src/idl_gen_text.cpp
|
2016-03-31 00:34:52 +00:00
|
|
|
src/util.cpp
|
2014-01-28 00:52:49 +00:00
|
|
|
samples/sample_text.cpp
|
2014-09-15 16:50:23 +00:00
|
|
|
# file generated by running compiler on samples/monster.fbs
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
|
2014-01-28 00:52:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
# source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS})
|
|
|
|
# source_group(Tests FILES ${FlatBuffers_Tests_SRCS})
|
|
|
|
|
2014-07-26 11:12:56 +00:00
|
|
|
if(APPLE)
|
2014-08-25 17:42:38 +00:00
|
|
|
set(CMAKE_CXX_FLAGS
|
|
|
|
"${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -Wall -pedantic -Werror -Wextra")
|
2015-05-27 23:57:21 +00:00
|
|
|
elseif(CMAKE_COMPILER_IS_GNUCXX)
|
2016-04-02 04:42:23 +00:00
|
|
|
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)
|
2014-08-25 17:42:38 +00:00
|
|
|
set(CMAKE_CXX_FLAGS
|
2016-04-02 04:42:23 +00:00
|
|
|
"${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra -Werror=shadow")
|
2016-02-11 00:03:53 +00:00
|
|
|
if (GCC_VERSION VERSION_GREATER 4.4)
|
|
|
|
set(CMAKE_CXX_FLAGS
|
|
|
|
"${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result")
|
|
|
|
endif()
|
2016-02-29 17:28:40 +00:00
|
|
|
|
|
|
|
# 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")
|
|
|
|
|
2015-05-27 23:57:21 +00:00
|
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
|
|
|
set(CMAKE_CXX_FLAGS
|
2015-12-01 00:41:54 +00:00
|
|
|
"${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -Wall -pedantic -Werror -Wextra")
|
2016-03-03 01:15:42 +00:00
|
|
|
if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS
|
|
|
|
"${CMAKE_EXE_LINKER_FLAGS} -lc++abi")
|
|
|
|
endif()
|
2016-02-29 17:28:40 +00:00
|
|
|
|
|
|
|
# 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")
|
|
|
|
|
2014-01-28 00:52:49 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(FLATBUFFERS_CODE_COVERAGE)
|
2014-07-26 11:12:56 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
|
2014-07-29 17:29:38 +00:00
|
|
|
set(CMAKE_EXE_LINKER_FLAGS
|
|
|
|
"${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
|
2014-01-28 00:52:49 +00:00
|
|
|
endif()
|
|
|
|
|
2015-01-31 16:14:59 +00:00
|
|
|
if(BIICODE)
|
2015-04-01 10:35:37 +00:00
|
|
|
include(biicode/cmake/biicode.cmake)
|
2015-01-31 16:14:59 +00:00
|
|
|
return()
|
2015-04-01 10:35:37 +00:00
|
|
|
endif()
|
2015-01-31 16:14:59 +00:00
|
|
|
|
2014-01-28 00:52:49 +00:00
|
|
|
include_directories(include)
|
|
|
|
|
2015-07-22 12:18:59 +00:00
|
|
|
if(FLATBUFFERS_BUILD_FLATLIB)
|
|
|
|
add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
|
|
|
|
endif()
|
|
|
|
|
2015-01-02 12:51:31 +00:00
|
|
|
if(FLATBUFFERS_BUILD_FLATC)
|
2015-02-13 23:58:29 +00:00
|
|
|
add_executable(flatc ${FlatBuffers_Compiler_SRCS})
|
|
|
|
endif()
|
|
|
|
|
2015-04-28 22:44:10 +00:00
|
|
|
if(FLATBUFFERS_BUILD_FLATHASH)
|
2015-02-13 23:58:29 +00:00
|
|
|
add_executable(flathash ${FlatHash_SRCS})
|
2015-01-02 12:51:31 +00:00
|
|
|
endif()
|
2014-09-15 16:50:23 +00:00
|
|
|
|
|
|
|
function(compile_flatbuffers_schema_to_cpp SRC_FBS)
|
2014-10-24 21:26:29 +00:00
|
|
|
get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
|
2014-09-23 18:55:42 +00:00
|
|
|
string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
|
2014-09-15 16:50:23 +00:00
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${GEN_HEADER}
|
2016-01-19 12:02:25 +00:00
|
|
|
COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -c --no-includes --gen-mutable -o "${SRC_FBS_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
|
2014-09-15 16:50:23 +00:00
|
|
|
DEPENDS flatc)
|
|
|
|
endfunction()
|
|
|
|
|
2015-05-21 23:33:29 +00:00
|
|
|
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}
|
2016-01-19 12:02:25 +00:00
|
|
|
COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -b --schema -o "${SRC_FBS_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
|
2015-05-21 23:33:29 +00:00
|
|
|
DEPENDS flatc)
|
|
|
|
endfunction()
|
|
|
|
|
2014-09-10 23:01:13 +00:00
|
|
|
if(FLATBUFFERS_BUILD_TESTS)
|
2014-09-15 16:50:23 +00:00
|
|
|
compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
|
2014-09-10 23:01:13 +00:00
|
|
|
add_executable(flattests ${FlatBuffers_Tests_SRCS})
|
2014-09-15 16:50:23 +00:00
|
|
|
|
|
|
|
compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
|
2014-09-10 23:01:13 +00:00
|
|
|
add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
|
|
|
|
add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
|
|
|
|
endif()
|
2014-01-28 00:52:49 +00:00
|
|
|
|
2014-09-15 16:50:23 +00:00
|
|
|
if(FLATBUFFERS_INSTALL)
|
|
|
|
install(DIRECTORY include/flatbuffers DESTINATION include)
|
2015-07-22 12:18:59 +00:00
|
|
|
if(FLATBUFFERS_BUILD_FLATLIB)
|
|
|
|
install(TARGETS flatbuffers DESTINATION lib)
|
|
|
|
endif()
|
2015-01-02 12:51:31 +00:00
|
|
|
if(FLATBUFFERS_BUILD_FLATC)
|
|
|
|
install(TARGETS flatc DESTINATION bin)
|
|
|
|
endif()
|
2014-09-15 16:50:23 +00:00
|
|
|
endif()
|
2014-07-15 13:09:36 +00:00
|
|
|
|
2014-09-10 23:01:13 +00:00
|
|
|
if(FLATBUFFERS_BUILD_TESTS)
|
2014-09-15 16:50:23 +00:00
|
|
|
enable_testing()
|
|
|
|
|
2014-09-23 18:55:42 +00:00
|
|
|
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}")
|
2014-09-15 16:50:23 +00:00
|
|
|
add_test(NAME flattests COMMAND flattests)
|
2014-09-10 23:01:13 +00:00
|
|
|
endif()
|
2015-11-17 21:39:37 +00:00
|
|
|
|
|
|
|
include(CMake/BuildFlatBuffers.cmake)
|