diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-02-17 13:37:25 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-05-30 15:33:18 +0200 |
commit | 25cc5a5d9e225e8a1b8d1a7221eb1968b28d928d (patch) | |
tree | 00c1d4291cd25efd5dadce2cfe033e399bbf6143 | |
parent | c17dea46b8cb0fe3fcef3ee97a3b703b70bb4f98 (diff) | |
download | rules-cc-25cc5a5d9e225e8a1b8d1a7221eb1968b28d928d.tar.gz |
rules-cc: Support for external toolchains
-rw-r--r-- | CC/EXPRESSIONS | 230 | ||||
-rw-r--r-- | CC/RULES | 175 | ||||
-rw-r--r-- | CC/auto/RULES | 37 | ||||
-rw-r--r-- | CC/foreign/cmake/EXPRESSIONS | 37 | ||||
-rw-r--r-- | CC/foreign/make/EXPRESSIONS | 37 | ||||
-rw-r--r-- | CC/test/RULES | 2 |
6 files changed, 452 insertions, 66 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 994dbf4..d3cc367 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -2,54 +2,45 @@ { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": - { "type": "join" - , "$1": - { "type": "let*" - , "bindings": - [ ["fieldname", "defaults"] - , ["provider", "CC"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CC"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} ] - , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} - } + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-CXX": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": - { "type": "join" - , "$1": - { "type": "let*" - , "bindings": - [ ["fieldname", "defaults"] - , ["provider", "CXX"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "CXX"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} ] - , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} - } + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-AR": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": - { "type": "join" - , "$1": - { "type": "let*" - , "bindings": - [ ["fieldname", "defaults"] - , ["provider", "AR"] - , [ "transition" - , {"type": "var", "name": "defaults-transition", "default": null} - ] + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "AR"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} ] - , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} - } + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-CFLAGS": @@ -113,11 +104,51 @@ , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } +, "default-TOOLCHAIN": + { "vars": ["defaults-transition"] + , "imports": {"map_provider": ["./", "..", "field_map_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "TOOLCHAIN"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "default-NON_SYSTEM_TOOLS": + { "vars": ["defaults-transition"] + , "expression": + { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": {"type": "FIELD", "name": "defaults"} + , "body": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "x"} + , "provider": "NON_SYSTEM_TOOLS" + , "transition": + { "type": "var" + , "name": "defaults-transition" + , "default": {"type": "empty_map"} + } + , "default": {"type": "empty_map"} + } + } + } + } , "defaults-base-provides": { "doc": ["Query list-provider from 'base' targets (last wins)"] , "vars": ["provider", "default"] , "vars_doc": - {"provider": ["The name of the list-provider in the provides map."]} + { "provider": ["The name of the list-provider in the provides map."] + , "default": ["The default if provider is missing (default: [])."] + } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "let*" @@ -586,6 +617,7 @@ [ "COMPILER" , "COMPILE_FLAGS" , "ENV" + , "TOOLCHAIN" , "srcs" , "hdrs" , "private-hdrs" @@ -648,6 +680,10 @@ , "name": "cflags-files" , "default": {"type": "empty_map"} } + , { "type": "var" + , "name": "TOOLCHAIN" + , "default": {"type": "empty_map"} + } ] } ] @@ -706,25 +742,64 @@ } } , "compiler-cc": - { "vars": ["CC", "defaults-transition"] + { "vars": ["CC", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "defaults-transition"] , "imports": {"default-CC": "default-CC"} , "expression": { "type": "var" , "name": "CC" - , "default": {"type": "CALL_EXPRESSION", "name": "default-CC"} + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "CC" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-CC"} + ] + } + } } } , "compiler-cxx": - { "vars": ["CXX", "defaults-transition"] + { "vars": ["CXX", "TOOLCHAIN_DIR", "NON_SYSTEM_TOOLS", "defaults-transition"] , "imports": {"default-CXX": "default-CXX"} , "expression": { "type": "var" , "name": "CXX" - , "default": {"type": "CALL_EXPRESSION", "name": "default-CXX"} + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "CXX" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-CXX"} + ] + } + } } } , "compiler": - { "vars": ["CC", "CXX", "pure C", "defaults-transition"] + { "vars": + [ "CC" + , "CXX" + , "pure C" + , "TOOLCHAIN_DIR" + , "NON_SYSTEM_TOOLS" + , "defaults-transition" + ] , "imports": {"compiler-cc": "compiler-cc", "compiler-cxx": "compiler-cxx"} , "expression": { "type": "if" @@ -825,11 +900,24 @@ , "objects": "objects" , "default-AR": "default-AR" , "default-ENV": "default-ENV" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" } , "expression": { "type": "let*" , "bindings": - [ ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] + [ ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] + , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] , [ "COMPILE_FLAGS" , { "type": "++" , "$1": @@ -841,7 +929,24 @@ , [ "AR" , { "type": "var" , "name": "AR" - , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"} + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "AR" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": + ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-AR"} + ] + } + } } ] , [ "ENV" @@ -890,7 +995,13 @@ , "then": { "type": "ACTION" , "outs": [{"type": "var", "name": "libpath"}] - , "inputs": {"type": "var", "name": "objects"} + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "objects"} + ] + } , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} , "cmd": @@ -1075,11 +1186,24 @@ , "objects": "objects" , "default-LDFLAGS": "default-LDFLAGS" , "default-ENV": "default-ENV" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" } , "expression": { "type": "let*" , "bindings": [ ["BUILD_POSITION_INDEPENDENT", true] + , ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] , [ "COMPILE_FLAGS" , { "type": "++" @@ -1148,7 +1272,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "var", "name": "objects"} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} , {"type": "var", "name": "run-libs"} , { "type": "var" @@ -1213,6 +1338,7 @@ , "soversion" , "pkg-name" , "extra-provides" + , "defaults-transition" , "deps-transition" , "public-fieldnames" , "private-fieldnames" @@ -1392,11 +1518,24 @@ , "objects": "objects" , "default-ENV": "default-ENV" , "default-LDFLAGS": "default-LDFLAGS" + , "default-TOOLCHAIN": "default-TOOLCHAIN" + , "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS" } , "expression": { "type": "let*" , "bindings": - [ ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] + [ ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] + , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] , [ "COMPILE_FLAGS" , { "type": "++" , "$1": @@ -1458,7 +1597,8 @@ , "inputs": { "type": "disjoint_map_union" , "$1": - [ {"type": "var", "name": "objects"} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} , {"type": "var", "name": "run-libs"} , { "type": "var" @@ -6,7 +6,7 @@ , "use of this rule. As targets form a different root, the defaults" , "can be provided without changing this directory." ] - , "target_fields": ["base"] + , "target_fields": ["base", "toolchain", "deps"] , "string_fields": [ "CC" , "CXX" @@ -18,12 +18,28 @@ , "ADD_LDFLAGS" , "AR" , "PATH" + , "SYSTEM_TOOLS" ] , "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 overlays artifacts from \"base\"." + ] + , "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"] + , "SYSTEM_TOOLS": + [ "List of tools (\"CC\", \"CXX\", or \"AR\") 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\"." @@ -53,7 +69,22 @@ , "with \":\"." ] } - , "imports": {"base-provides": "defaults-base-provides"} + , "config_vars": ["ARCH", "HOST_ARCH"] + , "imports": + { "base-provides": "defaults-base-provides" + , "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"] + } + , "config_transitions": + {"toolchain": [{"type": "CALL_EXPRESSION", "name": "for host"}]} , "expression": { "type": "let*" , "bindings": @@ -129,6 +160,92 @@ , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] + , ["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": "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": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "base-provides"} + , { "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"} + } + , "else": {"type": "empty_map"} + } + ] + } + ] , [ "CFLAGS" , { "type": "++" , "$1": @@ -153,12 +270,47 @@ ] } ] + , ["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"]}] ] , "body": { "type": "RESULT" , "provides": { "type": "env" - , "vars": ["CC", "CXX", "CFLAGS", "CXXFLAGS", "LDFLAGS", "AR", "ENV"] + , "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "AR" + , "ENV" + , "TOOLCHAIN" + , "NON_SYSTEM_TOOLS" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + , "package" + ] } } } @@ -370,6 +522,7 @@ , "proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] , "private-proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + , "defaults": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] } , "expression": { "type": "let*" @@ -449,12 +602,20 @@ , "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"]] + , ["public-fieldnames", ["deps", "proto-deps", "defaults"]] , [ "private-fieldnames" - , ["deps", "private-deps", "proto-deps", "private-proto-deps"] + , [ "deps" + , "private-deps" + , "proto-deps" + , "private-proto-deps" + , "defaults" + ] ] ] , "body": @@ -617,7 +778,9 @@ } ] , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}] - , ["private-fieldnames", ["private-deps", "private-proto-deps"]] + , [ "private-fieldnames" + , ["private-deps", "private-proto-deps", "defaults"] + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "bin result"} } diff --git a/CC/auto/RULES b/CC/auto/RULES index fb75a64..247ee01 100644 --- a/CC/auto/RULES +++ b/CC/auto/RULES @@ -156,6 +156,8 @@ , "flags-cc": ["./", "..", "flags-cc"] , "flags-cxx": ["./", "..", "flags-cxx"] , "default-ENV": ["./", "..", "default-ENV"] + , "default-TOOLCHAIN": ["./", "..", "default-TOOLCHAIN"] + , "default-NON_SYSTEM_TOOLS": ["./", "..", "default-NON_SYSTEM_TOOLS"] } , "implicit": {"defaults": [["./", "..", "defaults"]]} , "expression": @@ -197,6 +199,17 @@ } } ] + , ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] , ["CC", {"type": "CALL_EXPRESSION", "name": "compiler-cc"}] , ["CXX", {"type": "CALL_EXPRESSION", "name": "compiler-cxx"}] , ["CFLAGS", {"type": "CALL_EXPRESSION", "name": "flags-cc"}] @@ -522,7 +535,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["file_check.sh", "c.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["file_check.sh", "c.flags"]} , {"type": "var", "name": "includes"} ] } @@ -565,7 +579,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["file_check.sh", "cxx.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["file_check.sh", "cxx.flags"]} , {"type": "var", "name": "includes"} ] } @@ -608,7 +623,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["type_check.sh", "c.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["type_check.sh", "c.flags"]} , {"type": "var", "name": "includes"} ] } @@ -651,7 +667,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["type_check.sh", "cxx.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["type_check.sh", "cxx.flags"]} , {"type": "var", "name": "includes"} ] } @@ -696,7 +713,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["symbol_check.sh", "c.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["symbol_check.sh", "c.flags"]} , {"type": "var", "name": "includes"} ] } @@ -746,7 +764,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["symbol_check.sh", "cxx.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["symbol_check.sh", "cxx.flags"]} , {"type": "var", "name": "includes"} ] } @@ -796,7 +815,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["size_check.sh", "c.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["size_check.sh", "c.flags"]} , {"type": "var", "name": "includes"} ] } @@ -853,7 +873,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "env", "vars": ["size_check.sh", "cxx.flags"]} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "env", "vars": ["size_check.sh", "cxx.flags"]} , {"type": "var", "name": "includes"} ] } diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS index e1f019b..be345c2 100644 --- a/CC/foreign/cmake/EXPRESSIONS +++ b/CC/foreign/cmake/EXPRESSIONS @@ -27,11 +27,24 @@ , "default-LDFLAGS": ["CC", "default-LDFLAGS"] , "default-AR": ["CC", "default-AR"] , "default-ENV": ["CC", "default-ENV"] + , "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"] + , "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"] } , "expression": { "type": "let*" , "bindings": - [ [ "CMAKE_FLAGS" + [ ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] + , [ "CMAKE_FLAGS" , { "type": "++" , "$1": [ { "type": "foreach" @@ -95,7 +108,24 @@ , [ "AR" , { "type": "var" , "name": "AR" - , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"} + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "AR" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": + ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-AR"} + ] + } + } } ] , [ "CMAKE_JOBS" @@ -184,7 +214,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "var", "name": "source_dir"} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "source_dir"} , {"type": "var", "name": "script"} ] } diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index 85179a9..3f04bbd 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -37,11 +37,24 @@ , "default-LDFLAGS": ["CC", "default-LDFLAGS"] , "default-AR": ["CC", "default-AR"] , "default-ENV": ["CC", "default-ENV"] + , "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"] + , "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"] } , "expression": { "type": "let*" , "bindings": - [ ["CC", {"type": "CALL_EXPRESSION", "name": "compiler-cc"}] + [ ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + ] + , [ "NON_SYSTEM_TOOLS" + , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} + ] + , ["CC", {"type": "CALL_EXPRESSION", "name": "compiler-cc"}] , ["CXX", {"type": "CALL_EXPRESSION", "name": "compiler-cxx"}] , [ "CFLAGS" , { "type": "join" @@ -74,7 +87,24 @@ , [ "AR" , { "type": "var" , "name": "AR" - , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"} + , "default": + { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": + { "type": "lookup" + , "key": "AR" + , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} + } + , "then": + ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-AR"} + ] + } + } } ] , [ "ENV" @@ -227,7 +257,8 @@ , "inputs": { "type": "map_union" , "$1": - [ {"type": "var", "name": "source_dir"} + [ {"type": "var", "name": "TOOLCHAIN"} + , {"type": "var", "name": "source_dir"} , {"type": "var", "name": "script"} ] } diff --git a/CC/test/RULES b/CC/test/RULES index f9032b3..8a985be 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -165,7 +165,7 @@ , ["host-trans", {"type": "CALL_EXPRESSION", "name": "host transition"}] , ["defaults-transition", {"type": "var", "name": "host-trans"}] , ["deps-transition", {"type": "var", "name": "host-trans"}] - , ["deps-fieldnames", ["private-deps"]] + , ["deps-fieldnames", ["private-deps", "defaults"]] , [ "runner" , { "type": "map_union" , "$1": |