From 093a0c8fe2eaa9be7d8e539f3e35236c7df0449b Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 11 Jul 2023 14:23:22 +0200 Subject: Add new transtion "maybe for host" ... that transitions to host, unless the ARCH_DISPATCH map indicates that there is an execution-property transition allowing to run actions on the TARGET_ARCH. Also make the "target properties" available as expression as they will be needed when executing the action on the foreign architecture. --- transitions/EXPRESSIONS | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/transitions/EXPRESSIONS b/transitions/EXPRESSIONS index 8ea7550..4fd0d1e 100644 --- a/transitions/EXPRESSIONS +++ b/transitions/EXPRESSIONS @@ -10,4 +10,48 @@ } } } +, "target properties": + { "vars": ["ARCH", "TARGET_ARCH", "ARCH_DISPATCH"] + , "expression": + { "type": "let*" + , "bindings": + [ [ "TARGET_ARCH" + , { "type": "var" + , "name": "TARGET_ARCH" + , "default": {"type": "var", "name": "ARCH"} + } + ] + ] + , "body": + { "type": "if" + , "cond": + { "type": "==" + , "$1": {"type": "var", "name": "TARGET_ARCH"} + , "$2": null + } + , "then": {"type": "empty_map"} + , "else": + { "type": "lookup" + , "map": + { "type": "var" + , "name": "ARCH_DISPATCH" + , "default": {"type": "empty_map"} + } + , "key": {"type": "var", "name": "TARGET_ARCH"} + , "default": {"type": "empty_map"} + } + } + } + } +, "maybe for host": + { "vars": ["ARCH", "HOST_ARCH", "TARGET_ARCH", "ARCH_DISPATCH"] + , "imports": + {"target properties": "target properties", "for host": "for host"} + , "expression": + { "type": "if" + , "cond": {"type": "CALL_EXPRESSION", "name": "target properties"} + , "then": {"type": "empty_map"} + , "else": {"type": "CALL_EXPRESSION", "name": "for host"} + } + } } -- cgit v1.2.3 From aa14a481ce7645f6fb78ce7548a1f60920599d49 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 11 Jul 2023 16:23:06 +0200 Subject: ["CC/test", "test]: support target architecture ... provided it is specified on how to obtain a remote-execution endpoint for the given architecture; in this case, the test binary will be cross compiled for and run on that architecture. The actual building (as well as summarizing multiple test runs) happens on the default execution end point. --- CC/test/EXPRESSIONS | 10 ++++++++++ CC/test/RULES | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CC/test/EXPRESSIONS b/CC/test/EXPRESSIONS index 678ab56..4207f8e 100644 --- a/CC/test/EXPRESSIONS +++ b/CC/test/EXPRESSIONS @@ -8,6 +8,8 @@ , "vars": [ "ARCH" , "HOST_ARCH" + , "TARGET_ARCH" + , "ARCH_DISPATCH" , "CC" , "CXX" , "CFLAGS" @@ -46,6 +48,7 @@ , "ldflags-files-deps": ["./", "..", "ldflags-files-deps"] , "binary": ["./", "..", "bin artifact"] , "host transition": ["transitions", "for host"] + , "target properties": ["transitions", "target properties"] , "stage": ["./", "../..", "stage_singleton_field"] } , "expression": @@ -147,6 +150,9 @@ ] } ] + , [ "target properties" + , {"type": "CALL_EXPRESSION", "name": "target properties"} + ] ] , "body": { "type": "if" @@ -171,6 +177,8 @@ , "$1": ["CC test ", {"type": "var", "name": "test-name"}, " failed"] } + , "execution properties": + {"type": "var", "name": "target properties"} } ] , [ "runfiles" @@ -244,6 +252,8 @@ , ")" ] } + , "execution properties": + {"type": "var", "name": "target properties"} } } } diff --git a/CC/test/RULES b/CC/test/RULES index 350d585..8dba363 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -14,6 +14,7 @@ , "config_vars": [ "ARCH" , "HOST_ARCH" + , "TARGET_ARCH" , "CC" , "CXX" , "CFLAGS" @@ -24,6 +25,7 @@ , "TEST_ENV" , "CC_TEST_LAUNCHER" , "RUNS_PER_TEST" + , "ARCH_DISPATCH" ] , "implicit": { "defaults": [["./", "..", "defaults"]] @@ -87,6 +89,19 @@ [ "The number of times the test should be run in order to detect flakyness." , "If set, no test action will be taken from cache." ] + , "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." + ] } , "artifacts_doc": [ "result: the result of this test (\"PASS\" or \"FAIL\"); useful for" @@ -105,7 +120,7 @@ , "imports": { "artifacts": ["./", "../..", "field_artifacts"] , "runfiles": ["./", "../..", "field_runfiles"] - , "host transition": ["transitions", "for host"] + , "host transition": ["transitions", "maybe for host"] , "stage": ["./", "../..", "stage_singleton_field"] , "run_test": "run_test" } @@ -113,6 +128,7 @@ { "defaults": [{"type": "CALL_EXPRESSION", "name": "host transition"}] , "private-deps": [{"type": "CALL_EXPRESSION", "name": "host transition"}] , "data": [{"type": "CALL_EXPRESSION", "name": "host transition"}] + , "runner": [{"type": "CALL_EXPRESSION", "name": "host transition"}] } , "expression": { "type": "let*" @@ -170,6 +186,7 @@ , "$1": { "type": "DEP_ARTIFACTS" , "dep": {"type": "var", "name": "runner"} + , "transition": {"type": "var", "name": "host-trans"} } } , "body": -- cgit v1.2.3