summaryrefslogtreecommitdiff
path: root/rules/CC/test/RULES
diff options
context:
space:
mode:
Diffstat (limited to 'rules/CC/test/RULES')
-rw-r--r--rules/CC/test/RULES287
1 files changed, 287 insertions, 0 deletions
diff --git a/rules/CC/test/RULES b/rules/CC/test/RULES
new file mode 100644
index 0000000..3401974
--- /dev/null
+++ b/rules/CC/test/RULES
@@ -0,0 +1,287 @@
+{ "test":
+ { "doc": ["A test written in C++"]
+ , "tainted": ["test"]
+ , "target_fields": ["srcs", "private-hdrs", "private-deps", "data"]
+ , "string_fields":
+ [ "name"
+ , "args"
+ , "stage"
+ , "pure C"
+ , "private-defines"
+ , "private-cflags"
+ , "private-ldflags"
+ ]
+ , "config_vars":
+ [ "ARCH"
+ , "HOST_ARCH"
+ , "TARGET_ARCH"
+ , "CC"
+ , "CXX"
+ , "CFLAGS"
+ , "CXXFLAGS"
+ , "LDFLAGS"
+ , "ADD_CFLAGS"
+ , "ADD_CXXFLAGS"
+ , "ADD_LDFLAGS"
+ , "ENV"
+ , "BUILD_POSITION_INDEPENDENT"
+ , "TEST_ENV"
+ , "TIMEOUT_SCALE"
+ , "CC_TEST_LAUNCHER"
+ , "RUNS_PER_TEST"
+ , "ARCH_DISPATCH"
+ , "TEST_SUMMARY_EXECUTION_PROPERTIES"
+ , "LINT"
+ ]
+ , "implicit":
+ { "defaults": [["./", "..", "defaults"]]
+ , "shell-defaults": [["./", "../../shell", "defaults"]]
+ , "runner": ["runner"]
+ , "summarizer": [["./", "../../shell/test", "summarizer"]]
+ }
+ , "field_doc":
+ { "name":
+ [ "The name of the test"
+ , ""
+ , "Used to name the test binary as well as for staging the test result"
+ ]
+ , "args": ["Command line arguments for the test binary"]
+ , "srcs":
+ [ "The sources of the test binary"
+ , ""
+ , "The resulting test binary is run in an environment where it can assume"
+ , "that the environment variable TEST_TMPDIR points to a"
+ , "directory that may be used exclusively by this test."
+ , "For convenience, the environment variable TMPDIR is also set to TEST_TMPDIR."
+ , ""
+ , "This running of the test is carried out by the implicit dependency"
+ , "on the target \"runner\". By setting this target in the target layer"
+ , "of this rules repository (instead of letting it default to the"
+ , "respective file), the C/C++ test environment can be modified globally."
+ ]
+ , "private-hdrs":
+ [ "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 \"/\"."
+ ]
+ , "data": ["Any files the test binary needs access to when running"]
+ , "defaults": ["The C/C++ toolchain to use"]
+ , "shell-defaults":
+ ["The shell toolchain to use PATH from for calling the summary action"]
+ , "runner":
+ [ "The test runner which starts the actual test binary after providing"
+ , "the respective environment. The runner also takes care of capturing"
+ , "stdout/stderr and timing information."
+ ]
+ , "summarizer":
+ [ "Tool to aggregate the results of individual test runs (for flakyness"
+ , "detection) to an overall test result. If more fields than the result"
+ , "itself is needed, those can be specified using the \"summarizer\" rule."
+ ]
+ }
+ , "config_doc":
+ { "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"
+ ]
+ , "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"
+ ]
+ , "ENV": ["The environment for any action generated."]
+ , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."]
+ , "TEST_ENV": ["The environment for executing the test runner."]
+ , "TIMEOUT_SCALE":
+ ["Factor on how to scale the timeout for this test. Defaults to 1.0."]
+ , "CC_TEST_LAUNCHER":
+ [ "List of strings representing the launcher that is prepend to the"
+ , "command line for running the test binary."
+ ]
+ , "RUNS_PER_TEST":
+ [ "The number of times the test should be run in order to detect flakyness."
+ , "If set, no test action will be taken from cache."
+ , ""
+ , "Test runs are summarized by the [\"shell/test\", \"summarizer\"] that"
+ , "is also used by shell tests."
+ ]
+ , "TARGET_ARCH":
+ [ "The architecture to build the test for."
+ , ""
+ , "Will only be honored, if that architecture is available in the"
+ , "ARCH_DISPATCH map. Otherwise, the test will be built for and run"
+ , "on the host architecture."
+ ]
+ , "ARCH_DISPATCH":
+ [ "Map of architectures to execution properties that ensure execution"
+ , "on that architecture. Only the actual test binary will be run with"
+ , "the specified execution properties (i.e., on the target architecture);"
+ , "all building will be done on the host architecture."
+ ]
+ , "TEST_SUMMARY_EXECUTION_PROPERTIES":
+ [ "Additional remote-execution properties for the test-summarizing action"
+ , "in case RUNS_PER_TEST is set; defaults to the empty map."
+ ]
+ , "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":
+ [ "result: the result of this test (\"PASS\" or \"FAIL\"); useful for"
+ , " generating test reports."
+ , "stdout/stderr: Any output the invocation of the test binary produced on"
+ , " the respective file descriptor"
+ , "time-start/time-stop: The time (decimally coded) in seconds since the"
+ , " epoch when the test invocation started and ended."
+ , "pwd: the directory in which the test was carried out"
+ ]
+ , "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"
+ , "\"private-deps\" argument, this gives an easy way of defining test"
+ , "suites."
+ ]
+ , "imports":
+ { "artifacts": ["./", "../..", "field_artifacts"]
+ , "runfiles": ["./", "../..", "field_runfiles"]
+ , "host transition": ["transitions", "maybe for host"]
+ , "stage": ["./", "../..", "stage_singleton_field"]
+ , "run_test": "run_test"
+ , "field_list": ["", "field_list_provider"]
+ }
+ , "config_transitions":
+ { "defaults": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , "private-deps": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , "private-hdrs": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , "srcs": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , "data": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , "runner": [{"type": "CALL_EXPRESSION", "name": "host transition"}]
+ }
+ , "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"}}
+ }
+ ]
+ , ["pure C", {"type": "FIELD", "name": "pure C"}]
+ , [ "stage"
+ , { "type": "join"
+ , "separator": "/"
+ , "$1": {"type": "FIELD", "name": "stage"}
+ }
+ ]
+ , ["host-trans", {"type": "CALL_EXPRESSION", "name": "host transition"}]
+ , [ "srcs"
+ , { "type": "to_subdir"
+ , "subdir": {"type": "var", "name": "stage"}
+ , "$1":
+ { "type": "let*"
+ , "bindings":
+ [ ["fieldname", "srcs"]
+ , ["transition", {"type": "var", "name": "host-trans"}]
+ ]
+ , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
+ }
+ }
+ ]
+ , [ "private-hdrs"
+ , { "type": "to_subdir"
+ , "subdir": {"type": "var", "name": "stage"}
+ , "$1":
+ { "type": "let*"
+ , "bindings":
+ [ ["fieldname", "private-hdrs"]
+ , ["transition", {"type": "var", "name": "host-trans"}]
+ ]
+ , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"}
+ }
+ }
+ ]
+ , ["defaults-transition", {"type": "var", "name": "host-trans"}]
+ , ["deps-transition", {"type": "var", "name": "host-trans"}]
+ , ["deps-fieldnames", ["private-deps", "defaults"]]
+ , [ "runner"
+ , { "type": "let*"
+ , "bindings":
+ [ ["fieldname", "runner"]
+ , ["location", "runner"]
+ , ["transition", {"type": "var", "name": "host-trans"}]
+ ]
+ , "body": {"type": "CALL_EXPRESSION", "name": "stage"}
+ }
+ ]
+ , ["test-args", {"type": "FIELD", "name": "args", "default": []}]
+ , [ "test-data"
+ , { "type": "let*"
+ , "bindings":
+ [ ["fieldname", "data"]
+ , ["transition", {"type": "var", "name": "deps-transition"}]
+ ]
+ , "body":
+ { "type": "map_union"
+ , "$1":
+ [ {"type": "CALL_EXPRESSION", "name": "runfiles"}
+ , {"type": "CALL_EXPRESSION", "name": "artifacts"}
+ ]
+ }
+ }
+ ]
+ , [ "summarizer"
+ , { "type": "let*"
+ , "bindings":
+ [["fieldname", "summarizer"], ["location", "summarizer"]]
+ , "body": {"type": "CALL_EXPRESSION", "name": "stage"}
+ }
+ ]
+ , [ "summary artifacts"
+ , { "type": "++"
+ , "$1":
+ [ ["result"]
+ , { "type": "let*"
+ , "bindings":
+ [["provider", "artifacts"], ["fieldname", "summarizer"]]
+ , "body": {"type": "CALL_EXPRESSION", "name": "field_list"}
+ }
+ ]
+ }
+ ]
+ ]
+ , "body": {"type": "CALL_EXPRESSION", "name": "run_test"}
+ }
+ }
+}