From 30fdf0f3ebf0871bffd083939bcf446d7956b0ed Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 30 May 2023 14:54:36 +0200 Subject: rules: Drop needless conditional --- CC/proto/EXPRESSIONS | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/CC/proto/EXPRESSIONS b/CC/proto/EXPRESSIONS index 894b80b..6be74df 100644 --- a/CC/proto/EXPRESSIONS +++ b/CC/proto/EXPRESSIONS @@ -138,14 +138,9 @@ , ["TOOLCHAIN_DIR", "toolchain"] , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] , [ "TOOLCHAIN" - , { "type": "if" - , "cond": {"type": "var", "name": "TOOLCHAIN"} - , "then": - { "type": "to_subdir" - , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} - , "$1": {"type": "var", "name": "TOOLCHAIN"} - } - , "else": {"type": "empty_map"} + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} } ] , [ "NON_SYSTEM_TOOLS" -- cgit v1.2.3 From 6335a12ce47c38b88f0906c37c3004a23595c84e Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 16 May 2023 19:19:11 +0200 Subject: rules: Use field_map_provider for default-ENV --- CC/EXPRESSIONS | 30 ++++++++---------------------- CC/RULES | 1 + CC/auto/RULES | 13 +++---------- CC/pkgconfig/EXPRESSIONS | 13 +++---------- 4 files changed, 15 insertions(+), 42 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index c3541cd..fd90914 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -84,7 +84,7 @@ } , "default-ENV": { "vars": ["defaults-transition"] - , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "imports": {"map_provider": ["./", "..", "field_map_provider"]} , "expression": { "type": "let*" , "bindings": @@ -95,7 +95,7 @@ ] , ["default", {"type": "empty_map"}] ] - , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } , "defaults-base-provides": @@ -749,16 +749,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] @@ -982,16 +975,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , ["hdrs", {"type": "empty_map"}] diff --git a/CC/RULES b/CC/RULES index ff642b9..63be910 100644 --- a/CC/RULES +++ b/CC/RULES @@ -68,6 +68,7 @@ } ] , ["provider", "ENV"] + , ["default", {"type": "empty_map"}] , [ "ENV" , { "type": "if" , "cond": {"type": "var", "name": "PATH"} diff --git a/CC/auto/RULES b/CC/auto/RULES index e04289c..fb75a64 100644 --- a/CC/auto/RULES +++ b/CC/auto/RULES @@ -204,16 +204,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , [ "c.flags" diff --git a/CC/pkgconfig/EXPRESSIONS b/CC/pkgconfig/EXPRESSIONS index c770421..4c174c4 100644 --- a/CC/pkgconfig/EXPRESSIONS +++ b/CC/pkgconfig/EXPRESSIONS @@ -7,16 +7,9 @@ [ [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , [ "cflags-filename" -- cgit v1.2.3 From b73e2d32c426be5f95cc7960758db6ee28548d29 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 25 May 2023 16:39:46 +0200 Subject: rules: Move binary test_run to expression --- CC/test/EXPRESSIONS | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++ CC/test/RULES | 256 ++------------------------------------------- 2 files changed, 305 insertions(+), 247 deletions(-) create mode 100644 CC/test/EXPRESSIONS diff --git a/CC/test/EXPRESSIONS b/CC/test/EXPRESSIONS new file mode 100644 index 0000000..678ab56 --- /dev/null +++ b/CC/test/EXPRESSIONS @@ -0,0 +1,296 @@ +{ "run_test": + { "doc": + [ "Build and run a CC test binary using the provided runner." + , "" + , "Note that if variable RUNS_PER_TEST contains a non-false value, a" + , "summarizer must be provided." + ] + , "vars": + [ "ARCH" + , "HOST_ARCH" + , "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ENV" + , "TEST_ENV" + , "CC_TEST_LAUNCHER" + , "RUNS_PER_TEST" + , "name" + , "pure C" + , "stage" + , "srcs" + , "private-hdrs" + , "private-defines" + , "private-cflags" + , "private-ldflags" + , "defaults-transition" + , "deps-transition" + , "deps-fieldnames" + , "runner" + , "runner-data" + , "test-args" + , "test-data" + , "summarizer" + ] + , "imports": + { "artifacts": ["./", "../..", "field_artifacts"] + , "runfiles": ["./", "../..", "field_runfiles"] + , "compile-deps": ["./", "..", "compile-deps"] + , "compile-args-deps": ["./", "..", "compile-args-deps"] + , "link-deps": ["./", "..", "link-deps"] + , "link-args-deps": ["./", "..", "link-args-deps"] + , "cflags-files-deps": ["./", "..", "cflags-files-deps"] + , "ldflags-files-deps": ["./", "..", "ldflags-files-deps"] + , "binary": ["./", "..", "bin artifact"] + , "host transition": ["transitions", "for host"] + , "stage": ["./", "../..", "stage_singleton_field"] + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "++" + , "$1": + [ { "type": "foreach" + , "var": "def" + , "range": + {"type": "var", "name": "private-defines", "default": []} + , "body": + {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]} + } + , {"type": "var", "name": "private-cflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + ] + } + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] + , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] + , [ "link-args" + , { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "link-args-deps"} + , {"type": "var", "name": "private-ldflags", "default": []} + ] + } + ] + , ["binary", {"type": "CALL_EXPRESSION", "name": "binary"}] + , [ "staged test binary" + , { "type": "map_union" + , "$1": + { "type": "foreach_map" + , "range": {"type": "var", "name": "binary"} + , "var_val": "binary" + , "body": + { "type": "singleton_map" + , "key": "test" + , "value": {"type": "var", "name": "binary"} + } + } + } + ] + , [ "test-args" + , { "type": "singleton_map" + , "key": "test-args.json" + , "value": + { "type": "BLOB" + , "data": + { "type": "json_encode" + , "$1": {"type": "var", "name": "test-args", "default": []} + } + } + } + ] + , [ "test-launcher" + , { "type": "singleton_map" + , "key": "test-launcher.json" + , "value": + { "type": "BLOB" + , "data": + { "type": "json_encode" + , "$1": + {"type": "var", "name": "CC_TEST_LAUNCHER", "default": []} + } + } + } + ] + , [ "test-name" + , { "type": "join" + , "separator": "/" + , "$1": + [{"type": "var", "name": "stage"}, {"type": "var", "name": "name"}] + } + ] + , [ "test input" + , { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "test-data"} + } + , {"type": "var", "name": "runner"} + , { "type": "var" + , "name": "runner-data" + , "default": {"type": "empty_map"} + } + , {"type": "var", "name": "test-args"} + , {"type": "var", "name": "test-launcher"} + , {"type": "var", "name": "staged test binary"} + ] + } + ] + ] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "RUNS_PER_TEST"} + , "else": + { "type": "let*" + , "bindings": + [ [ "test-results" + , { "type": "ACTION" + , "outs": + ["result", "stdout", "stderr", "time-start", "time-stop"] + , "inputs": {"type": "var", "name": "test input"} + , "cmd": ["./runner"] + , "env": + { "type": "var" + , "name": "TEST_ENV" + , "default": {"type": "empty_map"} + } + , "may_fail": ["test"] + , "fail_message": + { "type": "join" + , "$1": + ["CC test ", {"type": "var", "name": "test-name"}, " failed"] + } + } + ] + , [ "runfiles" + , { "type": "singleton_map" + , "key": {"type": "var", "name": "name"} + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "test-results"}} + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "test-results"} + , "runfiles": {"type": "var", "name": "runfiles"} + } + } + , "then": + { "type": "let*" + , "bindings": + [ [ "attempts" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "ATTEMPT" + , "range": + { "type": "range" + , "$1": {"type": "var", "name": "RUNS_PER_TEST"} + } + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "ATTEMPT"} + , "value": + { "type": "TREE" + , "$1": + { "type": "ACTION" + , "outs": + [ "result" + , "stdout" + , "stderr" + , "time-start" + , "time-stop" + ] + , "inputs": + { "type": "map_union" + , "$1": + [ { "type": "singleton_map" + , "key": "ATTEMPT" + , "value": + { "type": "BLOB" + , "data": {"type": "var", "name": "ATTEMPT"} + } + } + , {"type": "var", "name": "test input"} + ] + } + , "cmd": ["./runner"] + , "env": + { "type": "var" + , "name": "TEST_ENV" + , "default": {"type": "empty_map"} + } + , "may_fail": ["test"] + , "no_cache": ["test"] + , "fail_message": + { "type": "join" + , "$1": + [ "CC test " + , {"type": "var", "name": "test-name"} + , " failed (Run" + , {"type": "var", "name": "ATTEMPT"} + , ")" + ] + } + } + } + } + } + } + ] + , [ "summary" + , { "type": "ACTION" + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "attempts"} + , {"type": "var", "name": "summarizer"} + ] + } + , "outs": + ["stdout", "stderr", "result", "time-start", "time-stop"] + , "cmd": ["./summarizer"] + } + ] + , [ "artifacts" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "summary"} + , { "type": "singleton_map" + , "key": "work" + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "attempts"}} + } + ] + } + ] + , [ "runfiles" + , { "type": "singleton_map" + , "key": {"type": "var", "name": "name"} + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "artifacts"}} + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "artifacts"} + , "runfiles": {"type": "var", "name": "runfiles"} + } + } + } + } + } +} diff --git a/CC/test/RULES b/CC/test/RULES index 7033dfc..755ed92 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -105,15 +105,9 @@ , "imports": { "artifacts": ["./", "../..", "field_artifacts"] , "runfiles": ["./", "../..", "field_runfiles"] - , "compile-deps": ["./", "..", "compile-deps"] - , "compile-args-deps": ["./", "..", "compile-args-deps"] - , "link-deps": ["./", "..", "link-deps"] - , "link-args-deps": ["./", "..", "link-args-deps"] - , "cflags-files-deps": ["./", "..", "cflags-files-deps"] - , "ldflags-files-deps": ["./", "..", "ldflags-files-deps"] - , "binary": ["./", "..", "bin artifact"] , "host transition": ["transitions", "for host"] , "stage": ["./", "../..", "stage_singleton_field"] + , "run_test": "run_test" } , "config_transitions": { "defaults": [{"type": "CALL_EXPRESSION", "name": "host transition"}] @@ -160,51 +154,6 @@ , ["defaults-transition", {"type": "var", "name": "host-trans"}] , ["deps-transition", {"type": "var", "name": "host-trans"}] , ["deps-fieldnames", ["private-deps"]] - , [ "cflags-files" - , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} - ] - , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] - , [ "compile-args" - , { "type": "++" - , "$1": - [ { "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"} - ] - } - ] - , [ "ldflags-files" - , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} - ] - , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] - , [ "link-args" - , { "type": "++" - , "$1": - [ {"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": - { "type": "foreach_map" - , "range": {"type": "var", "name": "binary"} - , "var_val": "binary" - , "body": - { "type": "singleton_map" - , "key": "test" - , "value": {"type": "var", "name": "binary"} - } - } - } - ] , [ "runner" , { "type": "map_union" , "$1": @@ -233,32 +182,8 @@ } } ] - , [ "test-args" - , { "type": "singleton_map" - , "key": "test-args.json" - , "value": - { "type": "BLOB" - , "data": - { "type": "json_encode" - , "$1": {"type": "FIELD", "name": "args", "default": []} - } - } - } - ] - , [ "test-launcher" - , { "type": "singleton_map" - , "key": "test-launcher.json" - , "value": - { "type": "BLOB" - , "data": - { "type": "json_encode" - , "$1": - {"type": "var", "name": "CC_TEST_LAUNCHER", "default": []} - } - } - } - ] - , [ "data" + , ["test-args", {"type": "FIELD", "name": "args", "default": []}] + , [ "test-data" , { "type": "let*" , "bindings": [ ["fieldname", "data"] @@ -273,178 +198,15 @@ } } ] - , [ "test-name" - , { "type": "join" - , "separator": "/" - , "$1": - [{"type": "var", "name": "stage"}, {"type": "var", "name": "name"}] - } - ] - , [ "test input" - , { "type": "map_union" - , "$1": - [ { "type": "to_subdir" - , "subdir": "work" - , "$1": {"type": "var", "name": "data"} - } - , {"type": "var", "name": "runner"} - , {"type": "var", "name": "test-args"} - , {"type": "var", "name": "test-launcher"} - , {"type": "var", "name": "staged test binary"} - ] + , [ "summarizer" + , { "type": "let*" + , "bindings": + [["fieldname", "summarizer"], ["location", "summarizer"]] + , "body": {"type": "CALL_EXPRESSION", "name": "stage"} } ] ] - , "body": - { "type": "if" - , "cond": {"type": "var", "name": "RUNS_PER_TEST"} - , "else": - { "type": "let*" - , "bindings": - [ [ "test-results" - , { "type": "ACTION" - , "outs": - ["result", "stdout", "stderr", "time-start", "time-stop"] - , "inputs": {"type": "var", "name": "test input"} - , "cmd": ["./runner"] - , "env": - { "type": "var" - , "name": "TEST_ENV" - , "default": {"type": "empty_map"} - } - , "may_fail": ["test"] - , "fail_message": - { "type": "join" - , "$1": - ["CC test ", {"type": "var", "name": "test-name"}, " failed"] - } - } - ] - , [ "runfiles" - , { "type": "singleton_map" - , "key": {"type": "var", "name": "name"} - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "test-results"}} - } - ] - ] - , "body": - { "type": "RESULT" - , "artifacts": {"type": "var", "name": "test-results"} - , "runfiles": {"type": "var", "name": "runfiles"} - } - } - , "then": - { "type": "let*" - , "bindings": - [ [ "attempts" - , { "type": "map_union" - , "$1": - { "type": "foreach" - , "var": "ATTEMPT" - , "range": - { "type": "range" - , "$1": {"type": "var", "name": "RUNS_PER_TEST"} - } - , "body": - { "type": "singleton_map" - , "key": {"type": "var", "name": "ATTEMPT"} - , "value": - { "type": "TREE" - , "$1": - { "type": "ACTION" - , "outs": - [ "result" - , "stdout" - , "stderr" - , "time-start" - , "time-stop" - ] - , "inputs": - { "type": "map_union" - , "$1": - [ { "type": "singleton_map" - , "key": "ATTEMPT" - , "value": - { "type": "BLOB" - , "data": {"type": "var", "name": "ATTEMPT"} - } - } - , {"type": "var", "name": "test input"} - ] - } - , "cmd": ["./runner"] - , "env": - { "type": "var" - , "name": "TEST_ENV" - , "default": {"type": "empty_map"} - } - , "may_fail": ["test"] - , "no_cache": ["test"] - , "fail_message": - { "type": "join" - , "$1": - [ "CC test " - , {"type": "var", "name": "test-name"} - , " failed (Run" - , {"type": "var", "name": "ATTEMPT"} - , ")" - ] - } - } - } - } - } - } - ] - , [ "summarizer" - , { "type": "let*" - , "bindings": - [["fieldname", "summarizer"], ["location", "summarizer"]] - , "body": {"type": "CALL_EXPRESSION", "name": "stage"} - } - ] - , [ "summary" - , { "type": "ACTION" - , "inputs": - { "type": "map_union" - , "$1": - [ {"type": "var", "name": "attempts"} - , {"type": "var", "name": "summarizer"} - ] - } - , "outs": - ["stdout", "stderr", "result", "time-start", "time-stop"] - , "cmd": ["./summarizer"] - } - ] - , [ "artifacts" - , { "type": "map_union" - , "$1": - [ {"type": "var", "name": "summary"} - , { "type": "singleton_map" - , "key": "work" - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "attempts"}} - } - ] - } - ] - , [ "runfiles" - , { "type": "singleton_map" - , "key": {"type": "var", "name": "name"} - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "artifacts"}} - } - ] - ] - , "body": - { "type": "RESULT" - , "artifacts": {"type": "var", "name": "artifacts"} - , "runfiles": {"type": "var", "name": "runfiles"} - } - } - } + , "body": {"type": "CALL_EXPRESSION", "name": "run_test"} } } } -- cgit v1.2.3 From 7012b2864e7a27d532dbab5ef1627025d9fc94f6 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Wed, 24 May 2023 09:53:55 +0200 Subject: rules: Support for external toolchains --- CC/EXPRESSIONS | 231 ++++++++++++++++++++++++++++++++++++++++++++++----------- CC/RULES | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++-- CC/auto/RULES | 37 +++++++-- CC/test/RULES | 2 +- 4 files changed, 424 insertions(+), 59 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index fd90914..cad28e8 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": @@ -82,6 +73,21 @@ , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } +, "default-LDFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "defaults"] + , ["provider", "LDFLAGS"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } , "default-ENV": { "vars": ["defaults-transition"] , "imports": {"map_provider": ["./", "..", "field_map_provider"]} @@ -98,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*" @@ -508,6 +554,7 @@ [ "COMPILER" , "COMPILE_FLAGS" , "ENV" + , "TOOLCHAIN" , "srcs" , "hdrs" , "private-hdrs" @@ -570,6 +617,10 @@ , "name": "cflags-files" , "default": {"type": "empty_map"} } + , { "type": "var" + , "name": "TOOLCHAIN" + , "default": {"type": "empty_map"} + } ] } ] @@ -628,25 +679,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" @@ -727,11 +817,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": @@ -743,7 +846,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" @@ -792,7 +912,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": @@ -959,11 +1085,25 @@ , "flags": "flags" , "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": @@ -972,6 +1112,7 @@ ] } ] + , ["LDFLAGS", {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"}] , [ "ENV" , { "type": "map_union" , "$1": @@ -1013,7 +1154,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": "cflags-files" @@ -1034,6 +1176,7 @@ ] , {"type": "var", "name": "COMPILE_FLAGS"} , {"type": "var", "name": "link-args"} + , {"type": "var", "name": "LDFLAGS"} ] } , "env": {"type": "var", "name": "ENV"} diff --git a/CC/RULES b/CC/RULES index 63be910..57cde50 100644 --- a/CC/RULES +++ b/CC/RULES @@ -6,18 +6,83 @@ , "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" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "AR" , "PATH" + , "SYSTEM_TOOLS" ] - , "imports": {"base-provides": "defaults-base-provides"} + , "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\"." + ] + , "CXXFLAGS": + [ "Flags for C++ compilation. Specifying this field overwrites" + , "values from \"base\"." + ] + , "LDFLAGS": + [ "Linker flags for linking the final CC library. Specifying this field" + , "overwrites values from \"base\"." + ] + , "ADD_CFLAGS": + [ "Additional compilation flags for C. Specifying this field" + , "extends values from \"base\"." + ] + , "ADD_CXXFLAGS": + [ "Additional compilation flags for C++. Specifying this field" + , "extends values from \"base\"." + ] + , "ADD_LDFLAGS": + [ "Additional linker flags for linking the final CC library. Specifying" + , "this field extends values from \"base\"." + ] + , "PATH": + [ "Path for looking up the compilers. Individual paths are joined" + , "with \":\"." + ] + } + , "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" + , "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": @@ -25,6 +90,7 @@ , ["CXX", {"type": "FIELD", "name": "CXX"}] , ["CFLAGS", {"type": "FIELD", "name": "CFLAGS"}] , ["CXXFLAGS", {"type": "FIELD", "name": "CXXFLAGS"}] + , ["LDFLAGS", {"type": "FIELD", "name": "LDFLAGS"}] , ["AR", {"type": "FIELD", "name": "AR"}] , ["PATH", {"type": "FIELD", "name": "PATH"}] , ["provider", "CC"] @@ -59,6 +125,14 @@ , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] + , ["provider", "LDFLAGS"] + , [ "LDFLAGS" + , { "type": "if" + , "cond": {"type": "var", "name": "LDFLAGS"} + , "then": {"type": "var", "name": "LDFLAGS"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] , ["provider", "AR"] , [ "AR" , { "type": "if" @@ -84,6 +158,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": @@ -100,12 +260,49 @@ ] } ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "LDFLAGS"} + , {"type": "FIELD", "name": "ADD_LDFLAGS"} + ] + } + ] + , ["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"}] + , [ "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", "AR", "ENV"] + , "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "AR" + , "ENV" + , "TOOLCHAIN" + , "NON_SYSTEM_TOOLS" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "package" + ] } } } @@ -332,8 +529,10 @@ , "else": {"type": "var", "name": "name"} } ] - , ["public-fieldnames", ["deps", "proto-deps"]] - , ["private-fieldnames", ["deps", "private-deps", "proto-deps"]] + , ["public-fieldnames", ["deps", "proto-deps", "defaults"]] + , [ "private-fieldnames" + , ["deps", "private-deps", "proto-deps", "defaults"] + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "result"} } @@ -471,7 +670,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/test/RULES b/CC/test/RULES index 755ed92..350d585 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -153,7 +153,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": -- cgit v1.2.3 From 075a1914dd6a77d824b47149b54bf4b4f259d516 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 30 May 2023 14:54:55 +0200 Subject: rules-cc: Drop needless conditional --- CC/proto/EXPRESSIONS | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/CC/proto/EXPRESSIONS b/CC/proto/EXPRESSIONS index 894b80b..6be74df 100644 --- a/CC/proto/EXPRESSIONS +++ b/CC/proto/EXPRESSIONS @@ -138,14 +138,9 @@ , ["TOOLCHAIN_DIR", "toolchain"] , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] , [ "TOOLCHAIN" - , { "type": "if" - , "cond": {"type": "var", "name": "TOOLCHAIN"} - , "then": - { "type": "to_subdir" - , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} - , "$1": {"type": "var", "name": "TOOLCHAIN"} - } - , "else": {"type": "empty_map"} + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} } ] , [ "NON_SYSTEM_TOOLS" -- cgit v1.2.3 From b68ed71182b1207fb750208650de075f412b4ab8 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 25 May 2023 16:51:18 +0200 Subject: rules-cc: Move binary test_run to expression --- CC/test/EXPRESSIONS | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++++ CC/test/RULES | 263 ++------------------------------------------- 2 files changed, 312 insertions(+), 254 deletions(-) create mode 100644 CC/test/EXPRESSIONS diff --git a/CC/test/EXPRESSIONS b/CC/test/EXPRESSIONS new file mode 100644 index 0000000..e1442c5 --- /dev/null +++ b/CC/test/EXPRESSIONS @@ -0,0 +1,303 @@ +{ "run_test": + { "doc": + [ "Build and run a CC test binary using the provided runner." + , "" + , "Note that if variable RUNS_PER_TEST contains a non-false value, a" + , "summarizer must be provided." + ] + , "vars": + [ "ARCH" + , "HOST_ARCH" + , "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ENV" + , "TEST_ENV" + , "CC_TEST_LAUNCHER" + , "RUNS_PER_TEST" + , "name" + , "pure C" + , "stage" + , "srcs" + , "private-hdrs" + , "private-defines" + , "private-cflags" + , "private-ldflags" + , "defaults-transition" + , "deps-transition" + , "deps-fieldnames" + , "runner" + , "runner-data" + , "test-args" + , "test-data" + , "summarizer" + ] + , "imports": + { "artifacts": ["./", "../..", "field_artifacts"] + , "runfiles": ["./", "../..", "field_runfiles"] + , "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"] + , "binary": ["./", "..", "bin artifact"] + , "host transition": ["transitions", "for host"] + , "stage": ["./", "../..", "stage_singleton_field"] + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "++" + , "$1": + [ { "type": "foreach" + , "var": "def" + , "range": + {"type": "var", "name": "private-defines", "default": []} + , "body": + {"type": "join", "$1": ["-D", {"type": "var", "name": "def"}]} + } + , {"type": "var", "name": "private-cflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} + ] + } + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] + , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] + , [ "link-args" + , { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "link-args-deps"} + , {"type": "var", "name": "private-ldflags", "default": []} + ] + } + ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + , ["binary", {"type": "CALL_EXPRESSION", "name": "binary"}] + , [ "staged test binary" + , { "type": "map_union" + , "$1": + { "type": "foreach_map" + , "range": {"type": "var", "name": "binary"} + , "var_val": "binary" + , "body": + { "type": "singleton_map" + , "key": "test" + , "value": {"type": "var", "name": "binary"} + } + } + } + ] + , [ "test-args" + , { "type": "singleton_map" + , "key": "test-args.json" + , "value": + { "type": "BLOB" + , "data": + { "type": "json_encode" + , "$1": {"type": "var", "name": "test-args", "default": []} + } + } + } + ] + , [ "test-launcher" + , { "type": "singleton_map" + , "key": "test-launcher.json" + , "value": + { "type": "BLOB" + , "data": + { "type": "json_encode" + , "$1": + {"type": "var", "name": "CC_TEST_LAUNCHER", "default": []} + } + } + } + ] + , [ "test-name" + , { "type": "join" + , "separator": "/" + , "$1": + [{"type": "var", "name": "stage"}, {"type": "var", "name": "name"}] + } + ] + , [ "test input" + , { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "work" + , "$1": {"type": "var", "name": "test-data"} + } + , {"type": "var", "name": "runner"} + , { "type": "var" + , "name": "runner-data" + , "default": {"type": "empty_map"} + } + , {"type": "var", "name": "test-args"} + , {"type": "var", "name": "test-launcher"} + , {"type": "var", "name": "staged test binary"} + , {"type": "var", "name": "run-libs"} + ] + } + ] + ] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "RUNS_PER_TEST"} + , "else": + { "type": "let*" + , "bindings": + [ [ "test-results" + , { "type": "ACTION" + , "outs": + ["result", "stdout", "stderr", "time-start", "time-stop"] + , "inputs": {"type": "var", "name": "test input"} + , "cmd": ["./runner"] + , "env": + { "type": "var" + , "name": "TEST_ENV" + , "default": {"type": "empty_map"} + } + , "may_fail": ["test"] + , "fail_message": + { "type": "join" + , "$1": + ["CC test ", {"type": "var", "name": "test-name"}, " failed"] + } + } + ] + , [ "runfiles" + , { "type": "singleton_map" + , "key": {"type": "var", "name": "name"} + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "test-results"}} + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "test-results"} + , "runfiles": {"type": "var", "name": "runfiles"} + } + } + , "then": + { "type": "let*" + , "bindings": + [ [ "attempts" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "ATTEMPT" + , "range": + { "type": "range" + , "$1": {"type": "var", "name": "RUNS_PER_TEST"} + } + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "ATTEMPT"} + , "value": + { "type": "TREE" + , "$1": + { "type": "ACTION" + , "outs": + [ "result" + , "stdout" + , "stderr" + , "time-start" + , "time-stop" + ] + , "inputs": + { "type": "map_union" + , "$1": + [ { "type": "singleton_map" + , "key": "ATTEMPT" + , "value": + { "type": "BLOB" + , "data": {"type": "var", "name": "ATTEMPT"} + } + } + , {"type": "var", "name": "test input"} + ] + } + , "cmd": ["./runner"] + , "env": + { "type": "var" + , "name": "TEST_ENV" + , "default": {"type": "empty_map"} + } + , "may_fail": ["test"] + , "no_cache": ["test"] + , "fail_message": + { "type": "join" + , "$1": + [ "CC test " + , {"type": "var", "name": "test-name"} + , " failed (Run" + , {"type": "var", "name": "ATTEMPT"} + , ")" + ] + } + } + } + } + } + } + ] + , [ "summary" + , { "type": "ACTION" + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "attempts"} + , {"type": "var", "name": "summarizer"} + ] + } + , "outs": + ["stdout", "stderr", "result", "time-start", "time-stop"] + , "cmd": ["./summarizer"] + } + ] + , [ "artifacts" + , { "type": "map_union" + , "$1": + [ {"type": "var", "name": "summary"} + , { "type": "singleton_map" + , "key": "work" + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "attempts"}} + } + ] + } + ] + , [ "runfiles" + , { "type": "singleton_map" + , "key": {"type": "var", "name": "name"} + , "value": + {"type": "TREE", "$1": {"type": "var", "name": "artifacts"}} + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "artifacts"} + , "runfiles": {"type": "var", "name": "runfiles"} + } + } + } + } + } +} diff --git a/CC/test/RULES b/CC/test/RULES index af07210..f9032b3 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -117,17 +117,9 @@ , "imports": { "artifacts": ["./", "../..", "field_artifacts"] , "runfiles": ["./", "../..", "field_runfiles"] - , "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"] - , "binary": ["./", "..", "bin artifact"] , "host transition": ["transitions", "for host"] , "stage": ["./", "../..", "stage_singleton_field"] + , "run_test": "run_test" } , "config_transitions": { "defaults": [{"type": "CALL_EXPRESSION", "name": "host transition"}] @@ -174,55 +166,6 @@ , ["defaults-transition", {"type": "var", "name": "host-trans"}] , ["deps-transition", {"type": "var", "name": "host-trans"}] , ["deps-fieldnames", ["private-deps"]] - , [ "cflags-files" - , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} - ] - , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] - , [ "compile-args" - , { "type": "++" - , "$1": - [ { "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"} - ] - } - ] - , [ "ldflags-files" - , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} - ] - , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] - , [ "link-args" - , { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "link-args-deps"} - , {"type": "FIELD", "name": "private-ldflags"} - ] - } - ] - , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] - , [ "run-libs-args" - , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} - ] - , ["binary", {"type": "CALL_EXPRESSION", "name": "binary"}] - , [ "staged test binary" - , { "type": "map_union" - , "$1": - { "type": "foreach_map" - , "range": {"type": "var", "name": "binary"} - , "var_val": "binary" - , "body": - { "type": "singleton_map" - , "key": "test" - , "value": {"type": "var", "name": "binary"} - } - } - } - ] , [ "runner" , { "type": "map_union" , "$1": @@ -251,32 +194,8 @@ } } ] - , [ "test-args" - , { "type": "singleton_map" - , "key": "test-args.json" - , "value": - { "type": "BLOB" - , "data": - { "type": "json_encode" - , "$1": {"type": "FIELD", "name": "args", "default": []} - } - } - } - ] - , [ "test-launcher" - , { "type": "singleton_map" - , "key": "test-launcher.json" - , "value": - { "type": "BLOB" - , "data": - { "type": "json_encode" - , "$1": - {"type": "var", "name": "CC_TEST_LAUNCHER", "default": []} - } - } - } - ] - , [ "data" + , ["test-args", {"type": "FIELD", "name": "args", "default": []}] + , [ "test-data" , { "type": "let*" , "bindings": [ ["fieldname", "data"] @@ -291,179 +210,15 @@ } } ] - , [ "test-name" - , { "type": "join" - , "separator": "/" - , "$1": - [{"type": "var", "name": "stage"}, {"type": "var", "name": "name"}] - } - ] - , [ "test input" - , { "type": "map_union" - , "$1": - [ { "type": "to_subdir" - , "subdir": "work" - , "$1": {"type": "var", "name": "data"} - } - , {"type": "var", "name": "runner"} - , {"type": "var", "name": "test-args"} - , {"type": "var", "name": "test-launcher"} - , {"type": "var", "name": "staged test binary"} - , {"type": "var", "name": "run-libs"} - ] + , [ "summarizer" + , { "type": "let*" + , "bindings": + [["fieldname", "summarizer"], ["location", "summarizer"]] + , "body": {"type": "CALL_EXPRESSION", "name": "stage"} } ] ] - , "body": - { "type": "if" - , "cond": {"type": "var", "name": "RUNS_PER_TEST"} - , "else": - { "type": "let*" - , "bindings": - [ [ "test-results" - , { "type": "ACTION" - , "outs": - ["result", "stdout", "stderr", "time-start", "time-stop"] - , "inputs": {"type": "var", "name": "test input"} - , "cmd": ["./runner"] - , "env": - { "type": "var" - , "name": "TEST_ENV" - , "default": {"type": "empty_map"} - } - , "may_fail": ["test"] - , "fail_message": - { "type": "join" - , "$1": - ["CC test ", {"type": "var", "name": "test-name"}, " failed"] - } - } - ] - , [ "runfiles" - , { "type": "singleton_map" - , "key": {"type": "var", "name": "name"} - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "test-results"}} - } - ] - ] - , "body": - { "type": "RESULT" - , "artifacts": {"type": "var", "name": "test-results"} - , "runfiles": {"type": "var", "name": "runfiles"} - } - } - , "then": - { "type": "let*" - , "bindings": - [ [ "attempts" - , { "type": "map_union" - , "$1": - { "type": "foreach" - , "var": "ATTEMPT" - , "range": - { "type": "range" - , "$1": {"type": "var", "name": "RUNS_PER_TEST"} - } - , "body": - { "type": "singleton_map" - , "key": {"type": "var", "name": "ATTEMPT"} - , "value": - { "type": "TREE" - , "$1": - { "type": "ACTION" - , "outs": - [ "result" - , "stdout" - , "stderr" - , "time-start" - , "time-stop" - ] - , "inputs": - { "type": "map_union" - , "$1": - [ { "type": "singleton_map" - , "key": "ATTEMPT" - , "value": - { "type": "BLOB" - , "data": {"type": "var", "name": "ATTEMPT"} - } - } - , {"type": "var", "name": "test input"} - ] - } - , "cmd": ["./runner"] - , "env": - { "type": "var" - , "name": "TEST_ENV" - , "default": {"type": "empty_map"} - } - , "may_fail": ["test"] - , "no_cache": ["test"] - , "fail_message": - { "type": "join" - , "$1": - [ "CC test " - , {"type": "var", "name": "test-name"} - , " failed (Run" - , {"type": "var", "name": "ATTEMPT"} - , ")" - ] - } - } - } - } - } - } - ] - , [ "summarizer" - , { "type": "let*" - , "bindings": - [["fieldname", "summarizer"], ["location", "summarizer"]] - , "body": {"type": "CALL_EXPRESSION", "name": "stage"} - } - ] - , [ "summary" - , { "type": "ACTION" - , "inputs": - { "type": "map_union" - , "$1": - [ {"type": "var", "name": "attempts"} - , {"type": "var", "name": "summarizer"} - ] - } - , "outs": - ["stdout", "stderr", "result", "time-start", "time-stop"] - , "cmd": ["./summarizer"] - } - ] - , [ "artifacts" - , { "type": "map_union" - , "$1": - [ {"type": "var", "name": "summary"} - , { "type": "singleton_map" - , "key": "work" - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "attempts"}} - } - ] - } - ] - , [ "runfiles" - , { "type": "singleton_map" - , "key": {"type": "var", "name": "name"} - , "value": - {"type": "TREE", "$1": {"type": "var", "name": "artifacts"}} - } - ] - ] - , "body": - { "type": "RESULT" - , "artifacts": {"type": "var", "name": "artifacts"} - , "runfiles": {"type": "var", "name": "runfiles"} - } - } - } + , "body": {"type": "CALL_EXPRESSION", "name": "run_test"} } } } -- cgit v1.2.3 From f31b52a0b6bb1f8e626e7b2056918d0fb051199f Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Fri, 17 Feb 2023 10:36:32 +0100 Subject: rules-cc: Fix missing LDFLAGS propagation --- CC/RULES | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CC/RULES b/CC/RULES index 37460d3..b8e04d1 100644 --- a/CC/RULES +++ b/CC/RULES @@ -96,6 +96,14 @@ , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} } ] + , ["provider", "LDFLAGS"] + , [ "LDFLAGS" + , { "type": "if" + , "cond": {"type": "var", "name": "LDFLAGS"} + , "then": {"type": "var", "name": "LDFLAGS"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] , ["provider", "AR"] , [ "AR" , { "type": "if" -- cgit v1.2.3 From b09fa46239f251d5499dea26b313e4f9ef9b1aac Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 11 May 2023 11:45:10 +0200 Subject: rules-cc: Put global LDFLAGS last --- CC/EXPRESSIONS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index a520cde..8d4e12d 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -1190,11 +1190,11 @@ } ] , {"type": "var", "name": "COMPILE_FLAGS"} - , {"type": "var", "name": "LDFLAGS"} , ["-o", {"type": "var", "name": "libname"}] , {"type": "keys", "$1": {"type": "var", "name": "objects"}} , {"type": "var", "name": "link-args"} , {"type": "var", "name": "run-libs-args"} + , {"type": "var", "name": "LDFLAGS"} ] } } @@ -1502,9 +1502,9 @@ , {"type": "var", "name": "binpath"} ] , {"type": "var", "name": "COMPILE_FLAGS"} - , {"type": "var", "name": "LDFLAGS"} , {"type": "var", "name": "link-args"} , {"type": "var", "name": "run-libs-args"} + , {"type": "var", "name": "LDFLAGS"} ] } , "env": {"type": "var", "name": "ENV"} -- cgit v1.2.3 From 52f36d3c99c0327ccba50dede36645432af798df Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 14 Feb 2023 15:40:56 +0100 Subject: rules-cc: Use field_map_provider for default-ENV --- CC/EXPRESSIONS | 43 +++------- CC/RULES | 1 + CC/auto/RULES | 13 +-- CC/foreign/cmake/EXPRESSIONS | 20 ++--- CC/foreign/make/EXPRESSIONS | 190 ++++++++++++++++++++----------------------- CC/pkgconfig/EXPRESSIONS | 13 +-- CC/prebuilt/EXPRESSIONS | 13 +-- 7 files changed, 113 insertions(+), 180 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 8d4e12d..994dbf4 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -99,7 +99,7 @@ } , "default-ENV": { "vars": ["defaults-transition"] - , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "imports": {"map_provider": ["./", "..", "field_map_provider"]} , "expression": { "type": "let*" , "bindings": @@ -110,7 +110,7 @@ ] , ["default", {"type": "empty_map"}] ] - , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } } , "defaults-base-provides": @@ -847,16 +847,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] @@ -1111,16 +1104,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] @@ -1434,16 +1420,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , ["hdrs", {"type": "empty_map"}] diff --git a/CC/RULES b/CC/RULES index b8e04d1..cf4fe19 100644 --- a/CC/RULES +++ b/CC/RULES @@ -113,6 +113,7 @@ } ] , ["provider", "ENV"] + , ["default", {"type": "empty_map"}] , [ "ENV" , { "type": "if" , "cond": {"type": "var", "name": "PATH"} diff --git a/CC/auto/RULES b/CC/auto/RULES index e04289c..fb75a64 100644 --- a/CC/auto/RULES +++ b/CC/auto/RULES @@ -204,16 +204,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , [ "c.flags" diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS index 8977d5a..e1f019b 100644 --- a/CC/foreign/cmake/EXPRESSIONS +++ b/CC/foreign/cmake/EXPRESSIONS @@ -84,20 +84,12 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - , [ { "type": "env" - , "vars": ["CC", "CXX", "CXXFLAGS", "CFLAGS", "LDFLAGS"] - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + , { "type": "env" + , "vars": ["CC", "CXX", "CXXFLAGS", "CFLAGS", "LDFLAGS"] + } + ] } ] , [ "AR" diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index e853b29..85179a9 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -80,115 +80,97 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_cc"} - , "then": - {"type": "join", "$1": {"type": "var", "name": "var_cc"}} - , "else": "CC" - } - , "value": {"type": "var", "name": "CC"} - } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_cxx"} - , "then": - { "type": "join" - , "$1": {"type": "var", "name": "var_cxx"} - } - , "else": "CXX" - } - , "value": {"type": "var", "name": "CXX"} - } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_ccflags"} - , "then": - { "type": "join" - , "$1": {"type": "var", "name": "var_ccflags"} - } - , "else": "CFLAGS" - } - , "value": {"type": "var", "name": "CFLAGS"} - } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_cxxflags"} - , "then": - { "type": "join" - , "$1": {"type": "var", "name": "var_cxxflags"} - } - , "else": "CXXFLAGS" - } - , "value": {"type": "var", "name": "CXXFLAGS"} + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_cc"} + , "then": + {"type": "join", "$1": {"type": "var", "name": "var_cc"}} + , "else": "CC" + } + , "value": {"type": "var", "name": "CC"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_cxx"} + , "then": + {"type": "join", "$1": {"type": "var", "name": "var_cxx"}} + , "else": "CXX" + } + , "value": {"type": "var", "name": "CXX"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_ccflags"} + , "then": + { "type": "join" + , "$1": {"type": "var", "name": "var_ccflags"} } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_ldflags"} - , "then": - { "type": "join" - , "$1": {"type": "var", "name": "var_ldflags"} - } - , "else": "LDFLAGS" - } - , "value": {"type": "var", "name": "LDFLAGS"} + , "else": "CFLAGS" + } + , "value": {"type": "var", "name": "CFLAGS"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_cxxflags"} + , "then": + { "type": "join" + , "$1": {"type": "var", "name": "var_cxxflags"} } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_ar"} - , "then": - {"type": "join", "$1": {"type": "var", "name": "var_ar"}} - , "else": "AR" - } - , "value": {"type": "var", "name": "AR"} + , "else": "CXXFLAGS" + } + , "value": {"type": "var", "name": "CXXFLAGS"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_ldflags"} + , "then": + { "type": "join" + , "$1": {"type": "var", "name": "var_ldflags"} } - ] - , [ { "type": "singleton_map" - , "key": - { "type": "if" - , "cond": {"type": "var", "name": "var_prefix"} - , "then": - { "type": "join" - , "$1": {"type": "var", "name": "var_prefix"} - } - , "else": "PREFIX" - } - , "value": - { "type": "if" - , "cond": {"type": "var", "name": "make_prefix"} - , "then": - { "type": "join" - , "separator": "/" - , "$1": - { "type": "++" - , "$1": [[""], {"type": "var", "name": "make_prefix"}] - } - } - , "else": {"type": "var", "name": "PREFIX", "default": "/"} + , "else": "LDFLAGS" + } + , "value": {"type": "var", "name": "LDFLAGS"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_ar"} + , "then": + {"type": "join", "$1": {"type": "var", "name": "var_ar"}} + , "else": "AR" + } + , "value": {"type": "var", "name": "AR"} + } + , { "type": "singleton_map" + , "key": + { "type": "if" + , "cond": {"type": "var", "name": "var_prefix"} + , "then": + {"type": "join", "$1": {"type": "var", "name": "var_prefix"}} + , "else": "PREFIX" + } + , "value": + { "type": "if" + , "cond": {"type": "var", "name": "make_prefix"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + { "type": "++" + , "$1": [[""], {"type": "var", "name": "make_prefix"}] } } - ] - ] - } + , "else": {"type": "var", "name": "PREFIX", "default": "/"} + } + } + ] } ] , [ "script" diff --git a/CC/pkgconfig/EXPRESSIONS b/CC/pkgconfig/EXPRESSIONS index c770421..4c174c4 100644 --- a/CC/pkgconfig/EXPRESSIONS +++ b/CC/pkgconfig/EXPRESSIONS @@ -7,16 +7,9 @@ [ [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , [ "cflags-filename" diff --git a/CC/prebuilt/EXPRESSIONS b/CC/prebuilt/EXPRESSIONS index 6b7169a..c404bec 100644 --- a/CC/prebuilt/EXPRESSIONS +++ b/CC/prebuilt/EXPRESSIONS @@ -234,16 +234,9 @@ , [ "ENV" , { "type": "map_union" , "$1": - { "type": "++" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} - , [ { "type": "var" - , "name": "ENV" - , "default": {"type": "empty_map"} - } - ] - ] - } + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + ] } ] , [ "main-pkg-config" -- cgit v1.2.3 From c17dea46b8cb0fe3fcef3ee97a3b703b70bb4f98 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 9 May 2023 15:18:39 +0200 Subject: rules-cc: Support run-libs in CC/proto libraries --- CC/proto/RULES | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/CC/proto/RULES b/CC/proto/RULES index 6d2e725..ac7a371 100644 --- a/CC/proto/RULES +++ b/CC/proto/RULES @@ -61,6 +61,8 @@ , "compile-args-deps": ["CC", "compile-args-deps"] , "link-deps": ["CC", "link-deps"] , "link-args-deps": ["CC", "link-args-deps"] + , "run-libs-deps": ["CC", "run-libs-deps"] + , "run-libs-args-deps": ["CC", "run-libs-args-deps"] , "cflags-files-deps": ["CC", "cflags-files-deps"] , "ldflags-files-deps": ["CC", "ldflags-files-deps"] , "for host": ["transitions", "for host"] @@ -193,6 +195,10 @@ ] , ["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"} ] @@ -216,6 +222,8 @@ , "compile-args" , "link-deps" , "link-args" + , "run-libs" + , "run-libs-args" , "package" ] } @@ -245,8 +253,8 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , ["public-fieldnames", ["deps", "proto-defaults"]] - , ["private-fieldnames", ["deps", "proto-defaults"]] + , ["public-fieldnames", ["deps", "proto-defaults", "defaults"]] + , ["private-fieldnames", ["deps", "proto-defaults", "defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } @@ -277,8 +285,8 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , ["public-fieldnames", ["deps", "proto-defaults"]] - , ["private-fieldnames", ["deps", "proto-defaults"]] + , ["public-fieldnames", ["deps", "proto-defaults", "defaults"]] + , ["private-fieldnames", ["deps", "proto-defaults", "defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } -- cgit v1.2.3 From 25cc5a5d9e225e8a1b8d1a7221eb1968b28d928d Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Fri, 17 Feb 2023 13:37:25 +0100 Subject: rules-cc: Support for external toolchains --- CC/EXPRESSIONS | 230 ++++++++++++++++++++++++++++++++++--------- CC/RULES | 175 ++++++++++++++++++++++++++++++-- CC/auto/RULES | 37 +++++-- CC/foreign/cmake/EXPRESSIONS | 37 ++++++- CC/foreign/make/EXPRESSIONS | 37 ++++++- 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" diff --git a/CC/RULES b/CC/RULES index cf4fe19..d2aeece 100644 --- a/CC/RULES +++ b/CC/RULES @@ -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": -- cgit v1.2.3 From f5fb09192d1ad244006964d2d1425506718d3e58 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 14 Feb 2023 17:20:48 +0100 Subject: rules-cc/foreign: Support project sub-directory --- CC/foreign/cmake/EXPRESSIONS | 20 ++++++++++++++++---- CC/foreign/cmake/RULES | 16 ++++++++++++++-- CC/foreign/make/EXPRESSIONS | 17 +++++++++++++---- CC/foreign/make/RULES | 18 +++++++++++++----- 4 files changed, 56 insertions(+), 15 deletions(-) diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS index be345c2..bdb05ce 100644 --- a/CC/foreign/cmake/EXPRESSIONS +++ b/CC/foreign/cmake/EXPRESSIONS @@ -1,6 +1,7 @@ { "cmake-build": { "vars": [ "source_dir" + , "cmake_subdir" , "cmake_options" , "cmake_defines" , "cmake_jobs" @@ -143,6 +144,12 @@ ] } ] + , [ "CMAKE_SUBDIR" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "var", "name": "cmake_subdir", "default": []} + } + ] , [ "script" , { "type": "singleton_map" , "key": "run_cmake.sh" @@ -169,9 +176,10 @@ ] } } - , [ "readonly CMAKE_AR=$(which $1)" - , "shift" - , "cmake \"$@\" -Ssource -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)" + , [ "readonly CMAKE_SUBDIR=\"$1\"" + , "readonly CMAKE_AR=$(which $2)" + , "shift 2" + , "cmake \"$@\" -S\"source/${CMAKE_SUBDIR}\" -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)" ] , [ { "type": "join" , "separator": " " @@ -222,7 +230,11 @@ , "cmd": { "type": "++" , "$1": - [ ["/bin/sh", "run_cmake.sh", {"type": "var", "name": "AR"}] + [ [ "/bin/sh" + , "run_cmake.sh" + , {"type": "var", "name": "CMAKE_SUBDIR"} + , {"type": "var", "name": "AR"} + ] , {"type": "var", "name": "CMAKE_FLAGS"} ] } diff --git a/CC/foreign/cmake/RULES b/CC/foreign/cmake/RULES index 8651f4e..e5c7706 100644 --- a/CC/foreign/cmake/RULES +++ b/CC/foreign/cmake/RULES @@ -2,7 +2,8 @@ { "doc": ["Data produced by CMake configure, build, and install."] , "target_fields": ["project"] , "string_fields": - [ "options" + [ "subdir" + , "options" , "defines" , "jobs" , "pre_cmds" @@ -27,6 +28,10 @@ , "field_doc": { "project": ["The CMake project directory. It should contain a single tree artifact"] + , "subdir": + [ "The subdirectory that contains the entry CMakeLists.txt. Individual" + , "directory components are joined with \"/\"." + ] , "options": [ "CMake options for the configuration phase." , "(e.g., [\"-GNinja\", \"-Ax64\"])" @@ -162,6 +167,7 @@ } } ] + , ["cmake_subdir", {"type": "FIELD", "name": "subdir"}] , ["cmake_options", {"type": "FIELD", "name": "options"}] , ["cmake_defines", {"type": "FIELD", "name": "defines"}] , ["cmake_jobs", {"type": "FIELD", "name": "jobs"}] @@ -218,7 +224,8 @@ { "doc": ["Library produced by CMake configure, build, and install."] , "target_fields": ["project", "deps"] , "string_fields": - [ "name" + [ "subdir" + , "name" , "version" , "stage" , "options" @@ -256,6 +263,10 @@ , "field_doc": { "project": ["The CMake project directory. It should contain a single tree artifact"] + , "subdir": + [ "The subdirectory that contains the entry CMakeLists.txt. Individual" + , "directory components are joined with \"/\"." + ] , "name": [ "The name of the library (without leading \"lib\" or trailing file name" , "extension), also used as name for pkg-config files." @@ -509,6 +520,7 @@ ] } ] + , ["cmake_subdir", {"type": "FIELD", "name": "subdir"}] , ["cmake_options", {"type": "FIELD", "name": "options"}] , ["cmake_defines", {"type": "FIELD", "name": "defines"}] , ["cmake_jobs", {"type": "FIELD", "name": "jobs"}] diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index 3f04bbd..abe072d 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -1,7 +1,7 @@ { "make-build": { "vars": [ "source_dir" - , "make_target" + , "subdir" , "make_prefix" , "make_options" , "make_jobs" @@ -203,6 +203,12 @@ ] } ] + , [ "SUBDIR" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "var", "name": "subdir", "default": []} + } + ] , [ "script" , { "type": "singleton_map" , "key": "run_make.sh" @@ -229,9 +235,11 @@ ] } } - , [ "readonly VAR_DESTDIR=$1" - , "shift" - , "make \"$@\" -C source ${VAR_DESTDIR}=$(pwd)/install >build.log || (cat build.log && exit 1)" + , [ "readonly SUBDIR=\"$1\"" + , "readonly VAR_DESTDIR=$2" + , "shift 2" + ] + , [ "make \"$@\" -C \"source/${SUBDIR}\" ${VAR_DESTDIR}=$(pwd)/install >build.log || (cat build.log && exit 1)" , "find ./install -type l -delete" ] , { "type": "if" @@ -266,6 +274,7 @@ { "type": "++" , "$1": [ ["/bin/sh", "run_make.sh"] + , [{"type": "var", "name": "SUBDIR"}] , { "type": "if" , "cond": {"type": "var", "name": "var_destdir"} , "then": diff --git a/CC/foreign/make/RULES b/CC/foreign/make/RULES index 9c8c738..7ae684f 100644 --- a/CC/foreign/make/RULES +++ b/CC/foreign/make/RULES @@ -2,7 +2,7 @@ { "doc": ["Data produced by Make build and install."] , "target_fields": ["project"] , "string_fields": - [ "target" + [ "subdir" , "prefix" , "options" , "jobs" @@ -37,7 +37,10 @@ , "field_doc": { "project": ["The Make project directory. It should contain a single tree artifact"] - , "target": ["The Make target to build (default: [\"install\"])."] + , "subdir": + [ "The subdirectory that contains the configure and Makefile. Individual" + , "directory components are joined with \"/\"." + ] , "prefix": [ "The prefix used for the Make target. The path will be made absolute" , "and individual directory components are joined with \"/\". If no" @@ -195,7 +198,7 @@ } } ] - , ["make_target", {"type": "FIELD", "name": "target"}] + , ["subdir", {"type": "FIELD", "name": "subdir"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] , ["make_jobs", {"type": "FIELD", "name": "jobs"}] @@ -258,7 +261,8 @@ { "doc": ["Library produced by Make build and install."] , "target_fields": ["project", "deps"] , "string_fields": - [ "name" + [ "subdir" + , "name" , "version" , "stage" , "target" @@ -306,6 +310,10 @@ , "field_doc": { "project": ["The Make project directory. It should contain a single tree artifact"] + , "subdir": + [ "The subdirectory that contains the configure and Makefile. Individual" + , "directory components are joined with \"/\"." + ] , "name": [ "The name of the library (without leading \"lib\" or trailing file name" , "extension), also used as name for pkg-config files." @@ -581,7 +589,7 @@ ] } ] - , ["make_target", {"type": "FIELD", "name": "target"}] + , ["subdir", {"type": "FIELD", "name": "subdir"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] , ["make_jobs", {"type": "FIELD", "name": "jobs"}] -- cgit v1.2.3 From f092ccd2ddd1eff0e9956838aadca8b1b7d5b52b Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 16 Feb 2023 12:58:10 +0100 Subject: rules-cc/foreign/make: Support multiple targets --- CC/foreign/make/EXPRESSIONS | 32 +++++++++++++++++++++++--------- CC/foreign/make/RULES | 14 ++++++++++++-- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index abe072d..be468e7 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -2,6 +2,7 @@ { "vars": [ "source_dir" , "subdir" + , "make_targets" , "make_prefix" , "make_options" , "make_jobs" @@ -209,6 +210,13 @@ , "$1": {"type": "var", "name": "subdir", "default": []} } ] + , [ "make_targets" + , { "type": "if" + , "cond": {"type": "var", "name": "make_targets"} + , "then": {"type": "var", "name": "make_targets"} + , "else": ["install"] + } + ] , [ "script" , { "type": "singleton_map" , "key": "run_make.sh" @@ -239,9 +247,21 @@ , "readonly VAR_DESTDIR=$2" , "shift 2" ] - , [ "make \"$@\" -C \"source/${SUBDIR}\" ${VAR_DESTDIR}=$(pwd)/install >build.log || (cat build.log && exit 1)" - , "find ./install -type l -delete" - ] + , { "type": "foreach" + , "range": {"type": "var", "name": "make_targets"} + , "var": "target" + , "body": + { "type": "join" + , "$1": + [ "make \"$@\" -C \"source/${SUBDIR}\" ${VAR_DESTDIR}=$(pwd)/install " + , { "type": "join_cmd" + , "$1": [{"type": "var", "name": "target"}] + } + , " >>build.log || (cat build.log && exit 1)" + ] + } + } + , ["find ./install -type l -delete"] , { "type": "if" , "cond": {"type": "var", "name": "post_cmds"} , "then": @@ -282,12 +302,6 @@ , "else": ["DESTDIR"] } , {"type": "var", "name": "make_options"} - , { "type": "if" - , "cond": {"type": "var", "name": "make_target"} - , "then": - [{"type": "join", "$1": {"type": "var", "name": "make_target"}}] - , "else": ["install"] - } , [ { "type": "join" , "$1": { "type": "++" diff --git a/CC/foreign/make/RULES b/CC/foreign/make/RULES index 7ae684f..b982946 100644 --- a/CC/foreign/make/RULES +++ b/CC/foreign/make/RULES @@ -3,6 +3,7 @@ , "target_fields": ["project"] , "string_fields": [ "subdir" + , "targets" , "prefix" , "options" , "jobs" @@ -41,6 +42,10 @@ [ "The subdirectory that contains the configure and Makefile. Individual" , "directory components are joined with \"/\"." ] + , "targets": + [ "The Make targets to build in the specified order" + , "(default: [\"install\"])." + ] , "prefix": [ "The prefix used for the Make target. The path will be made absolute" , "and individual directory components are joined with \"/\". If no" @@ -199,6 +204,7 @@ } ] , ["subdir", {"type": "FIELD", "name": "subdir"}] + , ["make_targets", {"type": "FIELD", "name": "targets"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] , ["make_jobs", {"type": "FIELD", "name": "jobs"}] @@ -265,7 +271,7 @@ , "name" , "version" , "stage" - , "target" + , "targets" , "prefix" , "options" , "jobs" @@ -322,7 +328,10 @@ [ "The library version, used for pkg-config files. Individual version" , "components are joined with \".\"." ] - , "target": ["The Make target to build (default: [\"install\"])."] + , "targets": + [ "The Make targets to build in the specified order" + , "(default: [\"install\"])." + ] , "prefix": [ "The prefix used for the Make target. The path will be made absolute" , "and individual directory components are joined with \"/\". If no" @@ -590,6 +599,7 @@ } ] , ["subdir", {"type": "FIELD", "name": "subdir"}] + , ["make_targets", {"type": "FIELD", "name": "targets"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] , ["make_jobs", {"type": "FIELD", "name": "jobs"}] -- cgit v1.2.3 From e881a7945c501c1b328cd8012f81687621a5954b Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 16 Feb 2023 12:58:33 +0100 Subject: rules-cc/foreign/make: Support configure step --- CC/foreign/make/EXPRESSIONS | 62 +++++++++++++++++++++++++++++++++++---------- CC/foreign/make/RULES | 18 +++++++++++-- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index be468e7..e175528 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -2,6 +2,8 @@ { "vars": [ "source_dir" , "subdir" + , "configure" + , "configure_options" , "make_targets" , "make_prefix" , "make_options" @@ -108,6 +110,20 @@ } } ] + , [ "PREFIX" + , { "type": "if" + , "cond": {"type": "var", "name": "make_prefix"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + { "type": "++" + , "$1": [[""], {"type": "var", "name": "make_prefix"}] + } + } + , "else": {"type": "var", "name": "PREFIX", "default": "/"} + } + ] , [ "ENV" , { "type": "map_union" , "$1": @@ -187,19 +203,7 @@ {"type": "join", "$1": {"type": "var", "name": "var_prefix"}} , "else": "PREFIX" } - , "value": - { "type": "if" - , "cond": {"type": "var", "name": "make_prefix"} - , "then": - { "type": "join" - , "separator": "/" - , "$1": - { "type": "++" - , "$1": [[""], {"type": "var", "name": "make_prefix"}] - } - } - , "else": {"type": "var", "name": "PREFIX", "default": "/"} - } + , "value": {"type": "var", "name": "PREFIX"} } ] } @@ -210,6 +214,21 @@ , "$1": {"type": "var", "name": "subdir", "default": []} } ] + , [ "configure_args" + , { "type": "if" + , "cond": {"type": "var", "name": "configure"} + , "then": + { "type": "++" + , "$1": + [ {"type": "var", "name": "configure_options", "default": []} + , [ { "type": "join" + , "$1": ["--prefix=", {"type": "var", "name": "PREFIX"}] + } + ] + ] + } + } + ] , [ "make_targets" , { "type": "if" , "cond": {"type": "var", "name": "make_targets"} @@ -247,6 +266,23 @@ , "readonly VAR_DESTDIR=$2" , "shift 2" ] + , { "type": "if" + , "cond": {"type": "var", "name": "configure_args"} + , "then": + [ "( readonly ROOT=\"$(pwd)\"" + , " cd \"source/${SUBDIR}\"" + , { "type": "join" + , "$1": + [ "./configure " + , { "type": "join_cmd" + , "$1": {"type": "var", "name": "configure_args"} + } + , " >\"${ROOT}/configure.log\" || (cat \"${ROOT}/configure.log\" && exit 1)" + ] + } + , ")" + ] + } , { "type": "foreach" , "range": {"type": "var", "name": "make_targets"} , "var": "target" diff --git a/CC/foreign/make/RULES b/CC/foreign/make/RULES index b982946..2a6b2da 100644 --- a/CC/foreign/make/RULES +++ b/CC/foreign/make/RULES @@ -1,8 +1,10 @@ { "data": - { "doc": ["Data produced by Make build and install."] + { "doc": ["Data produced by Configure and Make build and install."] , "target_fields": ["project"] , "string_fields": [ "subdir" + , "configure" + , "configure_options" , "targets" , "prefix" , "options" @@ -42,6 +44,9 @@ [ "The subdirectory that contains the configure and Makefile. Individual" , "directory components are joined with \"/\"." ] + , "configure": ["Run ./configure if non-empty."] + , "configure_options": + ["The configure options (the \"--prefix\" option is automatically set."] , "targets": [ "The Make targets to build in the specified order" , "(default: [\"install\"])." @@ -204,6 +209,8 @@ } ] , ["subdir", {"type": "FIELD", "name": "subdir"}] + , ["configure", {"type": "FIELD", "name": "configure"}] + , ["configure_options", {"type": "FIELD", "name": "configure_options"}] , ["make_targets", {"type": "FIELD", "name": "targets"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] @@ -264,13 +271,15 @@ } } , "library": - { "doc": ["Library produced by Make build and install."] + { "doc": ["Library produced by Configure and Make build and install."] , "target_fields": ["project", "deps"] , "string_fields": [ "subdir" , "name" , "version" , "stage" + , "configure" + , "configure_options" , "targets" , "prefix" , "options" @@ -328,6 +337,9 @@ [ "The library version, used for pkg-config files. Individual version" , "components are joined with \".\"." ] + , "configure": ["Run ./configure if non-empty."] + , "configure_options": + ["The configure options (the \"--prefix\" option is automatically set."] , "targets": [ "The Make targets to build in the specified order" , "(default: [\"install\"])." @@ -599,6 +611,8 @@ } ] , ["subdir", {"type": "FIELD", "name": "subdir"}] + , ["configure", {"type": "FIELD", "name": "configure"}] + , ["configure_options", {"type": "FIELD", "name": "configure_options"}] , ["make_targets", {"type": "FIELD", "name": "targets"}] , ["make_prefix", {"type": "FIELD", "name": "prefix"}] , ["make_options", {"type": "FIELD", "name": "options"}] -- cgit v1.2.3 From 4b9357a7ecacdef1b9913872dcb05e215670ea53 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Wed, 3 May 2023 18:17:27 +0200 Subject: rules-cc/foreign: Also redirect stderr to log file --- CC/foreign/cmake/EXPRESSIONS | 4 ++-- CC/foreign/make/EXPRESSIONS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS index bdb05ce..53d6497 100644 --- a/CC/foreign/cmake/EXPRESSIONS +++ b/CC/foreign/cmake/EXPRESSIONS @@ -179,7 +179,7 @@ , [ "readonly CMAKE_SUBDIR=\"$1\"" , "readonly CMAKE_AR=$(which $2)" , "shift 2" - , "cmake \"$@\" -S\"source/${CMAKE_SUBDIR}\" -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)" + , "cmake \"$@\" -S\"source/${CMAKE_SUBDIR}\" -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log 2>&1 || (cat configure.log && exit 1)" ] , [ { "type": "join" , "separator": " " @@ -187,7 +187,7 @@ { "type": "++" , "$1": [ {"type": "var", "name": "CMAKE_JOBS"} - , [ "cmake --build build --target install >build.log || (cat configure.log build.log && exit 1)" + , [ "cmake --build build --target install >build.log 2>&1 || (cat configure.log build.log && exit 1)" ] ] } diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index e175528..fb85101 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -277,7 +277,7 @@ , { "type": "join_cmd" , "$1": {"type": "var", "name": "configure_args"} } - , " >\"${ROOT}/configure.log\" || (cat \"${ROOT}/configure.log\" && exit 1)" + , " >\"${ROOT}/configure.log\" 2>&1 || (cat \"${ROOT}/configure.log\" && exit 1)" ] } , ")" @@ -293,7 +293,7 @@ , { "type": "join_cmd" , "$1": [{"type": "var", "name": "target"}] } - , " >>build.log || (cat build.log && exit 1)" + , " >>build.log 2>&1 || (cat build.log && exit 1)" ] } } -- cgit v1.2.3 From 0073a9c1c9c67ee6fe0fd064b6354bbd11bba50f Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Mon, 15 May 2023 11:28:04 +0200 Subject: rules-cc/foreign: Support toolchain deps --- CC/foreign/cmake/RULES | 2 +- CC/foreign/make/RULES | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CC/foreign/cmake/RULES b/CC/foreign/cmake/RULES index e5c7706..a53b92e 100644 --- a/CC/foreign/cmake/RULES +++ b/CC/foreign/cmake/RULES @@ -601,7 +601,7 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , ["deps-fieldnames", ["deps"]] + , ["deps-fieldnames", ["deps", "defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "prebuilt result"} } diff --git a/CC/foreign/make/RULES b/CC/foreign/make/RULES index 2a6b2da..8278e3f 100644 --- a/CC/foreign/make/RULES +++ b/CC/foreign/make/RULES @@ -700,7 +700,7 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , ["deps-fieldnames", ["deps"]] + , ["deps-fieldnames", ["deps", "defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "prebuilt result"} } -- cgit v1.2.3 From a86faea94836af1faf0a1392e6d5c6bd967ffdcd Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Mon, 15 May 2023 11:28:38 +0200 Subject: rules-cc/foreign: Set rpath --- CC/foreign/cmake/EXPRESSIONS | 1 + CC/foreign/make/EXPRESSIONS | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS index 53d6497..4c21f4b 100644 --- a/CC/foreign/cmake/EXPRESSIONS +++ b/CC/foreign/cmake/EXPRESSIONS @@ -61,6 +61,7 @@ , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"} , "then": ["-DCMAKE_POSITION_INDEPENDENT_CODE=ON"] } + , ["-DCMAKE_INSTALL_RPATH=$ORIGIN;$ORIGIN/../lib"] ] } ] diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS index fb85101..df2f98f 100644 --- a/CC/foreign/make/EXPRESSIONS +++ b/CC/foreign/make/EXPRESSIONS @@ -77,7 +77,8 @@ , "$1": { "type": "++" , "$1": - [ { "type": "var" + [ ["-Wl,-rpath,$ORIGIN", "-Wl,-rpath,$ORIGIN/../lib"] + , { "type": "var" , "name": "LDFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} -- cgit v1.2.3