TIM-VX/toolchains/cc_toolchain_base.bzl

120 lines
3.6 KiB
Python

#
# Vivante Cross Toolchain configuration
#
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"tool_path",
"feature",
"with_feature_set",
"flag_group",
"flag_set")
all_compile_actions = [
ACTION_NAMES.assemble,
ACTION_NAMES.preprocess_assemble,
ACTION_NAMES.linkstamp_compile,
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.cpp_module_compile,
ACTION_NAMES.cpp_module_codegen,
ACTION_NAMES.lto_backend,
ACTION_NAMES.clif_match,
]
all_cpp_compile_actions = [
ACTION_NAMES.linkstamp_compile,
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.cpp_module_compile,
ACTION_NAMES.cpp_module_codegen,
ACTION_NAMES.clif_match,
]
all_link_actions = [
ACTION_NAMES.cpp_link_executable,
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]
def build_cc_toolchain_config(impl):
return rule(
implementation = impl,
attrs = {
"toolchain_name": attr.string(mandatory=True),
"target_cpu": attr.string(mandatory=True),
"compiler": attr.string(mandatory=True),
},
provides = [CcToolchainConfigInfo],
)
# construct tool path for local wrappers
def toolchain_tool_path(toolchain_name, tool_name):
return "//{toolchain_name}/bin:{tool_name}".format(toolchain_name=toolchain_name, tool_name=tool_name)
# construct package path for remote archive tools
def toolchain_package_path(toolchain_name, target):
return "@{toolchain_name}//:{target}".format(toolchain_name=toolchain_name, target=target)
def register_toolchain(toolchain_name, target_cpu, compiler, cc_toolchain_config):
native.filegroup(
name = "all_files",
srcs = [
toolchain_tool_path(toolchain_name, "tool-wrappers"),
toolchain_package_path(toolchain_name, "compiler_pieces"),
],
)
native.filegroup(
name = "linker_files",
srcs = [
toolchain_tool_path(toolchain_name, "ar"),
toolchain_tool_path(toolchain_name, "gcc"),
toolchain_tool_path(toolchain_name, "ld"),
toolchain_package_path(toolchain_name, "compiler_pieces"),
],
)
native.filegroup(
name = "compiler_files",
srcs = [
toolchain_tool_path(toolchain_name, "as"),
toolchain_tool_path(toolchain_name, "gcc"),
toolchain_tool_path(toolchain_name, "ld"),
],
)
native.filegroup(
name = "empty",
srcs = [],
)
cc_toolchain_config(
name = toolchain_name + "_config",
toolchain_name = toolchain_name,
target_cpu = target_cpu,
compiler = compiler)
native.cc_toolchain(
name = "cc-compiler",
toolchain_identifier = toolchain_name,
toolchain_config = toolchain_name + "_config",
all_files = ":all_files",
compiler_files = ":compiler_files",
dwp_files = ":empty",
linker_files = ":linker_files",
objcopy_files = toolchain_tool_path(toolchain_name, "objcopy"),
strip_files = toolchain_tool_path(toolchain_name, "strip"),
supports_param_files = 1,
)
native.cc_toolchain_suite(
name = "toolchain",
toolchains = {
# target_cpu | compiler
"{target_cpu}|{compiler}".format(target_cpu=target_cpu, compiler=compiler) : "cc-compiler",
},
visibility = ["//visibility:public"],
)