blob: 6680938dc07361c8d52bd341255adeb52acb2ab6 [file] [log] [blame]
"""Fake cc_toolchain for testing arbitrary --platforms/--cpu"""
load("@rules_cc//cc:find_cc_toolchain.bzl", "CC_TOOLCHAIN_TYPE")
load("@rules_cc//cc/common:cc_common.bzl", "cc_common")
load("@rules_cc//cc/toolchains:cc_toolchain.bzl", "cc_toolchain")
load("@rules_cc//cc/toolchains:cc_toolchain_config_info.bzl", "CcToolchainConfigInfo")
def _mock_config_impl(ctx):
return [
cc_common.create_cc_toolchain_config_info(
ctx = ctx,
toolchain_identifier = ctx.attr.id,
compiler = "nothing",
# These are deprecated but are mandatory parameters for older Bazel versions.
target_system_name = "deprecated_system_name",
target_cpu = "deprecated_cpu",
target_libc = "deprecated_libc",
),
]
_mock_config = rule(
implementation = _mock_config_impl,
attrs = {
"id": attr.string(mandatory = True),
},
provides = [CcToolchainConfigInfo],
)
def mock_cc_toolchain(*, name, cpu, os, **kwargs):
_mock_config(
name = name + "_config",
id = cpu + "-" + os,
**kwargs
)
cc_toolchain(
name = name + "_impl",
all_files = ":nothing",
as_files = ":nothing",
compiler_files = ":nothing",
dwp_files = ":nothing",
linker_files = ":nothing",
objcopy_files = ":nothing",
strip_files = ":nothing",
toolchain_config = name + "_config",
**kwargs
)
native.toolchain(
name = name,
toolchain = name + "_impl",
toolchain_type = CC_TOOLCHAIN_TYPE,
target_compatible_with = [
"@platforms//cpu:" + cpu,
"@platforms//os:" + os,
],
**kwargs
)