1load("@rules_cc//cc/toolchains:args.bzl", "cc_args")
2load("@rules_cc//cc/toolchains:args_list.bzl", "cc_args_list")
3load("@rules_cc//cc/toolchains:feature.bzl", "cc_feature")
4
5def configurable_toolchain_feature(name, copts = [], cxxopts = [], linkopts = []):
6
7    all_args = []
8
9    if copts:
10        cc_args(
11            name = name + "_cc_args",
12            actions = ["@rules_cc//cc/toolchains/actions:compile_actions"],
13            args = copts,
14        )
15        all_args.append(name + "_cc_args")
16
17    if cxxopts:
18        cc_args(
19            name = name + "_cxx_args",
20            actions = ["@rules_cc//cc/toolchains/actions:cpp_compile_actions"],
21            args = cxxopts,
22        )
23        all_args.append(name + "_cxx_args")
24
25    if linkopts:
26        cc_args(
27            name = name + "_link_args",
28            actions = ["@rules_cc//cc/toolchains/actions:link_actions"],
29            args = linkopts,
30        )
31        all_args.append(name + "_link_args")
32
33    cc_args_list(
34        name = name + "_args",
35        args = all_args,
36    )
37
38    cc_feature(
39        name = name,
40        feature_name = name,
41        args = [":{}_args".format(name)],
42    )
43