• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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