Я пытался написать правило bazel, чтобы обернуть компиляцию для исходных файлов ris c -v, делает что-то еще, например c, но у меня были некоторые проблемы с получением CcToolchainInfo
Поставщик.
У меня есть правило, которое работает как
rv_cc_toolchain_config = rule(
implementation = _impl,
attrs = {},
provides = [CcToolchainConfigInfo],
)
, чтобы предоставить информацию о конфигурации. У меня есть следующее в toolchains/BUILD
:
load(":cc_toolchain_config.bzl", "rv_cc_toolchain_config")
package(default_visibility = ['//visibility:public'])
rv_cc_toolchain_config(name="rv_toolchain_cfg")
cc_toolchain(
name='rv_toolchain',
toolchain_identifier='rv-toolchain',
toolchain_config=':rv_toolchain_cfg',
all_files=':nofile',
strip_files=':nofile',
objcopy_files=':nofile',
dwp_files=':nofile',
compiler_files=':nofile',
linker_files=':nofile',
)
Кажется, все работает нормально; Затем у меня есть мое пользовательское правило для компиляции с помощью riscv:
def _compile_impl(ctx):
deps = []
cc_toolchain = find_cpp_toolchain(ctx)
print(ctx.attr._cc_toolchain)
compilation_contexts = [dep[CcInfo].compilation_context for dep in deps]
print(type(cc_toolchain))
feature_configuration = cc_common.configure_features( #fails here
ctx = ctx,
cc_toolchain = cc_toolchain,
requested_features = ctx.features, #currently does nothing
unsupported_features = ctx.disabled_features,
)
rv_compile = rule(
_compile_impl,
output_to_genfiles = True,
attrs = {
"srcs": attr.label_list(
doc = "List of source files",
mandatory = False,
allow_files = [".cc", ".cpp", ".h", ".c"],
),
"hdrs": attr.label_list(
doc = "List of header files",
allow_files = [".h"],
),
"_cc_toolchain": attr.label(
#default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
default = Label("//toolchains:rv_toolchain")
),
},
provides = [
DefaultInfo,
CcInfo,
],
toolchains = [
"@bazel_tools//tools/cpp:toolchain_type",
],
fragments = ["cpp"]
)
. При неудачном завершении попытки сконфигурировать набор инструментов, потому что cc_toolchain
имеет тип ToolchainInfo
, а не обязательный CcToolchainInfo
. У кого-нибудь есть понимание того, как предоставить CcToolchainInfo в правиле? Или есть лучший способ сделать это? Документация кажется go темной на этом.