summaryrefslogtreecommitdiff
path: root/CC/RULES
diff options
context:
space:
mode:
Diffstat (limited to 'CC/RULES')
-rw-r--r--CC/RULES1217
1 files changed, 0 insertions, 1217 deletions
diff --git a/CC/RULES b/CC/RULES
deleted file mode 100644
index 82305d9..0000000
--- a/CC/RULES
+++ /dev/null
@@ -1,1217 +0,0 @@
-{ "defaults":
- { "doc":
- [ "A rule to provide defaults."
- , "All CC targets take their defaults for CC, CXX, flags, etc from"
- , "the target [\"CC\", \"defaults\"]. This is probably the only sensible"
- , "use of this rule. As targets form a different root, the defaults"
- , "can be provided without changing this directory."
- ]
- , "target_fields": ["base", "toolchain", "deps", "include_scanner"]
- , "string_fields":
- [ "CC"
- , "CXX"
- , "CFLAGS"
- , "CXXFLAGS"
- , "LDFLAGS"
- , "ARFLAGS"
- , "DEBUGFLAGS"
- , "ADD_COMPILE_FLAGS"
- , "ADD_CFLAGS"
- , "ADD_CXXFLAGS"
- , "ADD_LDFLAGS"
- , "ADD_DEBUGFLAGS"
- , "AR"
- , "DWP"
- , "PATH"
- , "SYSTEM_TOOLS"
- ]
- , "config_vars": ["ARCH", "HOST_ARCH", "TARGET_ARCH", "DEBUG"]
- , "field_doc":
- { "base": ["Other targets (using the same rule) to inherit values from."]
- , "toolchain":
- [ "Optional toolchain directory. A collection of artifacts that provide"
- , "the tools CC, CXX, and AR (if needed). Note that only artifacts of"
- , "the specified targets are considered (no runfiles etc.). Specifying"
- , "this field extends artifacts from \"base\". If the toolchain"
- , "supports cross-compilation, it should perform a dispatch on the"
- , "configuration variable \"BUILD_ARCH\" to determine for which"
- , "architecture to generate code for."
- ]
- , "deps":
- [ "Optional CC libraries any CC library and CC binary implicitly depend"
- , "on. Those are typically \"libstdc++\" or \"libc++\" for C++ targets."
- , "Specifying this field extends dependencies from \"base\"."
- ]
- , "CC": ["The C compiler to use"]
- , "CXX": ["The C++ compiler to use"]
- , "AR": ["The archiver tool to use"]
- , "DWP":
- [ "The DWARF format packaging tool to use. Required by debug builds that"
- , "enable debug fission."
- ]
- , "SYSTEM_TOOLS":
- [ "List of tools (\"CC\", \"CXX\", \"AR\", or \"DWP\") that should be"
- , "taken from the system instead of from \"toolchain\" (if specified)."
- ]
- , "CFLAGS":
- [ "Flags for C compilation. Specifying this field overwrites"
- , "values from \"base\"."
- ]
- , "CXXFLAGS":
- [ "Flags for C++ compilation. Specifying this field overwrites"
- , "values from \"base\"."
- ]
- , "LDFLAGS":
- [ "Linker flags for linking the final CC library. Specifying this field"
- , "overwrites values from \"base\"."
- ]
- , "ARFLAGS":
- [ "Arguments to tell the archiver to create an archive with the specified"
- , "object files. If the \"ARFLAGS\" specified in the defaults target are"
- , "empty, the rules will use [\"cqs\"]."
- ]
- , "DEBUGFLAGS":
- [ "Flags to be used for the debug-stage for both C and C++, instead of"
- , "the resulting CFLAGS and CXXFLAGS, respectively."
- , "Specifying this field overwrites values from \"base\"."
- ]
- , "ADD_COMPILE_FLAGS":
- [ "Additional compilation flags for C and C++. Specifying this field"
- , "extends values from \"base\" for both, \"CFLAGS\" and \"CXXFLAGS\"."
- ]
- , "ADD_CFLAGS":
- [ "Additional compilation flags specific for C. Specifying this field"
- , "extends values from \"base\"."
- ]
- , "ADD_CXXFLAGS":
- [ "Additional compilation flags specific for C++. Specifying this field"
- , "extends values from \"base\"."
- ]
- , "ADD_LDFLAGS":
- [ "Additional linker flags for linking the final CC library. Specifying"
- , "this field extends values from \"base\"."
- ]
- , "ADD_DEBUGFLAGS":
- [ "Additional compilation flags for the debug-stage. Specifying this"
- , "field extends values from \"base\" for both, \"CFLAGS\" and"
- , "\"CXXFLAGS\"."
- ]
- , "PATH":
- [ "Path for looking up the compilers. Individual paths are joined"
- , "with \":\". Specifying this field extends values from \"base\"."
- ]
- , "include_scanner":
- [ "Specify an include scanner to be run before each compile action, which"
- , "removes unused headers from the include tree. The given target must"
- , "contain a single executable artifact, a script or binary. The tool"
- , "specified must accept as first argument the <out_dir> path and as"
- , "remaining arguments the argv of the preprocessor command (-E -M)."
- , "The input headers are located in the local directory \"include\" and"
- , "the scanner should copy all used headers to \"<out_dir>/include\"."
- , "Specifying this field overwrites values from \"base\"."
- ]
- }
- , "config_doc":
- { "ARCH":
- [ "The unqualified architecture. Is taken as a default for \"HOST_ARCH\""
- , "and \"TARGET_ARCH\" if not set."
- ]
- , "HOST_ARCH":
- ["The architecture on which the build actions are carried out."]
- , "TARGET_ARCH": ["The architecture for which to build."]
- , "DEBUG":
- [ "If logically true (typically, a non-empty map), use debug-related"
- , "options, otherwise not."
- ]
- }
- , "imports":
- { "base-provides": "defaults-base-provides"
- , "base-provides-++": "defaults-base-provides-++"
- , "base-provides-list": "defaults-base-provides-list"
- , "artifacts_list": ["./", "..", "field_artifacts_list"]
- , "artifacts": ["./", "..", "field_artifacts"]
- , "compile-deps": "compile-deps"
- , "compile-args-deps": "compile-args-deps"
- , "link-deps": "link-deps"
- , "link-args-deps": "link-args-deps"
- , "run-libs-deps": "run-libs-deps"
- , "run-libs-args-deps": "run-libs-args-deps"
- , "cflags-files-deps": "cflags-files-deps"
- , "ldflags-files-deps": "ldflags-files-deps"
- , "for host": ["transitions", "for host"]
- , "debug-deps": "debug-deps"
- }
- , "config_transitions":
- { "toolchain": [{"type": "CALL_EXPRESSION", "name": "for host"}]
- , "include_scanner": [{"type": "CALL_EXPRESSION", "name": "for host"}]
- }
- , "expression":
- { "type": "let*"
- , "bindings":
- [ ["CC", {"type": "FIELD", "name": "CC"}]
- , ["CXX", {"type": "FIELD", "name": "CXX"}]
- , ["CFLAGS", {"type": "FIELD", "name": "CFLAGS"}]
- , ["CXXFLAGS", {"type": "FIELD", "name": "CXXFLAGS"}]
- , ["LDFLAGS", {"type": "FIELD", "name": "LDFLAGS"}]
- , ["ARFLAGS", {"type": "FIELD", "name": "ARFLAGS"}]
- , ["DEBUGFLAGS", {"type": "FIELD", "name": "DEBUGFLAGS"}]
- , ["AR", {"type": "FIELD", "name": "AR"}]
- , ["DWP", {"type": "FIELD", "name": "DWP"}]
- , ["PATH", {"type": "FIELD", "name": "PATH"}]
- , ["provider", "CC"]
- , [ "CC"
- , { "type": "if"
- , "cond": {"type": "var", "name": "CC"}
- , "then": {"type": "var", "name": "CC"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"}
- }
- ]
- , ["provider", "CXX"]
- , [ "CXX"
- , { "type": "if"
- , "cond": {"type": "var", "name": "CXX"}
- , "then": {"type": "var", "name": "CXX"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"}
- }
- ]
- , ["provider", "CFLAGS"]
- , [ "CFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "CFLAGS"}
- , "then": {"type": "var", "name": "CFLAGS"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- }
- ]
- , ["provider", "CXXFLAGS"]
- , [ "CXXFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "CXXFLAGS"}
- , "then": {"type": "var", "name": "CXXFLAGS"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- }
- ]
- , ["provider", "LDFLAGS"]
- , [ "LDFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "LDFLAGS"}
- , "then": {"type": "var", "name": "LDFLAGS"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- }
- ]
- , ["provider", "ARFLAGS"]
- , [ "ARFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "ARFLAGS"}
- , "then": {"type": "var", "name": "ARFLAGS"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- }
- ]
- , ["provider", "DEBUGFLAGS"]
- , [ "DEBUGFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUGFLAGS"}
- , "then": {"type": "var", "name": "DEBUGFLAGS"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- }
- ]
- , ["provider", "AR"]
- , [ "AR"
- , { "type": "if"
- , "cond": {"type": "var", "name": "AR"}
- , "then": {"type": "var", "name": "AR"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"}
- }
- ]
- , ["provider", "DWP"]
- , [ "DWP"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DWP"}
- , "then": {"type": "var", "name": "DWP"}
- , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"}
- }
- ]
- , ["provider", "PATH"]
- , [ "PATH"
- , { "type": "nub_left"
- , "$1":
- { "type": "++"
- , "$1":
- [ {"type": "var", "name": "PATH"}
- , {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
- ]
- }
- }
- ]
- , ["provider", "ENV"]
- , ["default", {"type": "empty_map"}]
- , ["ENV", {"type": "CALL_EXPRESSION", "name": "base-provides"}]
- , ["provider", "INCLUDE_SCANNER"]
- , ["default", {"type": "empty_map"}]
- , [ "INCLUDE_SCANNER"
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "include_scanner"}
- , "then":
- { "type": "let*"
- , "bindings":
- [ ["fieldname", "include_scanner"]
- , ["transition", {"type": "CALL_EXPRESSION", "name": "for host"}]
- ]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- , "else":
- { "type": "disjoint_map_union"
- , "$1": {"type": "CALL_EXPRESSION", "name": "base-provides-list"}
- }
- }
- ]
- , ["provider", "NON_SYSTEM_TOOLS"]
- , ["default", {"type": "empty_map"}]
- , [ "NON_SYSTEM_TOOLS"
- , { "type": "map_union"
- , "$1":
- { "type": "++"
- , "$1":
- [ [{"type": "CALL_EXPRESSION", "name": "base-provides"}]
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "CC"}
- , "then":
- [ { "type": "singleton_map"
- , "key": "CC"
- , "value":
- { "type": "if"
- , "cond": {"type": "FIELD", "name": "toolchain"}
- , "then": true
- , "else": false
- }
- }
- ]
- }
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "CXX"}
- , "then":
- [ { "type": "singleton_map"
- , "key": "CXX"
- , "value":
- { "type": "if"
- , "cond": {"type": "FIELD", "name": "toolchain"}
- , "then": true
- , "else": false
- }
- }
- ]
- }
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "AR"}
- , "then":
- [ { "type": "singleton_map"
- , "key": "AR"
- , "value":
- { "type": "if"
- , "cond": {"type": "FIELD", "name": "toolchain"}
- , "then": true
- , "else": false
- }
- }
- ]
- }
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "DWP"}
- , "then":
- [ { "type": "singleton_map"
- , "key": "DWP"
- , "value":
- { "type": "if"
- , "cond": {"type": "FIELD", "name": "toolchain"}
- , "then": true
- , "else": false
- }
- }
- ]
- }
- , { "type": "foreach"
- , "range": {"type": "FIELD", "name": "SYSTEM_TOOLS"}
- , "var": "tool"
- , "body":
- { "type": "singleton_map"
- , "key": {"type": "var", "name": "tool"}
- , "value": false
- }
- }
- ]
- }
- }
- ]
- , ["provider", "TOOLCHAIN"]
- , ["default", {"type": "empty_map"}]
- , [ "TOOLCHAIN"
- , { "type": "disjoint_map_union"
- , "msg": "toolchain artifacts may not overlap"
- , "$1":
- { "type": "++"
- , "$1":
- [ {"type": "CALL_EXPRESSION", "name": "base-provides-list"}
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "toolchain"}
- , "then":
- { "type": "let*"
- , "bindings":
- [ ["fieldname", "toolchain"]
- , [ "transition"
- , {"type": "CALL_EXPRESSION", "name": "for host"}
- ]
- ]
- , "body":
- {"type": "CALL_EXPRESSION", "name": "artifacts_list"}
- }
- }
- ]
- }
- }
- ]
- , [ "CFLAGS"
- , { "type": "++"
- , "$1":
- [ {"type": "var", "name": "CFLAGS"}
- , {"type": "FIELD", "name": "ADD_COMPILE_FLAGS"}
- , {"type": "FIELD", "name": "ADD_CFLAGS"}
- ]
- }
- ]
- , [ "CXXFLAGS"
- , { "type": "++"
- , "$1":
- [ {"type": "var", "name": "CXXFLAGS"}
- , {"type": "FIELD", "name": "ADD_COMPILE_FLAGS"}
- , {"type": "FIELD", "name": "ADD_CXXFLAGS"}
- ]
- }
- ]
- , [ "LDFLAGS"
- , { "type": "++"
- , "$1":
- [ {"type": "var", "name": "LDFLAGS"}
- , {"type": "FIELD", "name": "ADD_LDFLAGS"}
- ]
- }
- ]
- , [ "CFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then":
- { "type": "++"
- , "$1":
- [ { "type": "if"
- , "cond": {"type": "var", "name": "DEBUGFLAGS"}
- , "then": {"type": "var", "name": "DEBUGFLAGS"}
- , "else": {"type": "var", "name": "CFLAGS"}
- }
- , {"type": "FIELD", "name": "ADD_DEBUGFLAGS"}
- ]
- }
- , "else": {"type": "var", "name": "CFLAGS"}
- }
- ]
- , [ "CXXFLAGS"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then":
- { "type": "++"
- , "$1":
- [ { "type": "if"
- , "cond": {"type": "var", "name": "DEBUGFLAGS"}
- , "then": {"type": "var", "name": "DEBUGFLAGS"}
- , "else": {"type": "var", "name": "CXXFLAGS"}
- }
- , {"type": "FIELD", "name": "ADD_DEBUGFLAGS"}
- ]
- }
- , "else": {"type": "var", "name": "CXXFLAGS"}
- }
- ]
- , ["deps-fieldnames", ["base", "deps"]]
- , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}]
- , [ "compile-args"
- , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"}
- ]
- , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}]
- , ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}]
- , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}]
- , [ "run-libs-args"
- , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"}
- ]
- , [ "cflags-files"
- , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
- ]
- , [ "ldflags-files"
- , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
- ]
- , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}]
- , [ "debug-srcs"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then":
- { "type": "let*"
- , "bindings": [["deps-provider", "debug-srcs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"}
- }
- , "else": {"type": "empty_map"}
- }
- ]
- , [ "debug-hdrs"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then":
- { "type": "map_union"
- , "$1":
- [ { "type": "let*"
- , "bindings": [["deps-provider", "debug-hdrs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "debug-deps"}
- }
- , {"type": "var", "name": "compile-deps"}
- ]
- }
- , "else": {"type": "empty_map"}
- }
- ]
- ]
- , "body":
- { "type": "RESULT"
- , "provides":
- { "type": "env"
- , "vars":
- [ "CC"
- , "CXX"
- , "CFLAGS"
- , "CXXFLAGS"
- , "LDFLAGS"
- , "AR"
- , "DWP"
- , "ARFLAGS"
- , "PATH"
- , "ENV"
- , "INCLUDE_SCANNER"
- , "TOOLCHAIN"
- , "NON_SYSTEM_TOOLS"
- , "compile-deps"
- , "compile-args"
- , "link-deps"
- , "link-args"
- , "run-libs"
- , "run-libs-args"
- , "package"
- , "debug-srcs"
- , "debug-hdrs"
- ]
- }
- }
- }
- }
-, "library":
- { "doc": ["A C++ library"]
- , "target_fields":
- [ "srcs"
- , "hdrs"
- , "private-hdrs"
- , "deps"
- , "private-deps"
- , "proto"
- , "private-proto"
- , "components"
- ]
- , "string_fields":
- [ "name"
- , "stage"
- , "pure C"
- , "defines"
- , "private-defines"
- , "cflags"
- , "private-cflags"
- , "ldflags"
- , "private-ldflags"
- , "soversion"
- , "pkg-name"
- ]
- , "config_fields": ["shared"]
- , "config_vars":
- [ "CC"
- , "CXX"
- , "CFLAGS"
- , "CXXFLAGS"
- , "LDFLAGS"
- , "ADD_CFLAGS"
- , "ADD_CXXFLAGS"
- , "ADD_LDFLAGS"
- , "AR"
- , "DWP"
- , "ENV"
- , "BUILD_POSITION_INDEPENDENT"
- , "BUILD_OBJECT_ONLY"
- , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING"
- , "DEBUG"
- , "LINT"
- ]
- , "implicit": {"defaults": ["defaults"]}
- , "field_doc":
- { "name":
- ["The name of the library (without leading \"lib\" or trailing \".a\")."]
- , "srcs": ["The source files of the library."]
- , "hdrs": ["Any public header files of the library."]
- , "private-hdrs":
- [ "Any header files that only need to be present when compiling the"
- , "source files, but are not needed for any consumer of the library."
- ]
- , "components":
- [ "Any other libraries that are considered part of this library;"
- , "all object files of those are included unconditionally into this"
- , "library."
- ]
- , "stage":
- [ "The logical location of all header and source files, as well as the"
- , "resulting library file. Individual directory components are joined"
- , "with \"/\"."
- ]
- , "pure C":
- [ "If non-empty, compile as C sources rather than C++ sources."
- , "In particular, CC is used to compile rather than CXX (or their"
- , "respective defaults)."
- ]
- , "defines":
- [ "List of defines set for this target and its consumers."
- , "Each list entry will be prepended by \"-D\"."
- ]
- , "private-defines":
- [ "List of defines set for source files local to this target."
- , "Each list entry will be prepended by \"-D\"."
- ]
- , "cflags":
- ["List of compile flags set for this target and its consumers."]
- , "private-cflags":
- ["List of compile flags set for source files local to this target."]
- , "ldflags":
- [ "Additional linker flags for linking external libraries for this"
- , "target and its consumers (not built by this tool, typically system"
- , "libraries)."
- ]
- , "private-ldflags":
- [ "Additional linker flags for linking external libraries (not built"
- , "by this tool, typically system libraries)."
- ]
- , "deps": ["Any other libraries this library depends upon."]
- , "private-deps":
- [ "Any other libraries this library depends upon but does not include"
- , "in its public headers."
- ]
- , "proto":
- [ "Any [\"proto\", \"library\"] this target depends upon directly."
- , "The creation of C++ bindings for this proto library as well as of"
- , "its dependencies will be taken care of (as anonymous targets, so no"
- , "duplicate work will be carried out, even if the same proto library"
- , "is used at various places)."
- ]
- , "private-proto":
- [ "Any [\"proto\", \"library\"] this target depends upon privately."
- , "The creation of C++ bindings for this proto library as well as of"
- , "its dependencies will be taken care of (as anonymous targets, so no"
- , "duplicate work will be carried out, even if the same proto library"
- , "is used at various places)."
- ]
- , "shared": ["If non-empty, produce a shared instead of a static library."]
- , "soversion":
- [ "The SOVERSION for shared libraries. Individual version components are"
- , "joined with \".\"."
- ]
- , "pkg-name":
- [ "Name to use for pkg-config files. If this field is empty, the field"
- , "\"name\" is used instead."
- ]
- , "defaults": ["The C/C++ toolchain to use"]
- }
- , "config_doc":
- { "CC":
- [ "The name of the C compiler to be used (when compiling pure C code)."
- , "If None, the respective value from [\"CC\", \"defaults\"] will be taken."
- ]
- , "CXX":
- [ "The name of the C++ compiler to be used."
- , "If None, the respective value from [\"CC\", \"defaults\"] will be taken."
- ]
- , "CFLAGS":
- [ "The flags for CC to be used instead of the default ones."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "CXXFLAGS":
- [ "The flags for CXX to be used instead of the default ones."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "LDFLAGS":
- [ "The linker flags to be used instead of the default ones."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "ADD_CFLAGS":
- [ "The flags to add to the default ones for CC."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "ADD_CXXFLAGS":
- [ "The flags to add to the default ones for CXX."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "ADD_LDFLAGS":
- [ "The linker flags to add to the default ones."
- , "For libraries that should be built in a non-standard way; usually"
- , "adapting the default target [\"CC\", \"defaults\"] is the better"
- , "choice."
- ]
- , "AR":
- [ "The archive tool to used for creating the library"
- , "If None, the respective value from [\"CC\", \"defaults\"] will be taken."
- ]
- , "DWP":
- [ "The DWARF format packaging tool to use in debug builds that enable"
- , "debug fission."
- , "If None, the respective value from [\"CC\", \"defaults\"] will be taken."
- ]
- , "ENV": ["The environment for any action generated."]
- , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."]
- , "DEBUG":
- [ "Either a logically false value to disable debugging, or a non-empty"
- , "map to enable debugging. If debugging is enabled, the following values"
- , "of the map are used."
- , ""
- , "The key \"USE_DEBUG_FISSION\" expects a flag which enables the debug"
- , "fission mode, but does not add any flags. Explicitly setting it to a"
- , "false value is needed to enable regular debug mode."
- , "The key \"FISSION_CONFIG\" expects a map configuring debug fission."
- , " - subkey \"USE_SPLIT_DWARF\" expects a flag that, if true, adds the"
- , "-gsplit-dwarf compile flag."
- , " - subkey \"DWARF_VERSION\" expects a string that adds the"
- , "-gdwarf-<value> compile flag."
- , " - subkey \"USE_GDB_INDEX\" expects a flag that, if true, adds the"
- , "-Wl,--gdb-index linker flag."
- , " - subkey \"USE_DEBUG_TYPES_SECTION\" expects a flag that, if true,"
- , "adds the -fdebug-types-section compile flag."
- , ""
- , "If no compile flags are otherwise configured, [\"-g\"] will be taken."
- ]
- , "BUILD_OBJECT_ONLY":
- [ "If true, produce an object library, resulting in object files"
- , "added to the linker line of all depending targets. If this"
- , "configuration is set, the \"shared\" option is ignored. This"
- , "variable is cleared for all dependencies."
- ]
- , "BUILD_OBJECT_ONLY_DROP_OBJECT_LINKING":
- [ "If true, do not include the objects in the provided \"link-args\"."
- , "This allows consuming libraries that pick on the objects themselves"
- , "to still forward the \"link-args\" of that library, and thus getting"
- , "correct linking instructions for the resulting library."
- ]
- , "LINT":
- [ "Also provide nodes describing compile actions and header files;"
- , "those can be used by lint rules (doing also the config transition)"
- , "for additional checks."
- ]
- }
- , "artifacts_doc":
- ["The actual library (libname.a) staged in the specified directory"]
- , "runfiles_doc": ["The public headers of this library"]
- , "provides_doc":
- { "compile-deps":
- [ "Map of artifacts specifying any additional files that, besides the runfiles,"
- , "have to be present in compile actions of targets depending on this library"
- ]
- , "link-deps":
- [ "Map of artifacts specifying any additional files that, besides the artifacts,"
- , "have to be present in a link actions of targets depending on this library"
- ]
- , "link-args":
- [ "List of strings that have to be added to the command line for linking actions"
- , "in targets depending on this library"
- ]
- , "debug-srcs": ["Map of all sources needed for debugging."]
- , "debug-hdrs": ["Map of all additional headers needed for debugging."]
- , "run-libs":
- [ "Map of artifacts specifying libraries that have to be present at"
- , "runtime (as well as during linking)."
- ]
- , "run-libs-args":
- [ "Additional arguments for linking that are related to the run-libs."
- , "Those are added on the linker command line after the regular link-args."
- ]
- , "package":
- [ "Information related to packaging the library. This provider is a map,"
- , "specifying \"name\" and \"version\" of the package, as well as"
- , "additional stages \"cflags-files\" and \"ldflags-files\" for files"
- , "with compile-flags or link-flags, respctively."
- ]
- }
- , "anonymous":
- { "proto-deps":
- { "target": "proto"
- , "provider": "proto"
- , "rule_map":
- { "library": ["./", "proto", "library"]
- , "service library": ["./", "proto", "service library"]
- }
- }
- , "private-proto-deps":
- { "target": "private-proto"
- , "provider": "proto"
- , "rule_map":
- { "library": ["./", "proto", "library"]
- , "service library": ["./", "proto", "service library"]
- }
- }
- }
- , "imports":
- { "artifacts": ["./", "..", "field_artifacts"]
- , "runfiles": ["./", "..", "field_runfiles"]
- , "static result": "lib result"
- , "shared result": "shared result"
- , "object result": "object result"
- , "fPIC transition": ["transitions", "with fPIC, not object-only"]
- , "component transition": ["transitions", "with fPIC, object-only"]
- }
- , "config_transitions":
- { "deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}]
- , "private-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}]
- , "proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}]
- , "private-proto-deps":
- [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}]
- , "defaults": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}]
- , "components":
- [{"type": "CALL_EXPRESSION", "name": "component transition"}]
- }
- , "expression":
- { "type": "let*"
- , "bindings":
- [ ["name", {"type": "join", "$1": {"type": "FIELD", "name": "name"}}]
- , [ "DEBUG"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then": {"type": "var", "name": "DEBUG"}
- , "else": {"type": "empty_map"}
- }
- ]
- , ["pure C", {"type": "FIELD", "name": "pure C"}]
- , [ "cflags"
- , { "type": "++"
- , "$1":
- [ {"type": "FIELD", "name": "cflags"}
- , { "type": "foreach"
- , "var": "def"
- , "range": {"type": "FIELD", "name": "defines"}
- , "body":
- {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]}
- }
- ]
- }
- ]
- , [ "private-cflags"
- , { "type": "++"
- , "$1":
- [ {"type": "FIELD", "name": "private-cflags"}
- , { "type": "foreach"
- , "var": "def"
- , "range": {"type": "FIELD", "name": "private-defines"}
- , "body":
- {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]}
- }
- ]
- }
- ]
- , [ "stage"
- , { "type": "join"
- , "separator": "/"
- , "$1": {"type": "FIELD", "name": "stage"}
- }
- ]
- , [ "srcs"
- , { "type": "to_subdir"
- , "subdir": {"type": "var", "name": "stage"}
- , "$1":
- { "type": "let*"
- , "bindings": [["fieldname", "srcs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- }
- ]
- , [ "hdrs"
- , { "type": "to_subdir"
- , "subdir": {"type": "var", "name": "stage"}
- , "$1":
- { "type": "let*"
- , "bindings": [["fieldname", "hdrs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- }
- ]
- , [ "component transition"
- , {"type": "CALL_EXPRESSION", "name": "component transition"}
- ]
- , [ "component hdrs"
- , { "type": "let*"
- , "bindings":
- [ ["fieldname", "components"]
- , ["transition", {"type": "var", "name": "component transition"}]
- ]
- , "body": {"type": "CALL_EXPRESSION", "name": "runfiles"}
- }
- ]
- , [ "hdrs"
- , { "type": "disjoint_map_union"
- , "msg": "Staging conflict between component and own header files"
- , "$1":
- [ {"type": "var", "name": "hdrs"}
- , {"type": "var", "name": "component hdrs"}
- ]
- }
- ]
- , [ "private-hdrs"
- , { "type": "to_subdir"
- , "subdir": {"type": "var", "name": "stage"}
- , "$1":
- { "type": "let*"
- , "bindings": [["fieldname", "private-hdrs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- }
- ]
- , ["ldflags", {"type": "FIELD", "name": "ldflags"}]
- , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}]
- , ["soversion", {"type": "FIELD", "name": "soversion"}]
- , [ "pkg-name"
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "pkg-name"}
- , "then":
- {"type": "join", "$1": {"type": "FIELD", "name": "pkg-name"}}
- , "else": {"type": "var", "name": "name"}
- }
- ]
- , [ "defaults-transition"
- , {"type": "CALL_EXPRESSION", "name": "fPIC transition"}
- ]
- , [ "deps-transition"
- , {"type": "CALL_EXPRESSION", "name": "fPIC transition"}
- ]
- , ["public-fieldnames", ["deps", "proto-deps", "defaults"]]
- , [ "private-fieldnames"
- , [ "deps"
- , "private-deps"
- , "proto-deps"
- , "private-proto-deps"
- , "defaults"
- , "components"
- ]
- ]
- , ["component-fieldnames", ["components"]]
- , [ "modified-transitions"
- , { "type": "singleton_map"
- , "key": "components"
- , "value": {"type": "var", "name": "component transition"}
- }
- ]
- , [ "shared"
- , { "type": "and"
- , "$1":
- [ {"type": "FIELD", "name": "shared"}
- , { "type": "not"
- , "$1": {"type": "var", "name": "BUILD_OBJECT_ONLY"}
- }
- ]
- }
- ]
- ]
- , "body":
- { "type": "cond"
- , "cond":
- [ [ {"type": "var", "name": "shared"}
- , {"type": "CALL_EXPRESSION", "name": "shared result"}
- ]
- , [ {"type": "var", "name": "BUILD_OBJECT_ONLY"}
- , {"type": "CALL_EXPRESSION", "name": "object result"}
- ]
- ]
- , "default": {"type": "CALL_EXPRESSION", "name": "static result"}
- }
- }
- }
-, "binary":
- { "doc": ["A binary written in C++"]
- , "target_fields": ["srcs", "private-hdrs", "private-deps", "private-proto"]
- , "string_fields":
- [ "name"
- , "stage"
- , "pure C"
- , "private-defines"
- , "private-cflags"
- , "private-ldflags"
- ]
- , "config_vars":
- [ "CC"
- , "CXX"
- , "CFLAGS"
- , "CXXFLAGS"
- , "LDFLAGS"
- , "ADD_CFLAGS"
- , "ADD_CXXFLAGS"
- , "ADD_LDFLAGS"
- , "DWP"
- , "ENV"
- , "BUILD_POSITION_INDEPENDENT"
- , "DEBUG"
- , "LINT"
- ]
- , "implicit": {"defaults": ["defaults"]}
- , "field_doc":
- { "name": ["The name of the binary"]
- , "srcs": ["The source files of the library."]
- , "private-hdrs":
- [ "Any header files that need to be present when compiling the"
- , "source files."
- ]
- , "stage":
- [ "The logical location of all header and source files, as well as the"
- , "resulting binary file. Individual directory components are joined"
- , "with \"/\"."
- ]
- , "pure C":
- [ "If non-empty, compile as C sources rather than C++ sources."
- , "In particular, CC is used to compile rather than CXX"
- ]
- , "private-defines":
- [ "List of defines set for source files local to this target."
- , "Each list entry will be prepended by \"-D\"."
- ]
- , "private-cflags":
- ["List of compile flags set for source files local to this target."]
- , "private-ldflags":
- ["Additional linker flags for linking external libraries."]
- , "private-deps": ["Any other libraries this binary depends upon."]
- , "private-proto":
- [ "Any [\"proto\", \"library\"] this target depends upon directly."
- , "The creation of C++ bindings for this proto library as well as of"
- , "is dependencies will be taken care of (as anonymous targets, so no"
- , "duplicate work will be carried out, even if the same proto library"
- , "is used at various places)."
- ]
- , "defaults": ["The C/C++ toolchain to use"]
- }
- , "config_doc":
- { "CC":
- ["The name of the C compiler to be used (when compiling pure C code)"]
- , "CXX": ["The name of the C++ compiler to be used."]
- , "CFLAGS":
- [ "The flags for CXX to be used instead of the default ones"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "CXXFLAGS":
- [ "The flags for CXX to be used instead of the default ones"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "LDFLAGS":
- [ "The linker flags do be used instead of the default ones"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "ADD_CFLAGS":
- [ "The flags to add to the default ones for CC"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "ADD_CXXFLAGS":
- [ "The flags to add to the default ones for CXX"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "ADD_LDFLAGS":
- [ "The linker flags to add to the default ones"
- , "taken from the [\"CC\", \"defaults\"] target"
- ]
- , "DWP":
- [ "The DWARF format packaging tool to use in debug builds that enable"
- , "debug fission."
- , "If None, the respective value from [\"CC\", \"defaults\"] will be taken."
- ]
- , "ENV": ["The environment for any action generated."]
- , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."]
- , "DEBUG":
- [ "Either a logically false value to disable debugging, or a non-empty"
- , "map to enable debugging. If debugging is enabled, the following values"
- , "of the map are used."
- , ""
- , "The key \"USE_DEBUG_FISSION\" expects a flag which enables the debug"
- , "fission mode, but does not add any flags. Explicitly setting it to a"
- , "false value is needed to enable regular debug mode."
- , "The key \"FISSION_CONFIG\" expects a map configuring debug fission."
- , " - subkey \"USE_SPLIT_DWARF\" expects a flag that, if true, adds the"
- , "-gsplit-dwarf compile flag."
- , " - subkey \"DWARF_VERSION\" expects a string that adds the"
- , "-gdwarf-<value> compile flag."
- , " - subkey \"USE_GDB_INDEX\" expects a flag that, if true, adds the"
- , "-Wl,--gdb-index linker flag."
- , " - subkey \"USE_DEBUG_TYPES_SECTION\" expects a flag that, if true,"
- , "adds the -fdebug-types-section compile flag."
- , ""
- , "If no compile flags are otherwise configured, [\"-g\"] will be taken."
- ]
- , "LINT":
- [ "Also provide nodes describing compile actions and header files;"
- , "those can be used by lint rules (doing also the config transition)"
- , "for additional checks."
- ]
- }
- , "artifacts_doc": ["The final binary, staged to the given directory"]
- , "runfiles_doc": ["None"]
- , "provides_doc":
- { "debug-srcs": ["Map of all sources needed for debugging."]
- , "debug-hdrs": ["Map of all additional headers needed for debugging."]
- }
- , "anonymous":
- { "private-proto-deps":
- { "target": "private-proto"
- , "provider": "proto"
- , "rule_map":
- { "library": ["./", "proto", "library"]
- , "service library": ["./", "proto", "service library"]
- }
- }
- }
- , "imports":
- {"artifacts": ["./", "..", "field_artifacts"], "bin result": "bin result"}
- , "expression":
- { "type": "let*"
- , "bindings":
- [ [ "name"
- , { "type": "assert_non_empty"
- , "msg": "A non-empty name has to be provided for binaries"
- , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}}
- }
- ]
- , [ "DEBUG"
- , { "type": "if"
- , "cond": {"type": "var", "name": "DEBUG"}
- , "then": {"type": "var", "name": "DEBUG"}
- , "else": {"type": "empty_map"}
- }
- ]
- , ["pure C", {"type": "FIELD", "name": "pure C"}]
- , [ "stage"
- , { "type": "join"
- , "separator": "/"
- , "$1": {"type": "FIELD", "name": "stage"}
- }
- ]
- , [ "srcs"
- , { "type": "to_subdir"
- , "subdir": {"type": "var", "name": "stage"}
- , "$1":
- { "type": "let*"
- , "bindings": [["fieldname", "srcs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- }
- ]
- , [ "private-hdrs"
- , { "type": "to_subdir"
- , "subdir": {"type": "var", "name": "stage"}
- , "$1":
- { "type": "let*"
- , "bindings": [["fieldname", "private-hdrs"]]
- , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
- }
- }
- ]
- , [ "private-cflags"
- , { "type": "++"
- , "$1":
- [ { "type": "foreach"
- , "var": "def"
- , "range": {"type": "FIELD", "name": "private-defines"}
- , "body":
- {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]}
- }
- , {"type": "FIELD", "name": "private-cflags"}
- ]
- }
- ]
- , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}]
- , [ "private-fieldnames"
- , ["private-deps", "private-proto-deps", "defaults"]
- ]
- ]
- , "body": {"type": "CALL_EXPRESSION", "name": "bin result"}
- }
- }
-, "install-with-deps":
- { "doc":
- [ "Install target's artifacts with transitive dependencies. Depending on"
- , "the target, artifacts and dependencies will be installed to"
- , "subdirectories \"bin\", \"include\", and \"lib\". For library targets,"
- , "a pkg-config file is generated and provided in \"lib/pkgconfig\"."
- , "In debug mode, depending on the target, additional artifacts needed for"
- , "local debugging are gathered and installed, depending on target, to"
- , "\"work\" and \"include\"."
- ]
- , "config_vars": ["PREFIX"]
- , "target_fields": ["targets"]
- , "string_fields": ["flat-libs", "prefix", "hdrs-only", "skip-debug-stage"]
- , "imports": {"install result": "install-with-deps result"}
- , "field_doc":
- { "targets": ["Targets to install artifacts from."]
- , "flat-libs":
- [ "Install libraries flat to the \"lib\" subdirectory. Be aware that"
- , "conflicts may occur if any of the (transitive) libraries happen to"
- , "have the same base name."
- ]
- , "prefix":
- [ "The prefix used for pkg-config files. The path will be made absolute"
- , "and individual directory components are joined with \"/\". If no"
- , "prefix is specified, the value from the config variable \"PREFIX\" is"
- , "taken, with the default value being \"/\"."
- ]
- , "hdrs-only": ["Only collect headers from deps (without subdirectory)."]
- , "skip-debug-stage":
- [ "If in debug mode, skip installing additional artifacts gathered if no"
- , "local debugging is needed, but debug targets are nonetheless desired."
- ]
- }
- , "config_doc":
- { "PREFIX":
- [ "The absolute path that is used as prefix inside generated pkg-config"
- , "files. The default value for this variable is \"/\". This variable"
- , "is ignored if the field \"prefix\" is set."
- ]
- }
- , "artifacts_doc":
- ["Installed artifacts in subdirectories (\"bin\"/\"include\"/\"lib\")."]
- , "expression":
- { "type": "let*"
- , "bindings":
- [ ["pc-install-dir", "lib/pkgconfig"]
- , ["targets", {"type": "FIELD", "name": "targets"}]
- , [ "prefix"
- , { "type": "if"
- , "cond": {"type": "FIELD", "name": "prefix"}
- , "then":
- { "type": "join"
- , "separator": "/"
- , "$1":
- {"type": "++", "$1": [[""], {"type": "FIELD", "name": "prefix"}]}
- }
- , "else": {"type": "var", "name": "PREFIX", "default": "/"}
- }
- ]
- , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}]
- , ["hdrs-only", {"type": "FIELD", "name": "hdrs-only"}]
- , ["skip-debug-stage", {"type": "FIELD", "name": "skip-debug-stage"}]
- ]
- , "body": {"type": "CALL_EXPRESSION", "name": "install result"}
- }
- }
-}