diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2022-12-02 15:33:03 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2022-12-09 13:13:21 +0100 |
commit | d0fd0957b485cb28e22557f3fab11075cd5a6b8b (patch) | |
tree | ccfcfa8e236a34481146f37270a6fe66710f2598 /CC/test | |
parent | 00103df6ff5d06c85d6c42f1b9d1f56f2325ad3a (diff) | |
download | rules-cc-d0fd0957b485cb28e22557f3fab11075cd5a6b8b.tar.gz |
rules: Refactoring and minor improvements
Compared to the previous commit, the action graphs for just
and its unit tests are unchanged.
- Git hash of action graph for ["",""]:
c6e75f17abd7ffaab6ff9bb725ad67ec0bf6c973
- Git hash of action graph for ["test/buildtool","TESTS"]:
8063dfb3dd7daa9ae01d95c177e14946f785c57e
Refactor:
- "local cflags" to "private-cflags"
- "local defines" to "private-defines"
- "link externals" to "private-ldflags"
- "deps" to "private-deps" for (test) binaries
- "proto" to "private-proto" for binaries
Improvements:
- consistent variable declaration order:
OS, ARCH, HOST_ARCH, TARGET_ARCH,
CC, CXX, CFLAGS, CXXFLAGS, ADD_CFLAGS, ADD_CXXFLAGS,
AR, ENV, PATH
- use fields close to their definition (in RULES)
- use common expression for binaries and test binaries
- split expression "flags" and "compiler"
... to separate ones for CC and CXX.
- rename "transition" to "deps-transition"
... to avoid conflicts with other transitions.
- support "defaults-transition" for CC expressions
Implement:
- "cflags" for libraries
- "private-cflags" for (test) binaries
- "private-defines" for test binaries
- "private-ldflags" for test binaries
- (public) "defines" for libraries
Diffstat (limited to 'CC/test')
-rw-r--r-- | CC/test/RULES | 181 |
1 files changed, 74 insertions, 107 deletions
diff --git a/CC/test/RULES b/CC/test/RULES index 0d7a9ba..b42b6c4 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -4,24 +4,28 @@ , "FIXME: the test binary and data must be built for host" ] , "tainted": ["test"] - , "target_fields": ["srcs", "private-hdrs", "deps", "data"] - , "string_fields": ["name", "stage"] + , "target_fields": ["srcs", "private-hdrs", "private-deps", "data"] + , "string_fields": + [ "name" + , "stage" + , "pure C" + , "private-defines" + , "private-cflags" + , "private-ldflags" + ] , "config_vars": - [ "CXX" - , "CC" - , "CXXFLAGS" + [ "CC" + , "CXX" , "CFLAGS" - , "ADD_CXXFLAGS" + , "CXXFLAGS" , "ADD_CFLAGS" + , "ADD_CXXFLAGS" , "ENV" , "TEST_ENV" , "CC_TEST_LAUNCHER" ] , "implicit": - { "defaults": [["./", "..", "defaults"]] - , "proto-deps": [] - , "runner": ["test_runner.sh"] - } + {"defaults": [["./", "..", "defaults"]], "runner": ["test_runner.sh"]} , "field_doc": { "name": [ "The name of the test" @@ -33,6 +37,16 @@ [ "Any additional header files that need to be present when compiling" , "the test binary." ] + , "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 (not built" + , "by this tool, typically system libraries)." + ] , "stage": [ "The logical location of all header and source files." , "Individual directory components are joined with \"/\"." @@ -40,25 +54,25 @@ , "data": ["Any files the test binary needs access to when running"] } , "config_doc": - { "CXX": ["The name of the C++ compiler to be used."] - , "CC": ["The name of the C compiler to be used."] - , "ENV": ["The environment for any action generated."] - , "CXXFLAGS": - [ "The flags for CXX to be used instead of the default ones" - , "taken from the [\"CC\", \"defaults\"] target" - ] + { "CC": ["The name of the C compiler to be used."] + , "CXX": ["The name of the C++ compiler to be used."] , "CFLAGS": [ "The flags for CC to be used instead of the default ones" , "taken from the [\"CC\", \"defaults\"] target" ] - , "ADD_CXXFLAGS": - [ "The flags to add to the default ones for CXX" + , "CXXFLAGS": + [ "The flags for CXX to 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" + ] + , "ENV": ["The environment for any action generated."] , "TEST_ENV": ["The environment for executing the test runner."] , "CC_TEST_LAUNCHER": [ "List of strings representing the launcher that is prepend to the" @@ -75,24 +89,30 @@ ] , "runfiles_doc": [ "A tree consisting of the artifacts staged at the name of the test." - , "As the built-in \"install\" rule only takes the runfiles of its \"deps\"" - , "argument, this gives an easy way of defining test suites." + , "As the built-in \"install\" rule only takes the runfiles of its" + , "\"private-deps\" argument, this gives an easy way of defining test" + , "suites." ] , "imports": { "artifacts": ["./", "../..", "field_artifacts"] , "runfiles_list": ["./", "../..", "field_runfiles_list"] , "compile-deps": ["./", "..", "compile-deps"] + , "compile-args-deps": ["./", "..", "compile-args-deps"] , "link-deps": ["./", "..", "link-deps"] , "link-args-deps": ["./", "..", "link-args-deps"] - , "objects": ["./", "..", "objects"] - , "default-CXX": ["./", "..", "default-CXX"] - , "default-CXXFLAGS": ["./", "..", "default-CXXFLAGS"] - , "default-ENV": ["./", "..", "default-ENV"] + , "binary": ["./", "..", "bin artifact"] } , "expression": { "type": "let*" , "bindings": - [ [ "stage" + [ [ "name" + , { "type": "assert_non_empty" + , "msg": "A non-empty name has to be provided for binaries" + , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}} + } + ] + , ["pure C", {"type": "FIELD", "name": "pure C"}] + , [ "stage" , { "type": "join" , "separator": "/" , "$1": {"type": "FIELD", "name": "stage"} @@ -108,7 +128,7 @@ } } ] - , [ "local hdrs" + , [ "private-hdrs" , { "type": "to_subdir" , "subdir": {"type": "var", "name": "stage"} , "$1": @@ -118,92 +138,32 @@ } } ] - , [ "CXX" - , { "type": "var" - , "name": "CXX" - , "default": {"type": "CALL_EXPRESSION", "name": "default-CXX"} - } - ] - , [ "CXXFLAGS" - , { "type": "var" - , "name": "CXXFLAGS" - , "default": {"type": "CALL_EXPRESSION", "name": "default-CXXFLAGS"} - } - ] - , [ "ENV" - , { "type": "map_union" + , ["deps-fieldnames", ["private-deps"]] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "++" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ { "type": "foreach" + , "var": "def" + , "range": {"type": "FIELD", "name": "private-defines"} + , "body": + {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]} + } + , {"type": "FIELD", "name": "private-cflags"} + , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + ] } ] - , ["deps-fieldnames", ["deps", "proto-deps"]] - , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] - , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] - , [ "base name" - , { "type": "assert_non_empty" - , "msg": "A non-empty name has to be provided" - , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}} - } - ] - , [ "binary name" - , { "type": "if" - , "cond": {"type": "var", "name": "stage"} - , "else": {"type": "var", "name": "base name"} - , "then": - { "type": "join" - , "separator": "/" - , "$1": - [ {"type": "var", "name": "stage"} - , {"type": "var", "name": "base name"} - ] - } - } - ] , [ "link-args" - , { "type": "nub_right" + , { "type": "++" , "$1": - { "type": "++" - , "$1": - [ {"type": "keys", "$1": {"type": "var", "name": "objects"}} - , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} - ] - } - } - ] - , [ "binary" - , { "type": "ACTION" - , "outs": [{"type": "var", "name": "binary name"}] - , "inputs": - { "type": "disjoint_map_union" - , "$1": - [ {"type": "var", "name": "objects"} - , {"type": "var", "name": "link-deps"} - ] - } - , "cmd": - { "type": "++" - , "$1": - [ [ {"type": "var", "name": "CXX"} - , "-o" - , {"type": "var", "name": "binary name"} - ] - , {"type": "var", "name": "CXXFLAGS"} - , {"type": "var", "name": "link-args"} - ] - } - , "env": {"type": "var", "name": "ENV"} + [ {"type": "CALL_EXPRESSION", "name": "link-args-deps"} + , {"type": "FIELD", "name": "private-ldflags"} + ] } ] + , ["binary", {"type": "CALL_EXPRESSION", "name": "binary"}] , [ "staged test binary" , { "type": "map_union" , "$1": @@ -256,6 +216,13 @@ } } ] + , [ "test-name" + , { "type": "join" + , "separator": "/" + , "$1": + [{"type": "var", "name": "stage"}, {"type": "var", "name": "name"}] + } + ] , [ "test-results" , { "type": "ACTION" , "outs": ["result", "stdout", "stderr", "time-start", "time-stop"] @@ -286,13 +253,13 @@ , "fail_message": { "type": "join" , "$1": - ["CC test ", {"type": "var", "name": "binary name"}, " failed"] + ["CC test ", {"type": "var", "name": "test-name"}, " failed"] } } ] , [ "runfiles" , { "type": "singleton_map" - , "key": {"type": "var", "name": "base name"} + , "key": {"type": "var", "name": "name"} , "value": {"type": "TREE", "$1": {"type": "var", "name": "test-results"}} } |