-
Notifications
You must be signed in to change notification settings - Fork 984
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
894c953
commit 8a979f7
Showing
186 changed files
with
6,986 additions
and
3,206 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
# CMake Build System Overview | ||
|
||
[TOC] | ||
|
||
This document provides a general layout of the Draco CMake build system. | ||
|
||
## Core Build System Files | ||
|
||
These files are listed in order of interest to maintainers of the build system. | ||
|
||
- `CMakeLists.txt` is the main driver of the build system. It's responsible | ||
for defining targets and source lists, surfacing build system options, and | ||
tying the components of the build system together. | ||
|
||
- `cmake/draco_build_definitions.cmake` defines the macro | ||
`draco_set_build_definitions()`, which is called from `CMakeLists.txt` to | ||
configure include paths, compiler and linker flags, library settings, | ||
platform speficic configuration, and other build system settings that | ||
depend on optional build configurations. | ||
|
||
- `cmake/draco_targets.cmake` defines the macros `draco_add_library()` and | ||
`draco_add_executable()` which are used to create all targets in the CMake | ||
build. These macros attempt to behave in a manner that loosely mirrors the | ||
blaze `cc_library()` and `cc_binary()` commands. Note that | ||
`draco_add_executable()` is also used for tests. | ||
|
||
- `cmake/draco_emscripten.cmake` handles Emscripten SDK integration. It | ||
defines several Emscripten specific macros that are required to build the | ||
Emscripten specific targets defined in `CMakeLists.txt`. | ||
|
||
- `cmake/draco_flags.cmake` defines macros related to compiler and linker | ||
flags. Testing macros, macros for isolating flags to specific source files, | ||
and the main flag configuration function for the library are defined here. | ||
|
||
- `cmake/draco_options.cmake` defines macros that control optional features | ||
of draco, and help track draco library and build system options. | ||
|
||
- `cmake/draco_install.cmake` defines the draco install target. | ||
|
||
- `cmake/draco_cpu_detection.cmake` determines the optimization types to | ||
enable based on target system processor as reported by CMake. | ||
|
||
- `cmake/draco_intrinsics.cmake` manages flags for source files that use | ||
intrinsics. It handles detection of whether flags are necessary, and the | ||
application of the flags to the sources that need them when they are | ||
required. | ||
|
||
## Helper and Utility Files | ||
|
||
- `.cmake-format.py` Defines coding style for cmake-format. | ||
|
||
- `cmake/draco_helpers.cmake` defines utility macros. | ||
|
||
- `cmake/draco_sanitizer.cmake` defines the `draco_configure_sanitizer()` | ||
macro, which implements support for `DRACO_SANITIZE`. It handles the | ||
compiler and linker flags necessary for using sanitizers like asan and msan. | ||
|
||
- `cmake/draco_variables.cmake` defines macros for tracking and control of | ||
draco build system variables. | ||
|
||
## Toolchain Files | ||
|
||
These files help facilitate cross compiling of draco for various targets. | ||
|
||
- `cmake/toolchains/aarch64-linux-gnu.cmake` provides cross compilation | ||
support for arm64 targets. | ||
|
||
- `cmake/toolchains/android.cmake` provides cross compilation support for | ||
Android targets. | ||
|
||
- `cmake/toolchains/arm-linux-gnueabihf.cmake` provides cross compilation | ||
support for armv7 targets. | ||
|
||
- `cmake/toolchains/arm64-ios.cmake`, `cmake/toolchains/armv7-ios.cmake`, | ||
and `cmake/toolchains/armv7s-ios.cmake` provide support for iOS. | ||
|
||
- `cmake/toolchains/arm64-linux-gcc.cmake` and | ||
`cmake/toolchains/armv7-linux-gcc.cmake` are deprecated, but remain for | ||
compatibility. `cmake/toolchains/android.cmake` should be used instead. | ||
|
||
- `cmake/toolchains/arm64-android-ndk-libcpp.cmake`, | ||
`cmake/toolchains/armv7-android-ndk-libcpp.cmake`, | ||
`cmake/toolchains/x86-android-ndk-libcpp.cmake`, and | ||
`cmake/toolchains/x86_64-android-ndk-libcpp.cmake` are deprecated, but | ||
remain for compatibility. `cmake/toolchains/android.cmake` should be used | ||
instead. | ||
|
||
- `cmake/toolchains/i386-ios.cmake` and `cmake/toolchains/x86_64-ios.cmake` | ||
provide support for the iOS simulator. | ||
|
||
- `cmake/toolchains/android-ndk-common.cmake` and | ||
`cmake/toolchains/arm-ios-common.cmake` are support files used by other | ||
toolchain files. | ||
|
||
## Template Files | ||
|
||
These files are inputs to the CMake build and are used to generate inputs to the | ||
build system output by CMake. | ||
|
||
- `cmake/draco-config.cmake.template` is used to produce | ||
draco-config.cmake. draco-config.cmake can be used by CMake to find draco | ||
when another CMake project depends on draco. | ||
|
||
- `cmake/draco.pc.template` is used to produce draco's pkg-config file. | ||
Some build systems use pkg-config to configure include and library paths | ||
when they depend upon third party libraries like draco. |
Oops, something went wrong.