diff options
Diffstat (limited to 'rules')
-rw-r--r-- | rules/CC/EXPRESSIONS | 420 | ||||
-rw-r--r-- | rules/CC/RULES | 79 | ||||
-rw-r--r-- | rules/CC/TARGETS | 1 | ||||
-rw-r--r-- | rules/CC/test/RULES | 19 | ||||
-rw-r--r-- | rules/shell/test/EXPRESSIONS | 18 | ||||
-rwxr-xr-x | rules/shell/test/test_runner.sh | 1 | ||||
-rw-r--r-- | rules/transitions/EXPRESSIONS | 16 |
7 files changed, 545 insertions, 9 deletions
diff --git a/rules/CC/EXPRESSIONS b/rules/CC/EXPRESSIONS index 7beac0a..2998fa8 100644 --- a/rules/CC/EXPRESSIONS +++ b/rules/CC/EXPRESSIONS @@ -82,6 +82,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": {"provider_list": ["./", "..", "field_provider_list"]} @@ -255,6 +270,69 @@ } } } +, "run-libs-deps": + { "doc": ["Collect runtime libraries from given target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": + ["List of target_field names to collect dependencies from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"provider_list": ["./", "..", "field_provider_list"]} + , "expression": + { "type": "to_subdir" + , "flat": true + , "$1": + { "type": "disjoint_map_union" + , "$1": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "run-libs"] + , ["default", {"type": "empty_map"}] + , ["transition", {"type": "var", "name": "deps-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} + } + } + } + } + } + } +, "run-libs-args-deps": + { "doc": + ["Collect runtime libraries link arguments from given target_fields"] + , "vars": ["deps-fieldnames", "deps-transition"] + , "vars_doc": + { "deps-fieldnames": + ["List of target_field names to collect arguments from."] + , "deps-transition": + ["The optional configuration transition for the targets."] + } + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "++" + , "$1": + { "type": "foreach" + , "var": "fieldname" + , "range": {"type": "var", "name": "deps-fieldnames"} + , "body": + { "type": "let*" + , "bindings": + [ ["provider", "run-libs-args"] + , ["transition", {"type": "var", "name": "deps-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } + } + } , "objects": { "vars": [ "COMPILER" @@ -403,12 +481,21 @@ } } , "flags-cc": - { "vars": ["CFLAGS", "ADD_CFLAGS", "defaults-transition"] + { "vars": + [ "CFLAGS" + , "ADD_CFLAGS" + , "BUILD_POSITION_INDEPENDENT" + , "defaults-transition" + ] , "imports": {"default-CFLAGS": "default-CFLAGS"} , "expression": { "type": "++" , "$1": - [ { "type": "var" + [ { "type": "if" + , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"} + , "then": ["-fPIC"] + } + , { "type": "var" , "name": "CFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CFLAGS"} } @@ -417,12 +504,21 @@ } } , "flags-cxx": - { "vars": ["CXXFLAGS", "ADD_CXXFLAGS", "defaults-transition"] + { "vars": + [ "CXXFLAGS" + , "ADD_CXXFLAGS" + , "BUILD_POSITION_INDEPENDENT" + , "defaults-transition" + ] , "imports": {"default-CXXFLAGS": "default-CXXFLAGS"} , "expression": { "type": "++" , "$1": - [ { "type": "var" + [ { "type": "if" + , "cond": {"type": "var", "name": "BUILD_POSITION_INDEPENDENT"} + , "then": ["-fPIC"] + } + , { "type": "var" , "name": "CXXFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CXXFLAGS"} } @@ -436,6 +532,7 @@ , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "BUILD_POSITION_INDEPENDENT" , "pure C" , "defaults-transition" ] @@ -457,6 +554,7 @@ , "ADD_CXXFLAGS" , "AR" , "ENV" + , "BUILD_POSITION_INDEPENDENT" , "name" , "pure C" , "srcs" @@ -575,6 +673,7 @@ , "ADD_CXXFLAGS" , "AR" , "ENV" + , "BUILD_POSITION_INDEPENDENT" , "name" , "pure C" , "srcs" @@ -593,6 +692,8 @@ , "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" , "lib artifact": "lib artifact" } , "expression": @@ -626,6 +727,12 @@ } } ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , { "type": "nub_right" + , "$1": {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + } + ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" @@ -649,7 +756,277 @@ , "$1": [ { "type": "env" , "vars": - ["compile-deps", "compile-args", "link-deps", "link-args"] + [ "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + ] + } + , { "type": "var" + , "name": "extra-provides" + , "default": {"type": "empty_map"} + } + ] + } + } + } + } +, "shared artifact": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "soversion" + , "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + , "defaults-transition" + ] + , "imports": + { "compiler": "compiler" + , "flags": "flags" + , "objects": "objects" + , "default-LDFLAGS": "default-LDFLAGS" + , "default-ENV": "default-ENV" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["BUILD_POSITION_INDEPENDENT", true] + , ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] + , [ "COMPILE_FLAGS" + , { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "flags"} + , {"type": "var", "name": "compile-args"} + ] + } + ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ { "type": "var" + , "name": "LDFLAGS" + , "default": + {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + } + , {"type": "var", "name": "ADD_LDFLAGS", "default": []} + ] + } + ] + , [ "ENV" + , { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} + , [ { "type": "var" + , "name": "ENV" + , "default": {"type": "empty_map"} + } + ] + ] + } + } + ] + , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] + , [ "base name" + , { "type": "if" + , "cond": {"type": "var", "name": "objects"} + , "then": + { "type": "assert_non_empty" + , "msg": "A name has to be provided for non-header-only libraries" + , "$1": {"type": "var", "name": "name"} + } + , "else": {"type": "var", "name": "name"} + } + ] + , [ "libname" + , { "type": "join" + , "$1": ["lib", {"type": "var", "name": "base name"}, ".so"] + } + ] + , [ "libname" + , { "type": "join" + , "separator": "." + , "$1": + { "type": "++" + , "$1": + [ [{"type": "var", "name": "libname"}] + , {"type": "var", "name": "soversion"} + ] + } + } + ] + , [ "lib" + , { "type": "if" + , "cond": {"type": "var", "name": "objects"} + , "else": {"type": "empty_map"} + , "then": + { "type": "ACTION" + , "outs": [{"type": "var", "name": "libname"}] + , "inputs": + { "type": "map_union" + , "$1": + [ {"type": "var", "name": "objects"} + , {"type": "var", "name": "link-deps"} + , {"type": "var", "name": "run-libs"} + ] + } + , "env": + {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} + , "cmd": + { "type": "++" + , "$1": + [ [ {"type": "var", "name": "COMPILER"} + , "-shared" + , "-Wl,-rpath,$ORIGIN" + , "-Wl,-rpath,$ORIGIN/../lib" + , { "type": "join" + , "$1": + ["-Wl,-soname,", {"type": "var", "name": "libname"}] + } + ] + , {"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"} + ] + } + } + } + ] + ] + , "body": {"type": "var", "name": "lib"} + } + } +, "shared result": + { "vars": + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CXXFLAGS" + , "ADD_CFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "name" + , "pure C" + , "srcs" + , "hdrs" + , "private-hdrs" + , "cflags" + , "private-cflags" + , "private-ldflags" + , "soversion" + , "extra-provides" + , "deps-transition" + , "public-fieldnames" + , "private-fieldnames" + ] + , "imports": + { "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" + , "shared artifact": "shared artifact" + } + , "expression": + { "type": "let*" + , "bindings": + [ ["deps-fieldnames", {"type": "var", "name": "private-fieldnames"}] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "cflags"} + , {"type": "var", "name": "private-cflags"} + , {"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": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "private-ldflags", "default": []} + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] + } + } + ] + , ["lib", {"type": "CALL_EXPRESSION", "name": "shared artifact"}] + , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] + , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] + , [ "compile-args" + , { "type": "nub_right" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "cflags"} + , {"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": "map_union" + , "$1": + [ {"type": "var", "name": "lib"} + , {"type": "var", "name": "run-libs"} + ] + } + ] + , [ "run-libs-args" + , {"type": "keys", "$1": {"type": "var", "name": "lib"}} + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "lib"} + , "runfiles": {"type": "var", "name": "hdrs"} + , "provides": + { "type": "map_union" + , "$1": + [ { "type": "env" + , "vars": + [ "compile-deps" + , "compile-args" + , "link-deps" + , "link-args" + , "run-libs" + , "run-libs-args" + ] } , { "type": "var" , "name": "extra-provides" @@ -667,9 +1044,12 @@ , "CXX" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "ENV" + , "BUILD_POSITION_INDEPENDENT" , "name" , "pure C" , "srcs" @@ -679,6 +1059,8 @@ , "compile-args" , "link-deps" , "link-args" + , "run-libs" + , "run-libs-args" , "defaults-transition" ] , "imports": @@ -686,6 +1068,7 @@ , "flags": "flags" , "objects": "objects" , "default-ENV": "default-ENV" + , "default-LDFLAGS": "default-LDFLAGS" } , "expression": { "type": "let*" @@ -699,6 +1082,18 @@ ] } ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ { "type": "var" + , "name": "LDFLAGS" + , "default": + {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} + } + , {"type": "var", "name": "ADD_LDFLAGS", "default": []} + ] + } + ] , [ "ENV" , { "type": "map_union" , "$1": @@ -749,17 +1144,22 @@ , "$1": [ {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} + , {"type": "var", "name": "run-libs"} ] } , "cmd": { "type": "++" , "$1": [ [ {"type": "var", "name": "COMPILER"} + , "-Wl,-rpath,$ORIGIN" + , "-Wl,-rpath,$ORIGIN/../lib" , "-o" , {"type": "var", "name": "binpath"} ] , {"type": "var", "name": "COMPILE_FLAGS"} + , {"type": "var", "name": "LDFLAGS"} , {"type": "var", "name": "link-args"} + , {"type": "var", "name": "run-libs-args"} ] } , "env": {"type": "var", "name": "ENV"} @@ -776,9 +1176,12 @@ , "CXX" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "ENV" + , "BUILD_POSITION_INDEPENDENT" , "name" , "pure C" , "srcs" @@ -793,6 +1196,8 @@ , "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" , "binary": "bin artifact" } , "expression": @@ -820,10 +1225,15 @@ } } ] + , ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}] + , [ "run-libs-args" + , {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"} + ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} + , "provides": {"type": "env", "vars": ["run-libs"]} } } } diff --git a/rules/CC/RULES b/rules/CC/RULES index 3bfd200..4d90adc 100644 --- a/rules/CC/RULES +++ b/rules/CC/RULES @@ -12,8 +12,10 @@ , "CXX" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "AR" , "PATH" ] @@ -25,6 +27,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"] @@ -99,12 +102,20 @@ ] } ] + , [ "LDFLAGS" + , { "type": "++" + , "$1": + [ {"type": "var", "name": "LDFLAGS"} + , {"type": "FIELD", "name": "ADD_LDFLAGS"} + ] + } + ] ] , "body": { "type": "RESULT" , "provides": { "type": "env" - , "vars": ["CC", "CXX", "CFLAGS", "CXXFLAGS", "AR", "ENV"] + , "vars": ["CC", "CXX", "CFLAGS", "CXXFLAGS", "LDFLAGS", "AR", "ENV"] } } } @@ -122,16 +133,21 @@ , "cflags" , "private-cflags" , "private-ldflags" + , "soversion" ] + , "config_fields": ["shared"] , "config_vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "AR" , "ENV" + , "BUILD_POSITION_INDEPENDENT" ] , "implicit": {"defaults": ["defaults"]} , "field_doc": @@ -181,6 +197,11 @@ , "duplicate work will be carried out, even if the same proto library" , "is used at various places)." ] + , "shared": ["If non-empty, produce a shared instead of a static library."] + , "soversion": + [ "The SOVERSION for shared libraries. Individual version components are" + , "joined with \".\"." + ] } , "config_doc": { "CC": @@ -203,6 +224,12 @@ , "adapting the default target [\"CC\", \"defaults\"] is the better" , "choice." ] + , "LDFLAGS": + [ "The linker flags to be used instead of the default ones." + , "For libraries that should be built in a non-standard way; usually" + , "adapting the default target [\"CC\", \"defaults\"] is the better" + , "choice." + ] , "ADD_CFLAGS": [ "The flags to add to the default ones for CC." , "For libraries that should be built in a non-standard way; usually" @@ -215,11 +242,18 @@ , "adapting the default target [\"CC\", \"defaults\"] is the better" , "choice." ] + , "ADD_LDFLAGS": + [ "The linker flags to add to the default ones." + , "For libraries that should be built in a non-standard way; usually" + , "adapting the default target [\"CC\", \"defaults\"] is the better" + , "choice." + ] , "AR": [ "The archive tool to used for creating the library" , "If None, the respective value from [\"CC\", \"defaults\"] will be taken." ] , "ENV": ["The environment for any action generated."] + , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."] } , "artifacts_doc": ["The actual library (libname.a) staged in the specified directory"] @@ -249,7 +283,16 @@ } } , "imports": - {"artifacts": ["./", "..", "field_artifacts"], "result": "lib result"} + { "artifacts": ["./", "..", "field_artifacts"] + , "static result": "lib result" + , "shared result": "shared result" + , "fPIC transition": ["transitions", "with fPIC"] + } + , "config_transitions": + { "deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + , "private-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + , "proto-deps": [{"type": "CALL_EXPRESSION", "name": "fPIC transition"}] + } , "expression": { "type": "let*" , "bindings": @@ -318,10 +361,19 @@ } ] , ["private-ldflags", {"type": "FIELD", "name": "private-ldflags"}] + , ["soversion", {"type": "FIELD", "name": "soversion"}] + , [ "deps-transition" + , {"type": "CALL_EXPRESSION", "name": "fPIC transition"} + ] , ["public-fieldnames", ["deps", "proto-deps"]] , ["private-fieldnames", ["deps", "private-deps", "proto-deps"]] ] - , "body": {"type": "CALL_EXPRESSION", "name": "result"} + , "body": + { "type": "if" + , "cond": {"type": "FIELD", "name": "shared"} + , "then": {"type": "CALL_EXPRESSION", "name": "shared result"} + , "else": {"type": "CALL_EXPRESSION", "name": "static result"} + } } } , "binary": @@ -336,7 +388,17 @@ , "private-ldflags" ] , "config_vars": - ["CC", "CXX", "CFLAGS", "CXXFLAGS", "ADD_CFLAGS", "ADD_CXXFLAGS", "ENV"] + [ "CC" + , "CXX" + , "CFLAGS" + , "CXXFLAGS" + , "LDFLAGS" + , "ADD_CFLAGS" + , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" + , "ENV" + , "BUILD_POSITION_INDEPENDENT" + ] , "implicit": {"defaults": ["defaults"]} , "field_doc": { "name": ["The name of the binary"] @@ -383,6 +445,10 @@ [ "The flags for CXX to be used instead of the default ones" , "taken from the [\"CC\", \"defaults\"] target" ] + , "LDFLAGS": + [ "The linker flags do be used instead of the default ones" + , "taken from the [\"CC\", \"defaults\"] target" + ] , "ADD_CFLAGS": [ "The flags to add to the default ones for CC" , "taken from the [\"CC\", \"defaults\"] target" @@ -391,7 +457,12 @@ [ "The flags to add to the default ones for CXX" , "taken from the [\"CC\", \"defaults\"] target" ] + , "ADD_LDFLAGS": + [ "The linker flags to add to the default ones" + , "taken from the [\"CC\", \"defaults\"] target" + ] , "ENV": ["The environment for any action generated."] + , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."] } , "artifacts_doc": ["The final binary, staged to the given directory"] , "runfiles_doc": ["None"] diff --git a/rules/CC/TARGETS b/rules/CC/TARGETS index 2da456b..8860e8b 100644 --- a/rules/CC/TARGETS +++ b/rules/CC/TARGETS @@ -4,6 +4,7 @@ , "CXX": ["c++"] , "CFLAGS": [] , "CXXFLAGS": [] + , "LDFLAGS": [] , "AR": ["ar"] , "PATH": ["/bin", "/usr/bin"] } diff --git a/rules/CC/test/RULES b/rules/CC/test/RULES index 3821339..60f33ab 100644 --- a/rules/CC/test/RULES +++ b/rules/CC/test/RULES @@ -18,9 +18,12 @@ , "CXX" , "CFLAGS" , "CXXFLAGS" + , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" + , "ADD_LDFLAGS" , "ENV" + , "BUILD_POSITION_INDEPENDENT" , "TEST_ENV" , "CC_TEST_LAUNCHER" ] @@ -65,6 +68,10 @@ [ "The flags for CXX to be used instead of the default ones" , "taken from the [\"CC\", \"defaults\"] target" ] + , "LDFLAGS": + [ "The linker flags do be used instead of the default ones" + , "taken from the [\"CC\", \"defaults\"] target" + ] , "ADD_CFLAGS": [ "The flags to add to the default ones for CC" , "taken from the [\"CC\", \"defaults\"] target" @@ -73,7 +80,12 @@ [ "The flags to add to the default ones for CXX" , "taken from the [\"CC\", \"defaults\"] target" ] + , "ADD_LDFLAGS": + [ "The linker flags to add to the default ones" + , "taken from the [\"CC\", \"defaults\"] target" + ] , "ENV": ["The environment for any action generated."] + , "BUILD_POSITION_INDEPENDENT": ["Build with -fPIC."] , "TEST_ENV": ["The environment for executing the test runner."] , "CC_TEST_LAUNCHER": [ "List of strings representing the launcher that is prepend to the" @@ -101,6 +113,8 @@ , "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"] , "binary": ["./", "..", "bin artifact"] , "host transition": ["transitions", "for host"] } @@ -173,6 +187,10 @@ ] } ] + , ["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" @@ -277,6 +295,7 @@ , {"type": "var", "name": "test-args"} , {"type": "var", "name": "test-launcher"} , {"type": "var", "name": "staged test binary"} + , {"type": "var", "name": "run-libs"} ] } , "cmd": ["./runner"] diff --git a/rules/shell/test/EXPRESSIONS b/rules/shell/test/EXPRESSIONS index d9b1fbc..d1d7e64 100644 --- a/rules/shell/test/EXPRESSIONS +++ b/rules/shell/test/EXPRESSIONS @@ -12,6 +12,7 @@ , "imports": { "artifacts_list": ["./", "../..", "field_artifacts_list"] , "runfiles_list": ["./", "../..", "field_runfiles_list"] + , "map_provider": ["./", "../..", "field_map_provider"] } , "expression": { "type": "let*" @@ -66,6 +67,19 @@ } } ] + , [ "run-libs" + , { "type": "TREE" + , "$1": + { "type": "let*" + , "bindings": + [ ["fieldname", {"type": "var", "name": "deps-fieldname"}] + , ["provider", "run-libs"] + , ["transition", {"type": "var", "name": "deps-transition"}] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} + } + } + ] , [ "attempt marker" , { "type": "if" , "cond": @@ -104,6 +118,10 @@ , "key": "work" , "value": {"type": "var", "name": "deps"} } + , { "type": "singleton_map" + , "key": "libs" + , "value": {"type": "var", "name": "run-libs"} + } , {"type": "var", "name": "runner"} , {"type": "var", "name": "test.sh"} , {"type": "var", "name": "attempt marker"} diff --git a/rules/shell/test/test_runner.sh b/rules/shell/test/test_runner.sh index a99d5b7..97c75ef 100755 --- a/rules/shell/test/test_runner.sh +++ b/rules/shell/test/test_runner.sh @@ -25,6 +25,7 @@ echo UNKNOWN > time-stop mkdir scratch export TEST_TMPDIR=$(realpath scratch) export TMPDIR="${TEST_TMPDIR}" +export LD_LIBRARY_PATH=$(realpath ./libs):$LD_LIBRARY_PATH # Change to the working directory; note: while unlikely, the test # might not have test data, so we have to ensure the presence of diff --git a/rules/transitions/EXPRESSIONS b/rules/transitions/EXPRESSIONS index 8ea7550..92be685 100644 --- a/rules/transitions/EXPRESSIONS +++ b/rules/transitions/EXPRESSIONS @@ -10,4 +10,20 @@ } } } +, "with fPIC": + { "doc": + [ "Transition that enables BUILD_POSITION_INDEPENDENT if config_field" + , "\"shared\" is not empty." + ] + , "expression": + { "type": "if" + , "cond": {"type": "FIELD", "name": "shared"} + , "then": + { "type": "singleton_map" + , "key": "BUILD_POSITION_INDEPENDENT" + , "value": true + } + , "else": {"type": "empty_map"} + } + } } |