2017-07-06 3 views
2

私はC/C++コードを生成するコード生成ツールを持っています。このコード生成ツールはcrosstool1でコンパイルされています。生成されたC/C++コードは、crosstool2でコンパイルする必要があります。Bazel cc_library異なるcrosstoolでコンパイルするときの他のcc_libraryへの依存

ので、アクションは次のとおりです。

  • Crosstool1は 'code_generator' をコンパイル使用。
  • 'code_generator' を実行し、Crosstool2を使用した 'generated_code.cpp'
  • は 'generated_code.cpp'

は(cc_libraryを作ることが可能ですコンパイル生成)を使用しcrosstoolを決定? Skylarkのルールでは、これがどのように使われているのかわからない 'toolchains'パラメータが許可されていることがわかりました。Skylarkを使ってC/C++の骨をコンパイルするのはやりたくありません。

Tenserflowの例を除き、適切なHost CrosstoolとTarget Crosstoolの使用例がありますか?私は頭痛、私はそれを読むたびに取得:

答えて

1

//crosstool1:toolchainが最初crosstoolを説明cc_toolchain_suiteルールのラベルであると仮定Dを、//crosstool2:toolchainは、第二crosstoolためcc_toolchain_suiteのラベルであり、プロジェクトのビルドファイルは次のとおりです。

cc_binary(
    name = "generator", 
    srcs = [ "main.cc" ], 
) 

genrule(
    name = "generate", 
    outs = ["generated.cc"], 
    cmd = "$(location :generator) > [email protected]", 
    tools = [":generator"], 
) 

cc_binary(
    name = "generated", 
    srcs = [ "generated.cc" ], 
) 

次に実行する:

bazel build --host_crosstool_top=//crosstool1:toolchain --crosstool_top=//crosstool2:toolchain :generated 

はあなたが記述正確に何でしょう、それが構築するためにcrosstool1を使用します:発電機、およびcrosstool2を生成を構築します。 Genrulesはデフォルトでホスト構成を使用しているので、すべてうまくいくはずです。

関連する問題