toolchain/private/cc_toolchains.bzl (61 lines of code) (raw):
load("@hermetic_cc_toolchain//toolchain:zig_cc_toolchain.bzl", "zig_cc_toolchain_config")
load(":defs.bzl", "target_structs", "zig_tool_path")
def declare_cc_toolchains(os, zig_sdk_path):
exe = ".exe" if os == "windows" else ""
for target_config in target_structs():
gotarget = target_config.gotarget
zigtarget = target_config.zigtarget
cxx_builtin_include_directories = []
tool_paths = {}
for tool in ["cpp", "gcov", "nm", "objdump", "strip"]:
tool_paths[tool] = "/usr/bin/false"
# https://github.com/bazelbuild/bazel/issues/4644
tool_paths["gcc"] = zig_tool_path(os).format(
zig_tool = "c++",
zigtarget = zigtarget,
)
tool_paths["ar"] = "tools/ar{}".format(exe)
if target_config.ld_zig_subcmd:
tool_paths["ld"] = "tools/{}{}".format(target_config.ld_zig_subcmd, exe)
else:
tool_paths["ld"] = "/usr/bin/false"
dynamic_library_linkopts = target_config.dynamic_library_linkopts
supports_dynamic_linker = target_config.supports_dynamic_linker
copts = target_config.copts
linkopts = target_config.linkopts
# We can't pass a list of structs to a rule, so we use json encoding.
artifact_name_patterns = getattr(target_config, "artifact_name_patterns", [])
artifact_name_pattern_strings = [json.encode(p) for p in artifact_name_patterns]
zig_cc_toolchain_config(
name = zigtarget + "_cc_config",
target = zigtarget,
tool_paths = tool_paths,
cxx_builtin_include_directories = cxx_builtin_include_directories,
copts = copts,
linkopts = linkopts,
dynamic_library_linkopts = dynamic_library_linkopts,
supports_dynamic_linker = supports_dynamic_linker,
target_cpu = target_config.bazel_target_cpu,
target_system_name = "unknown",
target_libc = "unknown",
compiler = "clang",
abi_version = "unknown",
abi_libc_version = "unknown",
artifact_name_patterns = artifact_name_pattern_strings,
visibility = ["//visibility:private"],
)
native.cc_toolchain(
name = zigtarget + "_cc",
toolchain_identifier = zigtarget + "-toolchain",
toolchain_config = ":%s_cc_config" % zigtarget,
all_files = "//:{}_all_files".format(zigtarget),
ar_files = "//:{}_ar_files".format(zigtarget),
as_files = "//:{}_compiler_files".format(zigtarget),
compiler_files = "//:{}_compiler_files".format(zigtarget),
linker_files = "//:{}_linker_files".format(zigtarget),
dwp_files = "//:empty",
objcopy_files = "//:empty",
strip_files = "//:empty",
supports_param_files = 0,
visibility = ["//visibility:private"],
)