3

Bazel を使用して TensorFlow 用のカスタム ビルド システムをセットアップしようとしています。構築ステップでキャッシュとして使用する構成ステップで一時ファイルを作成する必要があります。.bzl ファイルで次のように作成できました。

repository_ctx.file(filename)

そして、構成後、フォルダー内にあることがわかります。

$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%

実際の repository_name はどこですかrepository_ctx.name

しかし、ビルド時に .tpl スクリプトからこのパスにアクセスできません。の置換を介して.bzlスクリプトから送信したかったのですrepository_ctx.templateが、ここでもこのパスを見つける方法が見つかりません!

bazel-out や bazel-genfiles などのシンボリック リンクを使用してこのフォルダーにアクセスできるようには見えません (非常に有望に思えますが、そうではありません...)。また、このフォルダーの外にファイルを作成することもできませんでした。

これは非常に単純な問題であり、パスをハードコーディングするか、パスへのパスを指定する以外に方法がないとは信じられませんfind...

4

1 に答える 1

1

問題は、ビルドで使用するためにレポの BUILD ファイルでファイルを公開していないことだと思います。次のようなことをする必要があります:

repository_ctx.file('whatever')
repository_ctx.file('BUILD', 'exports_files(["whatever"])')

その後@repository_name//:whatever、他の BUILD ファイルで使用できます。

exports_filesは、パッケージが他のパッケージのソース ファイルに依存するようにするために使用されます。

次に、ビルド時にロードする .bzl ファイルに、ファイルを属性として追加します。

attrs = {
    '_my_external_src' : attr.label(
        default = Label('@my_repository//:whatever'),
        allow_single_file = True,
    ),
},

次に、ルールの実装で、コンテキストを介してアクセスできます。

def _impl(ctx):
    print(ctx.file._my_external_src.path)

.pathファイルのパスを取得します。

于 2017-04-17T17:44:18.840 に答える