diff options
Diffstat (limited to 'examples/custom_toolchain/toolchain_config.bzl')
-rw-r--r-- | examples/custom_toolchain/toolchain_config.bzl | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/examples/custom_toolchain/toolchain_config.bzl b/examples/custom_toolchain/toolchain_config.bzl new file mode 100644 index 0000000..e83162b --- /dev/null +++ b/examples/custom_toolchain/toolchain_config.bzl @@ -0,0 +1,77 @@ +"""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], +) |