mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 04:04:19 +00:00
* Remove legacy Conan recipe Signed-off-by: Uilian Ries <uilianries@gmail.com> * Document how to install flatbuffers with Conan Signed-off-by: Uilian Ries <uilianries@gmail.com> --------- Signed-off-by: Uilian Ries <uilianries@gmail.com> Co-authored-by: Justin Davis <jtdavis777@gmail.com>
189 lines
6.7 KiB
Markdown
189 lines
6.7 KiB
Markdown
# Building
|
|
|
|
## Building with CMake
|
|
|
|
The distribution main build system is configured by
|
|
[`cmake`](https://www.cmake.org) which allows you to build the project for any
|
|
platform.
|
|
|
|
### Configuration
|
|
|
|
Use `cmake` to configure a project based on your environment and platform.
|
|
|
|
=== "Unix"
|
|
|
|
```sh
|
|
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
|
|
```
|
|
|
|
To use `clang` instead of `gcc` you may need to set prepend some environment
|
|
variables e.g. `CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -G "Unix
|
|
MakeFiles"`
|
|
|
|
=== "Windows"
|
|
|
|
```sh
|
|
cmake -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release
|
|
```
|
|
|
|
=== "MacOS"
|
|
|
|
```sh
|
|
cmake -G "Xcode" -DCMAKE_BUILD_TYPE=Release
|
|
```
|
|
|
|
#### Strict Mode
|
|
|
|
By default, `cmake` will configure targets to **not** build with strict warnings
|
|
on (e.g. `-Werror` or `/WX`). This may cause into issues when submitting code
|
|
changes since our CI requires the code to compile in strict mode.
|
|
|
|
To enable the extra warnings, turn on strict mode with the
|
|
`FLATBUFFERS_STRICT_MODE` cmake option.
|
|
|
|
```cmake
|
|
cmake -DFLATBUFFERS_STRICT_MODE=ON
|
|
```
|
|
|
|
|
|
### Building
|
|
|
|
Once the project files are generated, build as normal for your platform.
|
|
|
|
=== "Unix"
|
|
|
|
```sh
|
|
make -j
|
|
```
|
|
|
|
=== "Windows"
|
|
|
|
```sh
|
|
msbuild.exe FlatBuffers.sln
|
|
```
|
|
|
|
=== "MacOS"
|
|
|
|
```sh
|
|
xcodebuild -toolchain clang -configuration Release
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Building with Bazel
|
|
|
|
You can use [Bazelisk](https://github.com/bazelbuild/bazelisk) to manage your Bazel environment.
|
|
For Swift support, you also need Clang and [Swift SDK](https://download.swift.org/).
|
|
|
|
```sh
|
|
curl -sL --fail https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-linux-amd64 -o bazelisk && chmod +x bazelisk
|
|
sudo apt install -y clang
|
|
SWIFT_VERSION="6.0.3"
|
|
curl -L https://download.swift.org/swift-${SWIFT_VERSION}-release/debian12/swift-${SWIFT_VERSION}-RELEASE/swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz | tar xz
|
|
CC=clang PATH=$PATH:$(pwd)/swift-${SWIFT_VERSION}-RELEASE-debian12/usr/bin bazel build //...
|
|
CC=clang PATH=$PATH:$(pwd)/swift-${SWIFT_VERSION}-RELEASE-debian12/usr/bin bazel test //...
|
|
```
|
|
|
|
If you are unsure which versions to use, check our CI config at `.bazelci/presubmit.yml`.
|
|
|
|
## Building with Conan
|
|
|
|
You can download and install flatbuffers using the [Conan](https://conan.io/) dependency manager:
|
|
|
|
conan install --requires="flatbuffers/[*]" --build=missing
|
|
|
|
The flatbuffers package in Conan Center is maintained by
|
|
[ConanCenterIndex](https://github.com/conan-io/conan-center-index) community.
|
|
If the version is out of date or the package does not work,
|
|
please create an issue or pull request on the [Conan Center Index repository](https://github.com/conan-io/conan-center-index).
|
|
|
|
## Building with VCPKG
|
|
|
|
You can download and install flatbuffers using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
|
|
|
|
git clone https://github.com/Microsoft/vcpkg.git
|
|
cd vcpkg
|
|
./bootstrap-vcpkg.sh
|
|
./vcpkg integrate install
|
|
./vcpkg install flatbuffers
|
|
|
|
The flatbuffers port in vcpkg is kept up to date by Microsoft team members and community contributors.
|
|
If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
|
|
|
|
|
|
|
|
## Building for Android
|
|
|
|
There is a `flatbuffers/android` directory that contains all you need to build
|
|
the test executable on android (use the included `build_apk.sh` script, or use
|
|
`ndk_build` / `adb` etc. as usual). Upon running, it will output to the log
|
|
if tests succeeded or not.
|
|
|
|
You may also run an android sample from inside the `flatbuffers/samples`, by
|
|
running the `android_sample.sh` script. Optionally, you may go to the
|
|
`flatbuffers/samples/android` folder and build the sample with the
|
|
`build_apk.sh` script or `ndk_build` / `adb` etc.
|
|
|
|
## Using FlatBuffers in your own projects
|
|
|
|
For C++, there is usually no runtime to compile, as the code consists of a
|
|
single header, `include/flatbuffers/flatbuffers.h`. You should add the
|
|
`include` folder to your include paths. If you wish to be
|
|
able to load schemas and/or parse text into binary buffers at runtime,
|
|
you additionally need the other headers in `include/flatbuffers`. You must
|
|
also compile/link `src/idl_parser.cpp` (and `src/idl_gen_text.cpp` if you
|
|
also want to be able convert binary to text).
|
|
|
|
To see how to include FlatBuffers in any of our supported languages, please
|
|
view the [Tutorial](tutorial.md) and select your appropriate
|
|
language using the radio buttons.
|
|
|
|
### Using in CMake-based projects
|
|
If you want to use FlatBuffers in a project which already uses CMake, then a more
|
|
robust and flexible approach is to build FlatBuffers as part of that project directly.
|
|
This is done by making the FlatBuffers source code available to the main build
|
|
and adding it using CMake's `add_subdirectory()` command. This has the
|
|
significant advantage that the same compiler and linker settings are used
|
|
between FlatBuffers and the rest of your project, so issues associated with using
|
|
incompatible libraries (eg debug/release), etc. are avoided. This is
|
|
particularly useful on Windows.
|
|
|
|
Suppose you put FlatBuffers source code in directory `${FLATBUFFERS_SRC_DIR}`.
|
|
To build it as part of your project, add following code to your `CMakeLists.txt` file:
|
|
```cmake
|
|
# Add FlatBuffers directly to our build. This defines the `flatbuffers` target.
|
|
add_subdirectory(${FLATBUFFERS_SRC_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
# Now simply link against flatbuffers as needed to your already declared target.
|
|
# The flatbuffers target carry header search path automatically if CMake > 2.8.11.
|
|
target_link_libraries(own_project_target PRIVATE flatbuffers)
|
|
```
|
|
When build your project the `flatbuffers` library will be compiled and linked
|
|
to a target as part of your project.
|
|
|
|
#### Override default depth limit of nested objects
|
|
To override [the depth limit of recursion](languages/cpp.md),
|
|
add this directive:
|
|
```cmake
|
|
set(FLATBUFFERS_MAX_PARSING_DEPTH 16)
|
|
```
|
|
to `CMakeLists.txt` file before `add_subdirectory(${FLATBUFFERS_SRC_DIR})` line.
|
|
|
|
## Downloading binaries
|
|
You can download the binaries from the
|
|
[GitHub release page](https://github.com/google/flatbuffers/releases).
|
|
|
|
We generate [SLSA3 signatures](http://slsa.dev) using the OpenSSF's [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). To verify the binaries:
|
|
1. Install the verification tool from [slsa-framework/slsa-verifier#installation](https://github.com/slsa-framework/slsa-verifier#installation)
|
|
1. Download the file named `attestation.intoto.jsonl` from the GitHub release
|
|
1. Run:
|
|
```shell
|
|
$ slsa-verifier -artifact-path <downloaded.zip> -provenance attestation.intoto.jsonl -source github.com/google/flatbuffers -tag <version>
|
|
PASSED: Verified SLSA provenance
|
|
```
|