1load("//cc/toolchains:args.bzl", "cc_args") 2load("//cc/toolchains:args_list.bzl", "cc_args_list") 3load("//cc/toolchains:feature_constraint.bzl", "cc_feature_constraint") 4load("//cc/toolchains:nested_args.bzl", "cc_nested_args") 5 6package(default_visibility = ["//visibility:private"]) 7 8# TODO: b/27153401 - The implementation of this is particularly complex because 9# of what appears to be a workaround where macOS cc_test targets with 10# static_link_cpp_runtimes enabled utilize a $EXEC_ORIGIN/ prefix. This can be 11# paired down significantly after it is clear this workaround is no longer 12# required. 13 14cc_feature_constraint( 15 name = "static_link_cpp_runtimes_enabled", 16 all_of = ["//cc/toolchains/features:static_link_cpp_runtimes"], 17) 18 19cc_feature_constraint( 20 name = "static_link_cpp_runtimes_disabled", 21 none_of = ["//cc/toolchains/features:static_link_cpp_runtimes"], 22) 23 24cc_args_list( 25 name = "runtime_library_search_directories", 26 args = [ 27 ":runtime_library_search_directories_static_runtimes_args", 28 ":runtime_library_search_directories_args", 29 ], 30 visibility = ["//visibility:public"], 31) 32 33cc_args( 34 name = "runtime_library_search_directories_static_runtimes_args", 35 actions = ["//cc/toolchains/actions:link_actions"], 36 nested = [":iterate_over_search_dirs"], 37 requires_any_of = [":static_link_cpp_runtimes_enabled"], 38 requires_not_none = "//cc/toolchains/variables:runtime_library_search_directories", 39) 40 41cc_nested_args( 42 name = "iterate_over_search_dirs", 43 iterate_over = "//cc/toolchains/variables:runtime_library_search_directories", 44 nested = [ 45 ":unit_test_static_runtime_search_dir_args", 46 ":static_runtime_search_dir_args", 47 ], 48) 49 50cc_nested_args( 51 name = "unit_test_static_runtime_search_dir_args", 52 args = [ 53 "-Xlinker", 54 "-rpath", 55 "-Xlinker", 56 # TODO(b/27153401): This should probably be @loader_path on osx. 57 "$EXEC_ORIGIN/{search_path}", 58 ], 59 format = { 60 "search_path": "//cc/toolchains/variables:runtime_library_search_directories", 61 }, 62 requires_true = "//cc/toolchains/variables:is_cc_test", 63) 64 65cc_nested_args( 66 name = "static_runtime_search_dir_args", 67 args = [ 68 "-Xlinker", 69 "-rpath", 70 "-Xlinker", 71 ] + select({ 72 "@platforms//os:macos": ["@loader_path/{search_path}"], 73 "//conditions:default": ["$ORIGIN/{search_path}"], 74 }), 75 format = { 76 "search_path": "//cc/toolchains/variables:runtime_library_search_directories", 77 }, 78 requires_false = "//cc/toolchains/variables:is_cc_test", 79) 80 81# TODO: b/27153401 - runtime_library_search_directories_args and 82# search_dir_args are all we need to keep if the workaround is no 83# longer required. 84cc_args( 85 name = "runtime_library_search_directories_args", 86 actions = ["//cc/toolchains/actions:link_actions"], 87 nested = [":search_dir_args"], 88 # Remove the requires_any_of here if the workaround for b/27153401 is no 89 # longer required. 90 requires_any_of = [":static_link_cpp_runtimes_disabled"], 91 requires_not_none = "//cc/toolchains/variables:runtime_library_search_directories", 92) 93 94cc_nested_args( 95 name = "search_dir_args", 96 args = [ 97 "-Xlinker", 98 "-rpath", 99 "-Xlinker", 100 ] + select({ 101 "@platforms//os:macos": ["@loader_path/{search_path}"], 102 "//conditions:default": ["$ORIGIN/{search_path}"], 103 }), 104 format = { 105 "search_path": "//cc/toolchains/variables:runtime_library_search_directories", 106 }, 107 iterate_over = "//cc/toolchains/variables:runtime_library_search_directories", 108) 109