当每个使用不同的crosstool编译时,Bazel cc_library依赖于其他cc_library

时间:2017-07-06 07:25:56

标签: bazel

我有一个生成C / C ++代码的代码生成器工具。此代码生成器工具使用crosstool1编译。生成的C / C ++代码需要使用crosstool2进行编译。

所以行动是:

  
      
  • 使用Crosstool1编译'code_generator'。
  •   
  • 执行'code_generator'并生成'generated_code.cpp'
  •   
  • 使用Crosstool2编译'generated_code.cpp'
  •   

是否可以让cc_library()确定要使用的crosstool?我看到Skylark规则现在允许使用“工具链”参数,我不确定如何使用它,我也不想用Skylark对C / C ++进行繁重的编译。

除了Tenserflow示例之外,是否有使用正确的Host Crosstool和Target Crosstool的示例?每次看书都会让我头疼:D

1 个答案:

答案 0 :(得分:1)

假设//crosstool1:toolchain是描述第一个crosstool的cc_toolchain_suite规则的标签,//crosstool2:toolchain是第二个crosstool的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构建生成。默认情况下,Genrules使用主机配置,所以一切都应该正常工作。