blob: e83162b718c70c2df54e3a772b4932d02adf1eec [file] [log] [blame]
"""Sample Starlark definition defining a C++ toolchain's behavior.
When you build a cc_* rule, this logic defines what programs run for what
build steps (e.g. compile / link / archive) and how their command lines are
structured.
This is a proof-of-concept simple implementation. It doesn't construct fancy
command lines and uses mock shell scripts to compile and link
("sample_compiler" and "sample_linker"). See
https://docs.bazel.build/versions/main/cc-toolchain-config-reference.html and
https://docs.bazel.build/versions/main/tutorial/cc-toolchain-config.html for
advanced usage.
"""
load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "tool_path")
def _impl(ctx):
tool_paths = [
tool_path(
name = "ar",
path = "sample_linker",
),
tool_path(
name = "cpp",
path = "not_used_in_this_example",
),
tool_path(
name = "gcc",
path = "sample_compiler",
),
tool_path(
name = "gcov",
path = "not_used_in_this_example",
),
tool_path(
name = "ld",
path = "sample_linker",
),
tool_path(
name = "nm",
path = "not_used_in_this_example",
),
tool_path(
name = "objdump",
path = "not_used_in_this_example",
),
tool_path(
name = "strip",
path = "not_used_in_this_example",
),
]
# Documented at
# https://docs.bazel.build/versions/main/skylark/lib/cc_common.html#create_cc_toolchain_config_info.
#
# create_cc_toolchain_config_info is the public interface for registering
# C++ toolchain behavior.
return cc_common.create_cc_toolchain_config_info(
ctx = ctx,
toolchain_identifier = "custom-toolchain-identifier",
host_system_name = "local",
target_system_name = "local",
target_cpu = "sample_cpu",
target_libc = "unknown",
compiler = "gcc",
abi_version = "unknown",
abi_libc_version = "unknown",
tool_paths = tool_paths,
)
cc_toolchain_config = rule(
implementation = _impl,
# You can alternatively define attributes here that make it possible to
# instantiate different cc_toolchain_config targets with different behavior.
attrs = {},
provides = [CcToolchainConfigInfo],
)