summaryrefslogtreecommitdiff
path: root/CC/test
diff options
context:
space:
mode:
Diffstat (limited to 'CC/test')
-rw-r--r--CC/test/RULES181
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"}}
}