A build file is optional, but can used to specify:
- Target-triple (eg. arm-linux-gnueabi-gcc, x86_64-unknown-linux-gnu)
- Compiler/Build options for the C-backend (eg. specify the cross-compiler + flags)
- A list of library search paths
- Change the default output-directory
Specifying a build file
Telling the C2 compiler to use a build file can be done in several ways:
- By default, C2C looks for a file named build.toml in the same directory as the recipe file
- it can be specified on the command-line with the -b <build_file> option
The build file uses the TOML format and use the .toml filename extension.
target = "arm-linux-gnueabi" [toolchain] cc = "arm-linux-gnueabi-gcc" cflags = "-march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9" ldflags = "-Wl,-O1" [[libdir]] dir = "$ARM_SYSROOT" [output] dir="output_arm"
All entries are optional, but when specified will override the default values.
Instead of specifying a fixed value in the build file, all values that start with a $ are instead interpreted as environment variables. For example, the build_generic.toml file
target = "$TARGET_PREFIX" [toolchain] cc = "$CC" cflags = "$CFLAGS" ldflags = "$LDFLAGS" [[libdir]] dir = "$C2_LIBDIR" [output] dir="output_cross"
can be used with many different cross-compile toolchains that just export the right environment variables. This can also be used to re-add the C2_LIBDIR environement variable to the search path.
Please note that the entire value after the $ is interpreted as the environment variable name, so the following is NOT allowed:
key = "$ENV1 $ENV2"
Library search paths
A build file changes the way C2C searches for libraries. C2C uses the following rules:
- If no build file is used, it only uses the C2_LIBDIR environment variable.
- If a build file is used, the C2_LIBDIR environment variable is not used.
- The build file can specify a list of paths that are search in the same order as in the file.