From 23cf1c6532aaf60a258dd03884d0f215dbba4df7 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 11 Apr 2023 14:49:53 +0200 Subject: ["shell/test", "script"]: make TEST_RUN_NUMBER available If RUNS_PER_TEST is given, inform each individual test action about the run number it is executing. This can be used, e.g., to set random seeds appropriately. --- shell/test/EXPRESSIONS | 22 +++++++++++++++++++++- shell/test/RULES | 6 +++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/shell/test/EXPRESSIONS b/shell/test/EXPRESSIONS index d1d7e64..ea36b32 100644 --- a/shell/test/EXPRESSIONS +++ b/shell/test/EXPRESSIONS @@ -132,7 +132,27 @@ , {"type": "++", "$1": [["./runner"], {"type": "var", "name": "keep"}]} ] , [ "test_env" - , {"type": "var", "name": "TEST_ENV", "default": {"type": "empty_map"}} + , { "type": "map_union" + , "$1": + [ { "type": "if" + , "cond": + { "type": "==" + , "$1": {"type": "var", "name": "ATTEMPT"} + , "$2": null + } + , "then": {"type": "empty_map"} + , "else": + { "type": "singelton_map" + , "key": "TEST_RUN_NUMBER" + , "value": {"type": "var", "name": "ATTEMPT"} + } + } + , { "type": "var" + , "name": "TEST_ENV" + , "default": {"type": "empty_map"} + } + ] + } ] ] , "body": diff --git a/shell/test/RULES b/shell/test/RULES index 98bf27c..19f859f 100644 --- a/shell/test/RULES +++ b/shell/test/RULES @@ -12,6 +12,10 @@ , "TEST_TMPDIR. The test should not assume write permissions" , "outside the working directory and the TEST_TMPDIR." , "For convenience, the environment variable TMPDIR is also set to TEST_TMPDIR." + , "" + , "If the configuration variable RUNS_PER_TEST is set, the environment" + , "variable TEST_RUN_NUMBER will also be set to the number of the attempt," + , "counting from 0." ] , "name": [ "A name for the test, used in reporting, as well as for staging" @@ -32,7 +36,7 @@ [ "The number of times the test should be run in order to detect flakyness." , "If set, no test action will be taken from cache." ] - , "TEST_ENV": ["The environment for executing the test runner."] + , "TEST_ENV": ["Additional environment for executing the test runner."] } , "tainted": ["test"] , "artifacts_doc": -- cgit v1.2.3 From 9e48fcb5d91480d6c02e062e38506039058622f9 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Wed, 12 Apr 2023 15:02:49 +0200 Subject: rules: Drop CC/IDE headers rule --- CC/IDE/RULES | 96 ------------------------------------------------------------ 1 file changed, 96 deletions(-) delete mode 100644 CC/IDE/RULES diff --git a/CC/IDE/RULES b/CC/IDE/RULES deleted file mode 100644 index dc4b607..0000000 --- a/CC/IDE/RULES +++ /dev/null @@ -1,96 +0,0 @@ -{ "headers": - { "doc": ["Transitive public headers of C++ target"] - , "target_fields": ["proto", "deps"] - , "string_fields": ["stage"] - , "field_doc": - { "proto": ["The proto source files for creating cc bindings."] - , "deps": ["The targets to obtain the headers from."] - , "stage": - [ "The logical location of the header files. Individual directory" - , "components are joined with \"/\"." - ] - } - , "anonymous": - { "proto-deps": - { "target": "proto" - , "provider": "proto" - , "rule_map": - { "library": ["./", "../proto", "library"] - , "service library": ["./", "../proto", "service library"] - } - } - } - , "imports": {"runfiles_list": ["./", "../..", "field_runfiles_list"]} - , "expression": - { "type": "let*" - , "bindings": - [ [ "stage" - , { "type": "join" - , "separator": "/" - , "$1": {"type": "FIELD", "name": "stage"} - } - ] - , [ "artifacts" - , { "type": "to_subdir" - , "subdir": {"type": "var", "name": "stage"} - , "$1": - { "type": "map_union" - , "$1": - { "type": "++" - , "$1": - [ { "type": "let*" - , "bindings": [["fieldname", "proto-deps"]] - , "body": - {"type": "CALL_EXPRESSION", "name": "runfiles_list"} - } - , { "type": "foreach" - , "var": "x" - , "range": {"type": "FIELD", "name": "proto-deps"} - , "body": - { "type": "DEP_PROVIDES" - , "provider": "compile-deps" - , "dep": {"type": "var", "name": "x"} - , "default": - { "type": "fail" - , "msg": - [ "Expected a library target, but got:" - , {"type": "var", "name": "x"} - ] - } - } - } - , { "type": "let*" - , "bindings": [["fieldname", "deps"]] - , "body": - {"type": "CALL_EXPRESSION", "name": "runfiles_list"} - } - , { "type": "foreach" - , "var": "x" - , "range": {"type": "FIELD", "name": "deps"} - , "body": - { "type": "DEP_PROVIDES" - , "provider": "compile-deps" - , "dep": {"type": "var", "name": "x"} - , "default": - { "type": "fail" - , "msg": - [ "Expected a library target, but got:" - , {"type": "var", "name": "x"} - ] - } - } - } - ] - } - } - } - ] - ] - , "body": - { "type": "RESULT" - , "artifacts": {"type": "var", "name": "artifacts"} - , "runfiles": {"type": "var", "name": "artifacts"} - } - } - } -} -- cgit v1.2.3 From 6d2cdd86555b58726b5f2e7385a8e89cfe5bbefc Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Fri, 31 Mar 2023 16:11:00 +0200 Subject: rules: Support creating compile/link flags from pkg-config --- CC/pkgconfig/EXPRESSIONS | 136 +++++++++++++++++++++++++++++++++++++++++++++++ CC/pkgconfig/RULES | 52 ++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 CC/pkgconfig/EXPRESSIONS create mode 100644 CC/pkgconfig/RULES diff --git a/CC/pkgconfig/EXPRESSIONS b/CC/pkgconfig/EXPRESSIONS new file mode 100644 index 0000000..c770421 --- /dev/null +++ b/CC/pkgconfig/EXPRESSIONS @@ -0,0 +1,136 @@ +{ "pkgconfig result": + { "vars": ["ENV", "name", "args", "stage"] + , "imports": {"default-ENV": ["./", "..", "default-ENV"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "ENV" + , { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , [ { "type": "var" + , "name": "ENV" + , "default": {"type": "empty_map"} + } + ] + ] + } + } + ] + , [ "cflags-filename" + , {"type": "join", "$1": [{"type": "var", "name": "name"}, ".cflags"]} + ] + , [ "cflags-files" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "stage"} + , "$1": + { "type": "ACTION" + , "inputs": {"type": "empty_map"} + , "cmd": + [ "/bin/sh" + , "-c" + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["pkg-config"] + , [ { "type": "join_cmd" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "args", "default": []} + , ["--cflags", {"type": "var", "name": "name"}] + ] + } + } + ] + , [">"] + , [ { "type": "join_cmd" + , "$1": {"type": "var", "name": "cflags-filename"} + } + ] + ] + } + } + ] + , "env": {"type": "var", "name": "ENV"} + , "outs": [{"type": "var", "name": "cflags-filename"}] + } + } + ] + , [ "compile-args" + , { "type": "foreach_map" + , "var_key": "flag-file" + , "range": {"type": "var", "name": "cflags-files"} + , "body": + {"type": "join", "$1": ["@", {"type": "var", "name": "flag-file"}]} + } + ] + , [ "ldflags-filename" + , {"type": "join", "$1": [{"type": "var", "name": "name"}, ".ldflags"]} + ] + , [ "ldflags-files" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "stage"} + , "$1": + { "type": "ACTION" + , "inputs": {"type": "empty_map"} + , "cmd": + [ "/bin/sh" + , "-c" + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["pkg-config"] + , [ { "type": "join_cmd" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "args", "default": []} + , ["--libs", {"type": "var", "name": "name"}] + ] + } + } + ] + , [">"] + , [ { "type": "join_cmd" + , "$1": {"type": "var", "name": "ldflags-filename"} + } + ] + ] + } + } + ] + , "env": {"type": "var", "name": "ENV"} + , "outs": [{"type": "var", "name": "ldflags-filename"}] + } + } + ] + , [ "link-args" + , { "type": "foreach_map" + , "var_key": "flag-file" + , "range": {"type": "var", "name": "ldflags-files"} + , "body": + {"type": "join", "$1": ["@", {"type": "var", "name": "flag-file"}]} + } + ] + , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}] + , ["compile-deps", {"type": "empty_map"}] + , ["link-deps", {"type": "empty_map"}] + ] + , "body": + { "type": "RESULT" + , "provides": + { "type": "env" + , "vars": + ["compile-deps", "compile-args", "link-deps", "link-args", "package"] + } + } + } + } +} diff --git a/CC/pkgconfig/RULES b/CC/pkgconfig/RULES new file mode 100644 index 0000000..a6f6ce8 --- /dev/null +++ b/CC/pkgconfig/RULES @@ -0,0 +1,52 @@ +{ "system_library": + { "doc": ["A system library via pkg-config"] + , "string_fields": ["name", "args", "stage"] + , "implicit": {"defaults": [["./", "..", "defaults"]]} + , "config_vars": ["PKG_CONFIG_ARGS", "ENV"] + , "field_doc": + { "name": ["The pkg-config name of the library."] + , "args": + [ "Additional pkg-config arguments (e.g., \"--define-prefix\" or" + , "\"--static\"), appended to the config variable \"PKG_CONFIG_ARGS\"." + ] + , "stage": ["The stage of the internally created flag files."] + } + , "config_doc": + { "PKG_CONFIG_ARGS": + [ "Additional pkg-config arguments (e.g., \"--define-prefix\" or" + , "\"--static\")." + ] + , "ENV": + [ "The environment for any action generated. May contain colon-separated" + , "\"PKG_CONFIG_PATH\" for looking up pkg-config files." + ] + } + , "imports": {"pkgconfig result": "pkgconfig result"} + , "expression": + { "type": "let*" + , "bindings": + [ [ "name" + , { "type": "assert_non_empty" + , "msg": "system_library requires non-empty name" + , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}} + } + ] + , [ "args" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "PKG_CONFIG_ARGS", "default": []} + , {"type": "FIELD", "name": "args"} + ] + } + ] + , [ "stage" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "FIELD", "name": "stage"} + } + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "pkgconfig result"} + } + } +} -- cgit v1.2.3 From 6eefec871e09b3d74b4861beec010fdaf9e47b85 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Fri, 31 Mar 2023 14:51:02 +0200 Subject: rules: Support reading flags from files for existing rules Backport of commit 4a8579a2a4ef252644df0c29893e70ad8438ae82 from the rules-cc repository. --- CC/EXPRESSIONS | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- CC/test/RULES | 8 ++++ 2 files changed, 121 insertions(+), 1 deletion(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 7beac0a..7a8c531 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -255,6 +255,77 @@ } } } +, "pkg-map-provider-deps": + { "doc": ["Collect maps from provider \"package\" for given target_fields"] + , "vars": ["pkg-key", "deps-fieldnames", "deps-transition"] + , "vars_doc": + { "pkg-key": ["Key to lookup in provider \"package\"."] + , "deps-fieldnames": ["List of target_field names to collect maps from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "expression": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "package"] + , ["default", {"type": "empty_map"}] + , ["transition", {"type": "var", "name": "deps-transition"}] + ] + , "body": + { "type": "foreach" + , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} + , "var": "map" + , "body": + { "type": "lookup" + , "key": {"type": "var", "name": "pkg-key"} + , "map": {"type": "var", "name": "map"} + , "default": {"type": "empty_map"} + } + } + } + } + } + } + } +, "cflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": ["List of target_field names to collect files from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"pkg-provider": "pkg-map-provider-deps"} + , "expression": + { "type": "let*" + , "bindings": [["pkg-key", "cflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } +, "ldflags-files-deps": + { "doc": ["Collect cflags files from target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": ["List of target_field names to collect files from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"pkg-provider": "pkg-map-provider-deps"} + , "expression": + { "type": "let*" + , "bindings": [["pkg-key", "ldflags-files"]] + , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} + } + } , "objects": { "vars": [ "COMPILER" @@ -264,6 +335,7 @@ , "hdrs" , "private-hdrs" , "compile-deps" + , "cflags-files" ] , "expression": { "type": "let*" @@ -317,6 +389,10 @@ , "key": {"type": "var", "name": "work src_name"} , "value": {"type": "var", "name": "src_val"} } + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } ] } ] @@ -465,6 +541,7 @@ , "stage" , "compile-deps" , "compile-args" + , "cflags-files" , "defaults-transition" ] , "imports": @@ -593,6 +670,8 @@ , "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" , "lib artifact": "lib artifact" } , "expression": @@ -612,6 +691,9 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}] , [ "link-args" @@ -626,6 +708,9 @@ } } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -639,6 +724,10 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}] ] , "body": { "type": "RESULT" @@ -649,7 +738,12 @@ , "$1": [ { "type": "env" , "vars": - ["compile-deps", "compile-args", "link-deps", "link-args"] + [ "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "package" + ] } , { "type": "var" , "name": "extra-provides" @@ -679,6 +773,8 @@ , "compile-args" , "link-deps" , "link-args" + , "cflags-files" + , "ldflags-files" , "defaults-transition" ] , "imports": @@ -749,6 +845,14 @@ , "$1": [ {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} + , { "type": "var" + , "name": "cflags-files" + , "default": {"type": "empty_map"} + } + , { "type": "var" + , "name": "ldflags-files" + , "default": {"type": "empty_map"} + } ] } , "cmd": @@ -793,6 +897,8 @@ , "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" } , "expression": @@ -820,6 +926,12 @@ } } ] + , [ "cflags-files" + , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} + ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] ] , "body": { "type": "RESULT" diff --git a/CC/test/RULES b/CC/test/RULES index 3821339..6903580 100644 --- a/CC/test/RULES +++ b/CC/test/RULES @@ -101,6 +101,8 @@ , "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"] } @@ -149,6 +151,9 @@ , ["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": "++" @@ -164,6 +169,9 @@ ] } ] + , [ "ldflags-files" + , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} + ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , [ "link-args" , { "type": "++" -- cgit v1.2.3 From 7be3cd35b3695f7f931fdd9e3490d0be517ed0ad Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 4 Apr 2023 18:29:06 +0200 Subject: rules: Update dependency on protobuf and grpc targets --- CC/proto/EXPRESSIONS | 8 ++++---- CC/proto/RULES | 11 +++-------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/CC/proto/EXPRESSIONS b/CC/proto/EXPRESSIONS index 1ab17a5..3341637 100644 --- a/CC/proto/EXPRESSIONS +++ b/CC/proto/EXPRESSIONS @@ -23,7 +23,7 @@ , "imports": { "stage": ["", "stage_singleton_field"] , "result": ["./", "..", "lib result"] - , "artifacts": ["./", "../..", "field_artifacts"] + , "runfiles": ["./", "../..", "field_runfiles"] , "artifacts_list": ["./", "../..", "field_artifacts_list"] , "protoc-deps": "protoc-deps" } @@ -62,8 +62,8 @@ , "subdir": "work" , "$1": { "type": "let*" - , "bindings": [["fieldname", "well_known_protos"]] - , "body": {"type": "CALL_EXPRESSION", "name": "artifacts"} + , "bindings": [["fieldname", "proto-deps"]] + , "body": {"type": "CALL_EXPRESSION", "name": "runfiles"} } } ] @@ -299,7 +299,7 @@ } ] , ["cflags", []] - , ["private-cflags", ["-Wno-sign-conversion", "-Wno-unused-function"]] + , ["private-cflags", []] , ["private-ldflags", []] ] , "body": {"type": "CALL_EXPRESSION", "name": "result"} diff --git a/CC/proto/RULES b/CC/proto/RULES index 39d342f..89d1e34 100644 --- a/CC/proto/RULES +++ b/CC/proto/RULES @@ -12,8 +12,7 @@ , "implicit": { "protoc": [["@", "protoc", "", "protoc"]] , "defaults": [["./", "..", "defaults"]] - , "proto-deps": [["@", "protoc", "", "C++ runtime"]] - , "well_known_protos": [["@", "protoc", "", "well_known_protos"]] + , "proto-deps": [["@", "protoc", "", "libprotobuf"]] } , "imports": { "protoc-compile": "protoc-compile" @@ -53,14 +52,10 @@ ["OS", "ARCH", "HOST_ARCH", "CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] , "implicit": { "protoc": [["@", "protoc", "", "protoc"]] - , "grpc_cpp_plugin": [["@", "grpc", "src/compiler", "grpc_cpp_plugin"]] + , "grpc_cpp_plugin": [["@", "grpc", "", "grpc_cpp_plugin"]] , "defaults": [["./", "..", "defaults"]] , "proto-deps": - [ ["@", "grpc", "", "grpc++_codegen_proto"] - , ["@", "grpc", "", "grpc++_codegen_base_src"] - , ["@", "protoc", "", "C++ runtime"] - ] - , "well_known_protos": [["@", "protoc", "", "well_known_protos"]] + [["@", "grpc", "", "grpc++"], ["@", "protoc", "", "libprotobuf"]] } , "imports": { "protoc-compile": "protoc-compile" -- cgit v1.2.3 From 67afc2947e7e73e68955fd0638a24eb39c8c724a Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 11 Apr 2023 18:42:33 +0200 Subject: rules: Fix missing CXXFLAGS propagation for proto libs --- CC/proto/RULES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CC/proto/RULES b/CC/proto/RULES index af484b0..39d342f 100644 --- a/CC/proto/RULES +++ b/CC/proto/RULES @@ -8,7 +8,7 @@ , "string_fields": ["name", "stage"] , "target_fields": ["srcs", "deps"] , "config_vars": - ["OS", "ARCH", "HOST_ARCH", "CXX", "CFLAGS", "ADD_CFLAGS", "AR", "ENV"] + ["OS", "ARCH", "HOST_ARCH", "CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] , "implicit": { "protoc": [["@", "protoc", "", "protoc"]] , "defaults": [["./", "..", "defaults"]] -- cgit v1.2.3 From f54fda7279b234a3d2960de514339592ef258a2f Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Tue, 11 Apr 2023 18:53:05 +0200 Subject: rules: Support install-with-deps rule Backport of commits a382b308b9011606e7d07376808812d51631d558 and 5ae5134804b6edaaffec593868f133dd840ef7df from the rules-cc repository. --- CC/EXPRESSIONS | 187 +++++++++++++++++++++++++++++++++++++++++- CC/RULES | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EXPRESSIONS | 47 +++++++++++ 3 files changed, 488 insertions(+), 1 deletion(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 7a8c531..b33056e 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -326,6 +326,182 @@ , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} } } +, "pkg-prefix-lib-paths": + { "doc": ["Detect ldflags referring to local libs and prefix them."] + , "vars": ["pkg-ldflags", "pkg-libs", "flat-libs", "lib-prefix"] + , "imports": {"contains": ["", "contains"]} + , "expression": + { "type": "let*" + , "bindings": + [["list", {"type": "keys", "$1": {"type": "var", "name": "pkg-libs"}}]] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "pkg-ldflags"} + , "body": + { "type": "if" + , "cond": {"type": "CALL_EXPRESSION", "name": "contains"} + , "then": + { "type": "join" + , "$1": + { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": + [ "-l:" + , {"type": "basename", "$1": {"type": "var", "name": "item"}} + ] + , "else": + [ {"type": "var", "name": "lib-prefix"} + , "/" + , {"type": "var", "name": "item"} + ] + } + } + , "else": {"type": "var", "name": "item"} + } + } + } + } +, "pkg-prefix-flag-paths": + { "doc": ["Detect flags referring to local flag files and prefix them."] + , "vars": ["flags", "pkg-flag-files", "flag-prefix"] + , "imports": {"contains": ["", "contains"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "list" + , {"type": "keys", "$1": {"type": "var", "name": "pkg-flag-files"}} + ] + , ["list_prefix", "@"] + ] + , "body": + { "type": "foreach" + , "var": "item" + , "range": {"type": "var", "name": "flags"} + , "body": + { "type": "let*" + , "bindings": + [["flag-file", {"type": "CALL_EXPRESSION", "name": "contains"}]] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "flag-file"} + , "then": + { "type": "join" + , "$1": + [ "@" + , {"type": "var", "name": "flag-prefix"} + , "/" + , {"type": "var", "name": "flag-file"} + ] + } + , "else": {"type": "var", "name": "item"} + } + } + } + } + } +, "pkg-config": + { "vars": + [ "pkg-name" + , "pkg-prefix" + , "pkg-version" + , "pkg-cflags" + , "pkg-ldflags" + , "pkg-flag-files" + , "pkg-libs" + , "flat-libs" + , "pc-install-dir" + ] + , "imports": + { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths" + , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["lib-prefix", "${libdir}"] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-lib-paths"} + ] + , [ "flag-prefix" + , { "type": "join" + , "$1": ["${prefix}/", {"type": "var", "name": "pc-install-dir"}] + } + ] + , ["flags", {"type": "var", "name": "pkg-cflags"}] + , [ "pkg-cflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + , ["flags", {"type": "var", "name": "pkg-ldflags"}] + , [ "pkg-ldflags" + , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} + ] + ] + , "body": + { "type": "singleton_map" + , "key": + {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]} + , "value": + { "type": "BLOB" + , "data": + { "type": "join" + , "separator": "\n" + , "$1": + [ { "type": "join" + , "$1": + [ "prefix=" + , {"type": "var", "name": "pkg-prefix", "default": "/"} + ] + } + , "libdir=${prefix}/lib" + , "includedir=${prefix}/include" + , { "type": "join" + , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}] + } + , { "type": "join" + , "$1": + [ "Version: " + , {"type": "var", "name": "pkg-version", "default": "unknown"} + ] + } + , { "type": "join" + , "$1": + [ "Description: Pkg-config for " + , {"type": "var", "name": "pkg-name"} + , ", generated by JustBuild" + ] + } + , "URL: unknown" + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Cflags:", "-I${includedir}"] + , {"type": "var", "name": "pkg-cflags"} + ] + } + } + , { "type": "join" + , "separator": " " + , "$1": + { "type": "++" + , "$1": + [ ["Libs:"] + , { "type": "if" + , "cond": {"type": "var", "name": "flat-libs"} + , "then": ["-L${libdir}"] + } + , {"type": "var", "name": "pkg-ldflags"} + ] + } + } + ] + } + } + } + } + } , "objects": { "vars": [ "COMPILER" @@ -661,6 +837,7 @@ , "private-cflags" , "private-ldflags" , "stage" + , "pkg-name" , "extra-provides" , "public-fieldnames" , "private-fieldnames" @@ -727,7 +904,13 @@ , [ "cflags-files" , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} ] - , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}] + , [ "package" + , { "type": "let*" + , "bindings": [["name", {"type": "var", "name": "pkg-name"}]] + , "body": + {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]} + } + ] ] , "body": { "type": "RESULT" @@ -932,10 +1115,12 @@ , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] + , ["package", {"type": "singleton_map", "key": "to_bin", "value": true}] ] , "body": { "type": "RESULT" , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} + , "provides": {"type": "env", "vars": ["package"]} } } } diff --git a/CC/RULES b/CC/RULES index 2b420fb..45b9035 100644 --- a/CC/RULES +++ b/CC/RULES @@ -122,6 +122,7 @@ , "cflags" , "private-cflags" , "private-ldflags" + , "pkg-name" ] , "config_vars": [ "CC" @@ -181,6 +182,10 @@ , "duplicate work will be carried out, even if the same proto library" , "is used at various places)." ] + , "pkg-name": + [ "Name to use for pkg-config files. If this field is empty, the field" + , "\"name\" is used instead." + ] } , "config_doc": { "CC": @@ -318,6 +323,14 @@ } ] , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}] + , [ "pkg-name" + , { "type": "if" + , "cond": {"type": "FIELD", "name": "pkg-name"} + , "then": + {"type": "join", "$1": {"type": "FIELD", "name": "pkg-name"}} + , "else": {"type": "var", "name": "name"} + } + ] , ["public-fieldnames", ["deps", "proto-deps"]] , ["private-fieldnames", ["deps", "private-deps", "proto-deps"]] ] @@ -462,4 +475,246 @@ , "body": {"type": "CALL_EXPRESSION", "name": "bin result"} } } +, "install-with-deps": + { "doc": + [ "Install target's artifacts with transitive dependencies. Depending on" + , "the target, artifacts and dependencies will be installed to" + , "subdirectories \"bin\", \"include\", and \"lib\". For library targets," + , "a pkg-config file is generated and provided in \"share/pkgconfig\"." + ] + , "config_vars": ["PREFIX"] + , "target_fields": ["targets"] + , "string_fields": ["flat-libs", "prefix"] + , "imports": + { "compile-deps": "compile-deps" + , "compile-args-deps": "compile-args-deps" + , "link-deps": "link-deps" + , "link-args-deps": "link-args-deps" + , "pkg-config": "pkg-config" + } + , "field_doc": + { "targets": ["Targets to install artifacts from."] + , "flat-libs": + [ "Install libraries flat to the \"lib\" subdirectory. Be aware that" + , "conflicts may occur if any of the (transitive) libraries happen to" + , "have the same base name." + ] + , "prefix": + [ "The prefix used for pkg-config files. The path will be made absolute" + , "and individual directory components are joined with \"/\". If no" + , "prefix is specified, the value from the config variable \"PREFIX\" is" + , "taken, with the default value being \"/\"." + ] + } + , "config_doc": + { "PREFIX": + [ "The absolute path that is used as prefix inside generated pkg-config" + , "files. The default value for this variable is \"/\". This variable" + , "is ignored if the field \"prefix\" is set." + ] + } + , "artifacts_doc": + ["Installed artifacts in subdirectories (\"bin\"/\"include\"/\"lib\")."] + , "expression": + { "type": "let*" + , "bindings": + [ ["pc-install-dir", "share/pkgconfig"] + , [ "install-stage" + , { "type": "disjoint_map_union" + , "msg": "install stages may not overlap" + , "$1": + { "type": "foreach" + , "var": "target" + , "range": {"type": "FIELD", "name": "targets"} + , "body": + { "type": "let*" + , "bindings": + [ [ "artifacts" + , { "type": "DEP_ARTIFACTS" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "runfiles" + , { "type": "DEP_RUNFILES" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "compile-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "link-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "package" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "package" + , "default": {"type": "empty_map"} + } + ] + , [ "to_bin" + , { "type": "lookup" + , "key": "to_bin" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "binaries" + , { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": {"type": "var", "name": "artifacts"} + , "else": {"type": "empty_map"} + } + ] + , [ "headers" + , { "type": "disjoint_map_union" + , "msg": "headers may not overlap" + , "$1": + [ {"type": "var", "name": "runfiles"} + , {"type": "var", "name": "compile-deps"} + ] + } + ] + , [ "libraries" + , { "type": "disjoint_map_union" + , "msg": "libraries may not overlap" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": [] + , "else": [{"type": "var", "name": "artifacts"}] + } + , [{"type": "var", "name": "link-deps"}] + ] + } + } + ] + , [ "pkg-name" + , { "type": "lookup" + , "key": "name" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-name"} + , "then": + { "type": "let*" + , "bindings": + [ [ "pkg-prefix" + , { "type": "if" + , "cond": {"type": "FIELD", "name": "prefix"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + { "type": "++" + , "$1": + [[""], {"type": "FIELD", "name": "prefix"}] + } + } + , "else": + {"type": "var", "name": "PREFIX", "default": "/"} + } + ] + , [ "pkg-version" + , { "type": "lookup" + , "key": "version" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-cflags" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-args" + , "default": [] + } + ] + , [ "pkg-ldflags" + , { "type": "++" + , "$1": + [ { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-args" + , "default": [] + } + ] + } + ] + , [ "pkg-flag-files" + , { "type": "map_union" + , "$1": + [ { "type": "lookup" + , "key": "cflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + , { "type": "lookup" + , "key": "ldflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + ] + } + ] + , ["pkg-libs", {"type": "var", "name": "libraries"}] + , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}] + ] + , "body": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "pkg-config"} + , {"type": "var", "name": "pkg-flag-files"} + ] + } + } + , "else": {"type": "empty_map"} + } + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "bin" + , "flat": true + , "msg": "install binaries may not overlap" + , "$1": {"type": "var", "name": "binaries"} + } + , { "type": "to_subdir" + , "subdir": "include" + , "$1": {"type": "var", "name": "headers"} + } + , { "type": "to_subdir" + , "subdir": "lib" + , "flat": {"type": "FIELD", "name": "flat-libs"} + , "msg": "install libraries may not overlap" + , "$1": {"type": "var", "name": "libraries"} + } + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "pc-install-dir"} + , "$1": {"type": "var", "name": "pkg-config"} + } + ] + } + } + } + } + ] + ] + , "body": + {"type": "RESULT", "artifacts": {"type": "var", "name": "install-stage"}} + } + } } diff --git a/EXPRESSIONS b/EXPRESSIONS index b974026..c84ebf4 100644 --- a/EXPRESSIONS +++ b/EXPRESSIONS @@ -226,4 +226,51 @@ } } } +, "contains": + { "doc": ["Returns the item if it is in the list or \"null\" otherwise."] + , "vars": ["list", "item", "list_prefix"] + , "vars_doc": + { "list": ["The list to look for the item."] + , "item": ["The item to look for in the list."] + , "list_prefix": + [ "An optional string, which every item in the list is prefixed with" + , "before comparison. Note that the returned item is not prefixed." + ] + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "result" + , { "type": "++" + , "$1": + { "type": "foreach" + , "var": "entry" + , "range": {"type": "var", "name": "list"} + , "body": + { "type": "if" + , "cond": + { "type": "==" + , "$1": + { "type": "join" + , "$1": + [ {"type": "var", "name": "list_prefix", "default": ""} + , {"type": "var", "name": "entry"} + ] + } + , "$2": {"type": "var", "name": "item"} + } + , "then": [{"type": "var", "name": "entry"}] + } + } + } + ] + ] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "result"} + , "then": {"type": "join", "$1": {"type": "var", "name": "result"}} + , "else": null + } + } + } } -- cgit v1.2.3 From 9e061c2705e6fc9516b3c88a8db99882aed0f433 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Wed, 12 Apr 2023 14:38:49 +0200 Subject: rules: Move install-with-deps to EXPRESSIONS --- CC/EXPRESSIONS | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++ CC/RULES | 212 ++++----------------------------------------------------- 2 files changed, 210 insertions(+), 199 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index b33056e..f8f9d2a 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -1124,4 +1124,201 @@ } } } +, "install-with-deps result": + { "vars": ["pc-install-dir", "targets", "prefix", "flat-libs"] + , "imports": + { "compile-deps": "compile-deps" + , "compile-args-deps": "compile-args-deps" + , "link-deps": "link-deps" + , "link-args-deps": "link-args-deps" + , "pkg-config": "pkg-config" + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "install-stage" + , { "type": "disjoint_map_union" + , "msg": "install stages may not overlap" + , "$1": + { "type": "foreach" + , "var": "target" + , "range": {"type": "var", "name": "targets"} + , "body": + { "type": "let*" + , "bindings": + [ [ "artifacts" + , { "type": "DEP_ARTIFACTS" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "runfiles" + , { "type": "DEP_RUNFILES" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "compile-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "link-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "package" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "package" + , "default": {"type": "empty_map"} + } + ] + , [ "to_bin" + , { "type": "lookup" + , "key": "to_bin" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "binaries" + , { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": {"type": "var", "name": "artifacts"} + , "else": {"type": "empty_map"} + } + ] + , [ "headers" + , { "type": "disjoint_map_union" + , "msg": "headers may not overlap" + , "$1": + [ {"type": "var", "name": "runfiles"} + , {"type": "var", "name": "compile-deps"} + ] + } + ] + , [ "libraries" + , { "type": "disjoint_map_union" + , "msg": "libraries may not overlap" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": [] + , "else": [{"type": "var", "name": "artifacts"}] + } + , [{"type": "var", "name": "link-deps"}] + ] + } + } + ] + , [ "pkg-name" + , { "type": "lookup" + , "key": "name" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-name"} + , "then": + { "type": "let*" + , "bindings": + [ [ "pkg-prefix" + , {"type": "var", "name": "prefix", "default": "/"} + ] + , [ "pkg-version" + , { "type": "lookup" + , "key": "version" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-cflags" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "compile-args" + , "default": [] + } + ] + , [ "pkg-ldflags" + , { "type": "++" + , "$1": + [ { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-args" + , "default": [] + } + ] + } + ] + , [ "pkg-flag-files" + , { "type": "map_union" + , "$1": + [ { "type": "lookup" + , "key": "cflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + , { "type": "lookup" + , "key": "ldflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + ] + } + ] + , ["pkg-libs", {"type": "var", "name": "libraries"}] + , ["flat-libs", {"type": "var", "name": "flat-libs"}] + ] + , "body": + { "type": "map_union" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "pkg-config"} + , {"type": "var", "name": "pkg-flag-files"} + ] + } + } + , "else": {"type": "empty_map"} + } + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "bin" + , "flat": true + , "msg": "install binaries may not overlap" + , "$1": {"type": "var", "name": "binaries"} + } + , { "type": "to_subdir" + , "subdir": "include" + , "$1": {"type": "var", "name": "headers"} + } + , { "type": "to_subdir" + , "subdir": "lib" + , "flat": {"type": "var", "name": "flat-libs"} + , "msg": "install libraries may not overlap" + , "$1": {"type": "var", "name": "libraries"} + } + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "pc-install-dir"} + , "$1": {"type": "var", "name": "pkg-config"} + } + ] + } + } + } + } + ] + ] + , "body": + {"type": "RESULT", "artifacts": {"type": "var", "name": "install-stage"}} + } + } } diff --git a/CC/RULES b/CC/RULES index 45b9035..9616a70 100644 --- a/CC/RULES +++ b/CC/RULES @@ -485,13 +485,7 @@ , "config_vars": ["PREFIX"] , "target_fields": ["targets"] , "string_fields": ["flat-libs", "prefix"] - , "imports": - { "compile-deps": "compile-deps" - , "compile-args-deps": "compile-args-deps" - , "link-deps": "link-deps" - , "link-args-deps": "link-args-deps" - , "pkg-config": "pkg-config" - } + , "imports": {"install result": "install-with-deps result"} , "field_doc": { "targets": ["Targets to install artifacts from."] , "flat-libs": @@ -519,202 +513,22 @@ { "type": "let*" , "bindings": [ ["pc-install-dir", "share/pkgconfig"] - , [ "install-stage" - , { "type": "disjoint_map_union" - , "msg": "install stages may not overlap" - , "$1": - { "type": "foreach" - , "var": "target" - , "range": {"type": "FIELD", "name": "targets"} - , "body": - { "type": "let*" - , "bindings": - [ [ "artifacts" - , { "type": "DEP_ARTIFACTS" - , "dep": {"type": "var", "name": "target"} - , "default": {"type": "empty_map"} - } - ] - , [ "runfiles" - , { "type": "DEP_RUNFILES" - , "dep": {"type": "var", "name": "target"} - , "default": {"type": "empty_map"} - } - ] - , [ "compile-deps" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "compile-deps" - , "default": {"type": "empty_map"} - } - ] - , [ "link-deps" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "link-deps" - , "default": {"type": "empty_map"} - } - ] - , [ "package" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "package" - , "default": {"type": "empty_map"} - } - ] - , [ "to_bin" - , { "type": "lookup" - , "key": "to_bin" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "binaries" - , { "type": "if" - , "cond": {"type": "var", "name": "to_bin"} - , "then": {"type": "var", "name": "artifacts"} - , "else": {"type": "empty_map"} - } - ] - , [ "headers" - , { "type": "disjoint_map_union" - , "msg": "headers may not overlap" - , "$1": - [ {"type": "var", "name": "runfiles"} - , {"type": "var", "name": "compile-deps"} - ] - } - ] - , [ "libraries" - , { "type": "disjoint_map_union" - , "msg": "libraries may not overlap" - , "$1": - { "type": "++" - , "$1": - [ { "type": "if" - , "cond": {"type": "var", "name": "to_bin"} - , "then": [] - , "else": [{"type": "var", "name": "artifacts"}] - } - , [{"type": "var", "name": "link-deps"}] - ] - } - } - ] - , [ "pkg-name" - , { "type": "lookup" - , "key": "name" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "pkg-config" - , { "type": "if" - , "cond": {"type": "var", "name": "pkg-name"} - , "then": - { "type": "let*" - , "bindings": - [ [ "pkg-prefix" - , { "type": "if" - , "cond": {"type": "FIELD", "name": "prefix"} - , "then": - { "type": "join" - , "separator": "/" - , "$1": - { "type": "++" - , "$1": - [[""], {"type": "FIELD", "name": "prefix"}] - } - } - , "else": - {"type": "var", "name": "PREFIX", "default": "/"} - } - ] - , [ "pkg-version" - , { "type": "lookup" - , "key": "version" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "pkg-cflags" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "compile-args" - , "default": [] - } - ] - , [ "pkg-ldflags" - , { "type": "++" - , "$1": - [ { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "link-args" - , "default": [] - } - ] - } - ] - , [ "pkg-flag-files" - , { "type": "map_union" - , "$1": - [ { "type": "lookup" - , "key": "cflags-files" - , "map": {"type": "var", "name": "package"} - , "default": {"type": "empty_map"} - } - , { "type": "lookup" - , "key": "ldflags-files" - , "map": {"type": "var", "name": "package"} - , "default": {"type": "empty_map"} - } - ] - } - ] - , ["pkg-libs", {"type": "var", "name": "libraries"}] - , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}] - ] - , "body": - { "type": "map_union" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "pkg-config"} - , {"type": "var", "name": "pkg-flag-files"} - ] - } - } - , "else": {"type": "empty_map"} - } - ] - ] - , "body": - { "type": "map_union" - , "$1": - [ { "type": "to_subdir" - , "subdir": "bin" - , "flat": true - , "msg": "install binaries may not overlap" - , "$1": {"type": "var", "name": "binaries"} - } - , { "type": "to_subdir" - , "subdir": "include" - , "$1": {"type": "var", "name": "headers"} - } - , { "type": "to_subdir" - , "subdir": "lib" - , "flat": {"type": "FIELD", "name": "flat-libs"} - , "msg": "install libraries may not overlap" - , "$1": {"type": "var", "name": "libraries"} - } - , { "type": "to_subdir" - , "subdir": {"type": "var", "name": "pc-install-dir"} - , "$1": {"type": "var", "name": "pkg-config"} - } - ] - } - } + , ["targets", {"type": "FIELD", "name": "targets"}] + , [ "prefix" + , { "type": "if" + , "cond": {"type": "FIELD", "name": "prefix"} + , "then": + { "type": "join" + , "separator": "/" + , "$1": + {"type": "++", "$1": [[""], {"type": "FIELD", "name": "prefix"}]} } + , "else": {"type": "var", "name": "PREFIX", "default": "/"} } ] + , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}] ] - , "body": - {"type": "RESULT", "artifacts": {"type": "var", "name": "install-stage"}} + , "body": {"type": "CALL_EXPRESSION", "name": "install result"} } } } -- cgit v1.2.3 From 0db46fee9f6ef1dea2b6fe8aee671850fb78391f Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Wed, 12 Apr 2023 15:02:08 +0200 Subject: rules: Support hdrs-only for install-with-deps rule --- CC/EXPRESSIONS | 282 ++++++++++++++++++++++++++++++--------------------------- CC/RULES | 4 +- 2 files changed, 151 insertions(+), 135 deletions(-) diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index f8f9d2a..3433598 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -1125,7 +1125,7 @@ } } , "install-with-deps result": - { "vars": ["pc-install-dir", "targets", "prefix", "flat-libs"] + { "vars": ["pc-install-dir", "targets", "prefix", "flat-libs", "hdrs-only"] , "imports": { "compile-deps": "compile-deps" , "compile-args-deps": "compile-args-deps" @@ -1146,13 +1146,7 @@ , "body": { "type": "let*" , "bindings": - [ [ "artifacts" - , { "type": "DEP_ARTIFACTS" - , "dep": {"type": "var", "name": "target"} - , "default": {"type": "empty_map"} - } - ] - , [ "runfiles" + [ [ "runfiles" , { "type": "DEP_RUNFILES" , "dep": {"type": "var", "name": "target"} , "default": {"type": "empty_map"} @@ -1165,33 +1159,6 @@ , "default": {"type": "empty_map"} } ] - , [ "link-deps" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "link-deps" - , "default": {"type": "empty_map"} - } - ] - , [ "package" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "package" - , "default": {"type": "empty_map"} - } - ] - , [ "to_bin" - , { "type": "lookup" - , "key": "to_bin" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "binaries" - , { "type": "if" - , "cond": {"type": "var", "name": "to_bin"} - , "then": {"type": "var", "name": "artifacts"} - , "else": {"type": "empty_map"} - } - ] , [ "headers" , { "type": "disjoint_map_union" , "msg": "headers may not overlap" @@ -1201,116 +1168,163 @@ ] } ] - , [ "libraries" - , { "type": "disjoint_map_union" - , "msg": "libraries may not overlap" - , "$1": - { "type": "++" - , "$1": - [ { "type": "if" - , "cond": {"type": "var", "name": "to_bin"} - , "then": [] - , "else": [{"type": "var", "name": "artifacts"}] + ] + , "body": + { "type": "if" + , "cond": {"type": "var", "name": "hdrs-only"} + , "then": {"type": "var", "name": "headers"} + , "else": + { "type": "let*" + , "bindings": + [ [ "artifacts" + , { "type": "DEP_ARTIFACTS" + , "dep": {"type": "var", "name": "target"} + , "default": {"type": "empty_map"} + } + ] + , [ "link-deps" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-deps" + , "default": {"type": "empty_map"} + } + ] + , [ "package" + , { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "package" + , "default": {"type": "empty_map"} + } + ] + , [ "to_bin" + , { "type": "lookup" + , "key": "to_bin" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "binaries" + , { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": {"type": "var", "name": "artifacts"} + , "else": {"type": "empty_map"} + } + ] + , [ "libraries" + , { "type": "disjoint_map_union" + , "msg": "libraries may not overlap" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "to_bin"} + , "then": [] + , "else": [{"type": "var", "name": "artifacts"}] + } + , [{"type": "var", "name": "link-deps"}] + ] } - , [{"type": "var", "name": "link-deps"}] - ] - } - } - ] - , [ "pkg-name" - , { "type": "lookup" - , "key": "name" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "pkg-config" - , { "type": "if" - , "cond": {"type": "var", "name": "pkg-name"} - , "then": - { "type": "let*" - , "bindings": - [ [ "pkg-prefix" - , {"type": "var", "name": "prefix", "default": "/"} - ] - , [ "pkg-version" - , { "type": "lookup" - , "key": "version" - , "map": {"type": "var", "name": "package"} - } - ] - , [ "pkg-cflags" - , { "type": "DEP_PROVIDES" - , "dep": {"type": "var", "name": "target"} - , "provider": "compile-args" - , "default": [] - } - ] - , [ "pkg-ldflags" - , { "type": "++" - , "$1": - [ { "type": "DEP_PROVIDES" + } + ] + , [ "pkg-name" + , { "type": "lookup" + , "key": "name" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-name"} + , "then": + { "type": "let*" + , "bindings": + [ ["pkg-prefix", {"type": "var", "name": "prefix"}] + , [ "pkg-version" + , { "type": "lookup" + , "key": "version" + , "map": {"type": "var", "name": "package"} + } + ] + , [ "pkg-cflags" + , { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} - , "provider": "link-args" + , "provider": "compile-args" , "default": [] } ] - } - ] - , [ "pkg-flag-files" - , { "type": "map_union" - , "$1": - [ { "type": "lookup" - , "key": "cflags-files" - , "map": {"type": "var", "name": "package"} - , "default": {"type": "empty_map"} + , [ "pkg-ldflags" + , { "type": "++" + , "$1": + [ { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "target"} + , "provider": "link-args" + , "default": [] + } + ] } - , { "type": "lookup" - , "key": "ldflags-files" - , "map": {"type": "var", "name": "package"} - , "default": {"type": "empty_map"} + ] + , [ "pkg-flag-files" + , { "type": "map_union" + , "$1": + [ { "type": "lookup" + , "key": "cflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + , { "type": "lookup" + , "key": "ldflags-files" + , "map": {"type": "var", "name": "package"} + , "default": {"type": "empty_map"} + } + ] + } + ] + , [ "pkg-libs" + , {"type": "var", "name": "libraries"} + ] + , [ "flat-libs" + , {"type": "var", "name": "flat-libs"} + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "CALL_EXPRESSION" + , "name": "pkg-config" } + , {"type": "var", "name": "pkg-flag-files"} ] } - ] - , ["pkg-libs", {"type": "var", "name": "libraries"}] - , ["flat-libs", {"type": "var", "name": "flat-libs"}] - ] - , "body": - { "type": "map_union" - , "$1": - [ {"type": "CALL_EXPRESSION", "name": "pkg-config"} - , {"type": "var", "name": "pkg-flag-files"} - ] + } + , "else": {"type": "empty_map"} } - } - , "else": {"type": "empty_map"} - } - ] - ] - , "body": - { "type": "map_union" - , "$1": - [ { "type": "to_subdir" - , "subdir": "bin" - , "flat": true - , "msg": "install binaries may not overlap" - , "$1": {"type": "var", "name": "binaries"} - } - , { "type": "to_subdir" - , "subdir": "include" - , "$1": {"type": "var", "name": "headers"} - } - , { "type": "to_subdir" - , "subdir": "lib" - , "flat": {"type": "var", "name": "flat-libs"} - , "msg": "install libraries may not overlap" - , "$1": {"type": "var", "name": "libraries"} - } - , { "type": "to_subdir" - , "subdir": {"type": "var", "name": "pc-install-dir"} - , "$1": {"type": "var", "name": "pkg-config"} + ] + ] + , "body": + { "type": "map_union" + , "$1": + [ { "type": "to_subdir" + , "subdir": "bin" + , "flat": true + , "msg": "install binaries may not overlap" + , "$1": {"type": "var", "name": "binaries"} + } + , { "type": "to_subdir" + , "subdir": "include" + , "$1": {"type": "var", "name": "headers"} + } + , { "type": "to_subdir" + , "subdir": "lib" + , "flat": {"type": "var", "name": "flat-libs"} + , "msg": "install libraries may not overlap" + , "$1": {"type": "var", "name": "libraries"} + } + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "pc-install-dir"} + , "$1": {"type": "var", "name": "pkg-config"} + } + ] } - ] + } } } } diff --git a/CC/RULES b/CC/RULES index 9616a70..ff642b9 100644 --- a/CC/RULES +++ b/CC/RULES @@ -484,7 +484,7 @@ ] , "config_vars": ["PREFIX"] , "target_fields": ["targets"] - , "string_fields": ["flat-libs", "prefix"] + , "string_fields": ["flat-libs", "prefix", "hdrs-only"] , "imports": {"install result": "install-with-deps result"} , "field_doc": { "targets": ["Targets to install artifacts from."] @@ -499,6 +499,7 @@ , "prefix is specified, the value from the config variable \"PREFIX\" is" , "taken, with the default value being \"/\"." ] + , "hdrs-only": ["Only collect headers from deps (without subdirectory)."] } , "config_doc": { "PREFIX": @@ -527,6 +528,7 @@ } ] , ["flat-libs", {"type": "FIELD", "name": "flat-libs"}] + , ["hdrs-only", {"type": "FIELD", "name": "hdrs-only"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "install result"} } -- cgit v1.2.3 From 48f4317f428719a55c70ac7a8a58df834418cd17 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Thu, 6 Apr 2023 18:16:50 +0200 Subject: rules: Support protoc/grpc_cpp_plugin from defaults --- CC/EXPRESSIONS | 3 +- CC/proto/EXPRESSIONS | 162 +++++++++++++++++++++++++++-------- CC/proto/RULES | 233 ++++++++++++++++++++++++++++++++++++++++++--------- CC/proto/TARGETS | 13 +++ 4 files changed, 337 insertions(+), 74 deletions(-) create mode 100644 CC/proto/TARGETS diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS index 3433598..c3541cd 100644 --- a/CC/EXPRESSIONS +++ b/CC/EXPRESSIONS @@ -100,7 +100,7 @@ } , "defaults-base-provides": { "doc": ["Query list-provider from 'base' targets (last wins)"] - , "vars": ["provider"] + , "vars": ["provider", "default"] , "vars_doc": {"provider": ["The name of the list-provider in the provides map."]} , "imports": {"provider_list": ["./", "..", "field_provider_list"]} @@ -110,6 +110,7 @@ , "body": { "type": "foldl" , "var": "next" + , "start": {"type": "var", "name": "default", "default": []} , "accum_var": "curr" , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} , "body": diff --git a/CC/proto/EXPRESSIONS b/CC/proto/EXPRESSIONS index 3341637..d2705f1 100644 --- a/CC/proto/EXPRESSIONS +++ b/CC/proto/EXPRESSIONS @@ -1,4 +1,81 @@ -{ "protoc-deps": +{ "default-PROTOC": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "PROTOC"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-LDFLAGS": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "LDFLAGS"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } +, "default-GRPC_PLUGIN": + { "vars": ["defaults-transition"] + , "imports": {"list_provider": ["./", "../..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "GRPC_PLUGIN"] + , [ "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"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "ENV"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "default-TOOLCHAIN": + { "vars": ["defaults-transition"] + , "imports": {"map_provider": ["./", "../..", "field_map_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ ["fieldname", "proto-defaults"] + , ["provider", "TOOLCHAIN"] + , [ "transition" + , {"type": "var", "name": "defaults-transition", "default": null} + ] + , ["default", {"type": "empty_map"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } +, "protoc-deps": { "imports": {"map_provider": ["./", "../..", "field_map_provider"]} , "expression": { "type": "let*" @@ -16,7 +93,6 @@ , "name" , "stage" , "service support" - , "deps-transition" , "public-fieldnames" , "private-fieldnames" ] @@ -26,47 +102,57 @@ , "runfiles": ["./", "../..", "field_runfiles"] , "artifacts_list": ["./", "../..", "field_artifacts_list"] , "protoc-deps": "protoc-deps" + , "default-PROTOC": "default-PROTOC" + , "default-LDFLAGS": "default-LDFLAGS" + , "default-GRPC_PLUGIN": "default-GRPC_PLUGIN" + , "default-ENV": "default-ENV" + , "default-TOOLCHAIN": "default-TOOLCHAIN" } , "expression": { "type": "let*" , "bindings": [ ["pure C", false] - , [ "protoc" - , { "type": "let*" - , "bindings": - [ ["fieldname", "protoc"] - , ["transition", {"type": "var", "name": "deps-transition"}] - , ["location", "protoc"] - ] - , "body": {"type": "CALL_EXPRESSION", "name": "stage"} - } - ] - , [ "grpc_cpp_plugin" + , ["TOOLCHAIN_DIR", "toolchain"] + , ["TOOLCHAIN", {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"}] + , [ "TOOLCHAIN" , { "type": "if" - , "cond": {"type": "var", "name": "service support"} + , "cond": {"type": "var", "name": "TOOLCHAIN"} , "then": - { "type": "let*" - , "bindings": - [ ["fieldname", "grpc_cpp_plugin"] - , ["transition", {"type": "var", "name": "deps-transition"}] - , ["location", "grpc_cpp_plugin"] + { "type": "to_subdir" + , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} + , "$1": {"type": "var", "name": "TOOLCHAIN"} + } + } + ] + , [ "PROTOC" + , { "type": "join" + , "$1": + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "TOOLCHAIN"} + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-PROTOC"} ] - , "body": {"type": "CALL_EXPRESSION", "name": "stage"} } - , "else": {"type": "empty_map"} } ] - , ["protoc-deps", {"type": "CALL_EXPRESSION", "name": "protoc-deps"}] - , [ "proto deps" - , { "type": "to_subdir" - , "subdir": "work" + , [ "GRPC_PLUGIN" + , { "type": "join" , "$1": - { "type": "let*" - , "bindings": [["fieldname", "proto-deps"]] - , "body": {"type": "CALL_EXPRESSION", "name": "runfiles"} + { "type": "++" + , "$1": + [ { "type": "if" + , "cond": {"type": "var", "name": "TOOLCHAIN"} + , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] + } + , {"type": "CALL_EXPRESSION", "name": "default-GRPC_PLUGIN"} + ] } } ] + , ["protoc-deps", {"type": "CALL_EXPRESSION", "name": "protoc-deps"}] , [ "proto srcs" , { "type": "disjoint_map_union" , "msg": "Sources may not conflict" @@ -139,12 +225,20 @@ , [ "cmd" , { "type": "++" , "$1": - [ ["./protoc", "--proto_path=work", "--cpp_out=work"] + [ [ {"type": "var", "name": "PROTOC"} + , "--proto_path=work" + , "--cpp_out=work" + ] , { "type": "if" , "cond": {"type": "var", "name": "service support"} , "then": [ "--grpc_out=work" - , "--plugin=protoc-gen-grpc=./grpc_cpp_plugin" + , { "type": "join" + , "$1": + [ "--plugin=protoc-gen-grpc=" + , {"type": "var", "name": "GRPC_PLUGIN"} + ] + } ] , "else": [] } @@ -158,9 +252,7 @@ { "type": "map_union" , "$1": [ {"type": "var", "name": "staged all proto srcs"} - , {"type": "var", "name": "protoc"} - , {"type": "var", "name": "grpc_cpp_plugin"} - , {"type": "var", "name": "proto deps"} + , {"type": "var", "name": "TOOLCHAIN"} ] } , "outs": {"type": "var", "name": "outs"} @@ -300,7 +392,9 @@ ] , ["cflags", []] , ["private-cflags", []] - , ["private-ldflags", []] + , [ "private-ldflags" + , {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + ] ] , "body": {"type": "CALL_EXPRESSION", "name": "result"} } diff --git a/CC/proto/RULES b/CC/proto/RULES index 89d1e34..97b4367 100644 --- a/CC/proto/RULES +++ b/CC/proto/RULES @@ -1,4 +1,186 @@ -{ "library": +{ "defaults": + { "doc": + [ "A rule to provide protoc/GRPC defaults." + , "Used to implement [\"CC/proto\", \"defaults\"] for CC proto libraries" + , "and [\"CC/proto\", \"service defaults\"] for CC proto service libraries" + , "(GRPC)." + ] + , "target_fields": ["base", "toolchain", "deps"] + , "string_fields": + ["PROTOC", "LDFLAGS", "ADD_LDFLAGS", "GRPC_PLUGIN", "PATH"] + , "config_vars": ["ARCH", "HOST_ARCH"] + , "field_doc": + { "base": + [ "Other targets (using the same rule) to inherit values from. If" + , "multiple targets are specified, for values that are overwritten (see" + , "documentation of other fields) the last specified value wins." + ] + , "toolchain": + [ "Optional toolchain directory. A collection of artifacts that provide" + , "the protobuf compiler and the GRPC plugin (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 the resulting CC proto libraries implicitly" + , "depend on. Those are typically \"libprotobuf\" for CC proto libraries" + , "and \"libgrpc++\" for CC proto service libraries. Specifying this" + , "field extends dependencies from \"base\"." + ] + , "PROTOC": + [ "The proto compiler. If \"toolchain\" is empty, this field's value is" + , "considered the proto compiler name that is looked up in \"PATH\". If" + , "\"toolchain\" is non-empty, this field's value is assumed to be the" + , "relative path to the proto compiler in \"toolchain\". Specifying this" + , "field overwrites values from \"base\"." + ] + , "GRPC_PLUGIN": + [ "The GRPC plugin for the proto compiler. If \"toolchain\" is empty," + , "this field's value is considered to be the absolute system path to the" + , "plugin. If \"toolchain\" is non-empty, this field's value is assumed" + , "to be the relative path to the plugin in \"toolchain\". Specifying" + , "this field overwrites values from \"base\"." + ] + , "LDFLAGS": + [ "Linker flags for linking the final CC library. Specifying this field" + , "overwrites 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 proto compiler. Individual paths are joined" + , "with \":\"." + ] + } + , "imports": + { "base-provides": ["./", "..", "defaults-base-provides"] + , "artifacts": ["", "field_artifacts"] + , "compile-deps": ["CC", "compile-deps"] + , "compile-args-deps": ["CC", "compile-args-deps"] + , "link-deps": ["CC", "link-deps"] + , "link-args-deps": ["CC", "link-args-deps"] + , "cflags-files-deps": ["CC", "cflags-files-deps"] + , "ldflags-files-deps": ["CC", "ldflags-files-deps"] + , "for host": ["transitions", "for host"] + } + , "config_transitions": + {"toolchain": [{"type": "CALL_EXPRESSION", "name": "for host"}]} + , "expression": + { "type": "let*" + , "bindings": + [ ["PROTOC", {"type": "FIELD", "name": "PROTOC"}] + , ["LDFLAGS", {"type": "FIELD", "name": "LDFLAGS"}] + , ["GRPC_PLUGIN", {"type": "FIELD", "name": "GRPC_PLUGIN"}] + , ["PATH", {"type": "FIELD", "name": "PATH"}] + , ["provider", "PROTOC"] + , [ "PROTOC" + , { "type": "if" + , "cond": {"type": "var", "name": "PROTOC"} + , "then": {"type": "var", "name": "PROTOC"} + , "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", "GRPC_PLUGIN"] + , [ "GRPC_PLUGIN" + , { "type": "if" + , "cond": {"type": "var", "name": "GRPC_PLUGIN"} + , "then": {"type": "var", "name": "GRPC_PLUGIN"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] + , ["provider", "ENV"] + , [ "ENV" + , { "type": "if" + , "cond": {"type": "var", "name": "PATH"} + , "then": + { "type": "singleton_map" + , "key": "PATH" + , "value": + { "type": "join" + , "separator": ":" + , "$1": {"type": "var", "name": "PATH"} + } + } + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] + , ["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"} + } + ] + } + ] + , [ "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": + [ "PROTOC" + , "LDFLAGS" + , "GRPC_PLUGIN" + , "ENV" + , "TOOLCHAIN" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "package" + ] + } + } + } + } +, "library": { "doc": [ "A library C++ library, generated from proto files." , "" @@ -7,19 +189,10 @@ ] , "string_fields": ["name", "stage"] , "target_fields": ["srcs", "deps"] - , "config_vars": - ["OS", "ARCH", "HOST_ARCH", "CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] + , "config_vars": ["CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] , "implicit": - { "protoc": [["@", "protoc", "", "protoc"]] - , "defaults": [["./", "..", "defaults"]] - , "proto-deps": [["@", "protoc", "", "libprotobuf"]] - } - , "imports": - { "protoc-compile": "protoc-compile" - , "host transition": ["transitions", "for host"] - } - , "config_transitions": - {"protoc": [{"type": "CALL_EXPRESSION", "name": "host transition"}]} + {"defaults": [["./", "..", "defaults"]], "proto-defaults": ["defaults"]} + , "imports": {"protoc-compile": "protoc-compile"} , "expression": { "type": "let*" , "bindings": @@ -30,11 +203,8 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , [ "deps-transition" - , {"type": "CALL_EXPRESSION", "name": "host transition"} - ] - , ["public-fieldnames", ["deps", "proto-deps"]] - , ["private-fieldnames", ["deps", "proto-deps"]] + , ["public-fieldnames", ["deps"]] + , ["private-fieldnames", ["deps", "proto-defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } @@ -48,24 +218,12 @@ ] , "string_fields": ["name", "stage"] , "target_fields": ["srcs", "deps"] - , "config_vars": - ["OS", "ARCH", "HOST_ARCH", "CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] + , "config_vars": ["CXX", "CXXFLAGS", "ADD_CXXFLAGS", "AR", "ENV"] , "implicit": - { "protoc": [["@", "protoc", "", "protoc"]] - , "grpc_cpp_plugin": [["@", "grpc", "", "grpc_cpp_plugin"]] - , "defaults": [["./", "..", "defaults"]] - , "proto-deps": - [["@", "grpc", "", "grpc++"], ["@", "protoc", "", "libprotobuf"]] - } - , "imports": - { "protoc-compile": "protoc-compile" - , "host transition": ["transitions", "for host"] - } - , "config_transitions": - { "protoc": [{"type": "CALL_EXPRESSION", "name": "host transition"}] - , "grpc_cpp_plugin": - [{"type": "CALL_EXPRESSION", "name": "host transition"}] + { "defaults": [["./", "..", "defaults"]] + , "proto-defaults": ["service defaults"] } + , "imports": {"protoc-compile": "protoc-compile"} , "expression": { "type": "let*" , "bindings": @@ -77,11 +235,8 @@ , "$1": {"type": "FIELD", "name": "stage"} } ] - , [ "deps-transition" - , {"type": "CALL_EXPRESSION", "name": "host transition"} - ] - , ["public-fieldnames", ["deps", "proto-deps"]] - , ["private-fieldnames", ["deps", "proto-deps"]] + , ["public-fieldnames", ["deps", "proto-defaults"]] + , ["private-fieldnames", ["deps", "proto-defaults"]] ] , "body": {"type": "CALL_EXPRESSION", "name": "protoc-compile"} } diff --git a/CC/proto/TARGETS b/CC/proto/TARGETS new file mode 100644 index 0000000..45ef759 --- /dev/null +++ b/CC/proto/TARGETS @@ -0,0 +1,13 @@ +{ "defaults": + { "type": ["CC/proto", "defaults"] + , "PROTOC": ["protoc"] + , "LDFLAGS": ["-lprotobuf"] + , "PATH": ["/bin", "/usr/bin"] + } +, "service defaults": + { "type": ["CC/proto", "defaults"] + , "base": ["defaults"] + , "GRPC_PLUGIN": ["/usr/bin/grpc_cpp_plugin"] + , "ADD_LDFLAGS": ["-lgrpc++", "-lgrpc", "-lgpr"] + } +} -- cgit v1.2.3