2017-08-09 6 views
4

私たちはビルドの一部としていくつかのGoソースファイルを生成しています。以前はgenruleexample here)を使用しており、生成されたファイルはbazel-genfiles/に格納されていました。`bazel-out /`の代わりに `bazel-genfiles /`にカスタムルールの出力を入れるには?

最近、rules_gohttps://github.com/bazelbuild/rules_go/tree/master/examples/bindata)のようにカスタムルールを使用するように切り替えました。この変更は、出力ソースファイルがbazel-genfiles/の代わりにbazel-bin/に格納されていることを意味します。

この出力場所の変更は、開発者が使用している一部のIDEでの統合を壊しています。特にgocodevim-goとVSCodeで使用されるオートコンプリートエンジンは、bzl(Bazel)ルックアップモードで実行するとに生成されたソースがあり、bazel-bin/ではなく、失敗すると思われます。

bazel-bin/ではなく出力をbazel-genfiles/に保存するようにルールを変更するにはどうすればよいですか?私のルールはrules_goの例と同等です:

def _bindata_impl(ctx): 
     out = ctx.new_file(ctx.label.name + ".go") 
     ctx.action(
     inputs = ctx.files.srcs, 
     outputs = [out], 
     executable = ctx.file._bindata, 
     arguments = [ 
      "-o", out.path, 
      "-pkg", ctx.attr.package, 
      "-prefix", ctx.label.package, 
     ] + [src.path for src in ctx.files.srcs], 
    ) 
     return [ 
     DefaultInfo(
      files = depset([out]) 
     ) 
     ] 

    bindata = rule(
     _bindata_impl, 
     attrs = { 
      "srcs": attr.label_list(allow_files = True, cfg = "data"), 
      "package": attr.string(mandatory=True), 
      "_bindata": attr.label(allow_files=True, single_file=True, default=Label("@com_github_jteeuwen_go_bindata//go-bindata:go-bindata")), 
     }, 
    ) 

私はctx.new_fileまたはctx.actionのいずれかの引数を期待するだろうが、すかいらーくのリファレンスやチュートリアルの関連する何かを見つけることができません。

多くの感謝!

答えて

6

の定義にoutput_to_genfiles=Trueを設定してみてください。これはrule docsに記載されています。

ので:

bindata = rule(
     _bindata_impl, 
     attrs = { 
      "srcs": attr.label_list(allow_files = True, cfg = "data"), 
      "package": attr.string(mandatory=True), 
      "_bindata": attr.label(allow_files=True, single_file=True, default=Label("@com_github_jteeuwen_go_bindata//go-bindata:go-bindata")), 
     }, 
     output_to_genfiles = True, 
    ) 
+0

パーフェクト、ありがとう! – user2514169

関連する問題