Bazel cc_library 依赖于其他 cc_library 当每次使用不同的 crosstool 编译时
Bazel cc_library dependency on other cc_library when each compile with a different crosstool
我有一个代码生成器工具可以生成 C/C++ 代码。此代码生成器工具是使用 crosstool1 编译的。生成的C/C++代码需要用crosstool2编译。
所以操作是:
- Using Crosstool1 compile 'code_generator'.
- Execute 'code_generator' and generate 'generated_code.cpp'
- Using Crosstool2 compile 'generated_code.cpp'
是否可以让 cc_library() 确定要使用的交叉工具?我看到 Skylark 规则现在允许一个 'toolchains' 参数,我不确定它是如何使用的,而且我不想做 C/C++ 的繁重工作,用 Skylark 编译裸机。
除了 Tenserflow 示例之外,是否有使用适当的 Host Crosstool 和 Target Crosstool 的示例?每次看都头疼:D
假设 //crosstool1:toolchain
是描述第一个交叉工具的 cc_toolchain_suite 规则的标签,//crosstool2:toolchain
是第二个交叉工具的 cc_toolchain_suite 的标签,以及项目的构建文件是:
cc_binary(
name = "generator",
srcs = [ "main.cc" ],
)
genrule(
name = "generate",
outs = ["generated.cc"],
cmd = "$(location :generator) > $@",
tools = [":generator"],
)
cc_binary(
name = "generated",
srcs = [ "generated.cc" ],
)
然后运行:
bazel build --host_crosstool_top=//crosstool1:toolchain --crosstool_top=//crosstool2:toolchain :generated
将完全按照您的描述进行操作,它将使用 crosstool1 构建 :generator,并使用 crosstool2 构建 generated。 Genrules 默认使用主机配置,所以一切都应该正常工作。
我有一个代码生成器工具可以生成 C/C++ 代码。此代码生成器工具是使用 crosstool1 编译的。生成的C/C++代码需要用crosstool2编译。
所以操作是:
- Using Crosstool1 compile 'code_generator'.
- Execute 'code_generator' and generate 'generated_code.cpp'
- Using Crosstool2 compile 'generated_code.cpp'
是否可以让 cc_library() 确定要使用的交叉工具?我看到 Skylark 规则现在允许一个 'toolchains' 参数,我不确定它是如何使用的,而且我不想做 C/C++ 的繁重工作,用 Skylark 编译裸机。
除了 Tenserflow 示例之外,是否有使用适当的 Host Crosstool 和 Target Crosstool 的示例?每次看都头疼:D
假设 //crosstool1:toolchain
是描述第一个交叉工具的 cc_toolchain_suite 规则的标签,//crosstool2:toolchain
是第二个交叉工具的 cc_toolchain_suite 的标签,以及项目的构建文件是:
cc_binary(
name = "generator",
srcs = [ "main.cc" ],
)
genrule(
name = "generate",
outs = ["generated.cc"],
cmd = "$(location :generator) > $@",
tools = [":generator"],
)
cc_binary(
name = "generated",
srcs = [ "generated.cc" ],
)
然后运行:
bazel build --host_crosstool_top=//crosstool1:toolchain --crosstool_top=//crosstool2:toolchain :generated
将完全按照您的描述进行操作,它将使用 crosstool1 构建 :generator,并使用 crosstool2 构建 generated。 Genrules 默认使用主机配置,所以一切都应该正常工作。