blob: 7a2d1c1fb13b1eb1d1cb8cfea4dec4b471562034 [file] [log] [blame]
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",
"feature_set",
"flag_group",
"flag_set",
)
load(
"@crt//config:features.bzl",
"CPP_ALL_COMPILE_ACTIONS",
"C_ALL_COMPILE_ACTIONS",
"LD_ALL_ACTIONS",
)
def _impl(ctx):
tool_paths = [ # NEW
tool_path(
name = "gcc",
path = "out/bin/riscv32-unknown-elf-g++",
),
tool_path(
name = "ld",
path = "out/bin/riscv32-unknown-elf-ld",
),
tool_path(
name = "ar",
path = "out/bin/riscv32-unknown-elf-gcc-ar",
),
tool_path(
name = "cpp",
path = "out/bin/riscv32-unknown-elf-c++",
),
tool_path(
name = "gcov",
path = "/bin/false",
),
tool_path(
name = "nm",
path = "/bin/false",
),
tool_path(
name = "objdump",
path = "/bin/false",
),
tool_path(
name = "strip",
path = "/bin/false",
),
]
includes_feature = feature(
name = "includes",
enabled = True,
flag_sets = [
flag_set(
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
],
flag_groups = [
flag_group(
flags = [
"-nostdinc",
"-u", "_printf_float",
"-lsemihosting",
"-isystem", "toolchain/out/riscv32-unknown-elf/include",
"-isystem", "toolchain/out/lib/gcc/riscv32-unknown-elf/15.0.1/include"
],
),
],
),
],
)
sys_feature = feature(
name = "sys_spec",
enabled = True,
flag_sets = [
flag_set(
actions = CPP_ALL_COMPILE_ACTIONS,
flag_groups = [
flag_group(
flags = [
"-march=rv32im_zve32x_zicsr",
"-mabi=ilp32",
"-mcmodel=medany",
],
),
],
),
flag_set(
actions = LD_ALL_ACTIONS,
flag_groups = [
flag_group(
flags = [
"--specs=semihost.specs",
"-lsemihost",
"-lm",
"-lc",
"-lgcc",
],
),
],
),
],
)
return cc_common.create_cc_toolchain_config_info(
ctx= ctx,
toolchain_identifier = "kelvin_rvv_rv32-toolchain",
host_system_name = "kelvin_v2",
target_system_name = "kelvin_rvv_rv32",
target_cpu = "kelvin_rvv_rv32",
target_libc = "newlib",
compiler = "clang",
abi_version = "ilp32 ",
abi_libc_version="ilp32",
features = [
includes_feature,
sys_feature,
],
tool_paths = tool_paths,
)
cc_kelvin_rvv_rv32_toolchain_config = rule(
implementation = _impl,
attrs = {},
provides = [CcToolchainConfigInfo],
)