2017-05-12 6 views
0

でそれを使用するI WORKSPACEに次のルールがあります。コールLLVM-のconfig --prefixとはBUILDルール

new_local_repository(
    name = "llvm", 
    path = "/opt/local/libexec/llvm-4.0", 
    build_file= "llvm.BUILD") 

私は今、LLVMのためにハードコードされたパスを使用したいと思います。 llvm-config --prefix私にllvmのディレクトリを与えることができます。これを得る正しい方法は何ですか?標準のPythonコマンド(例:subprocessパッケージ)を使用できますか?

答えて

2

、あなたはその出力を指すシンボリックリンクを作成し、コマンドを実行し、カスタムリポジトリルールを作成し、リポジトリのビルドファイルを作成することができます

WORKSPACEファイル:

workspace(name = "io_bazel") 

load("//foo:repo.bzl", "llvm_configure") 

llvm_configure(name = "local_config_llvm") 

FOO/repo.bzl:レポで

def _impl(repository_ctx): 
    result = repository_ctx.execute(["echo", "/tmp/dummy/path"]) 
    llvm_path = result.stdout.splitlines()[0] 
    repository_ctx.symlink(llvm_path, "llvm-4.0") 
    repository_ctx.file("BUILD", """ 
filegroup(
    name = "llvm_files", 
    srcs = glob(["llvm-4.0/**"]), 
    visibility = ["//visibility:public"], 
) 
""") 

llvm_configure = repository_rule(
    implementation=_impl, 
    local = True, 
    environ = []) 

ターゲット:

$ bazel query @local_config_llvm//:* 
@local_config_llvm//:llvm_files 
@local_config_llvm//:llvm-4.0/a.txt 
@local_config_llvm//:BUILD 

生成されたファイル:

$ ls -la $(bazel info output_base)/external/local_config_llvm 
total 16 
drwxr-x--- 2 laszlocsomor eng 4096 May 12 13:06 . 
drwxr-x--- 6 laszlocsomor eng 4096 May 12 13:06 .. 
-rwxr-x--x 1 laszlocsomor eng 115 May 12 13:06 BUILD 
lrwxrwxrwx 1 laszlocsomor eng 15 May 12 13:06 llvm-4.0 -> /tmp/dummy/path 
-rw-r----- 1 laszlocsomor eng 116 May 12 13:06 WORKSPACE 


$ cat $(bazel info output_base)/external/local_config_llvm/BUILD 

filegroup(
    name = "llvm_files", 
    srcs = glob(["llvm-4.0/**"]), 
    visibility = ["//visibility:public"], 
) 


$ cat $(bazel info output_base)/external/local_config_llvm/WORKSPACE 
# DO NOT EDIT: automatically generated WORKSPACE file for llvm_configure rule 
workspace(name = "local_config_llvm") 
+0

どうもありがとう、私はそれを試してみます。 – gruszczy

1

カスタムrepository_ruleを作成し、repository_ctx.execute("llvm-config --prefix")を呼び出して、その値をパッケージで使用できるようにすることができます。

私はあなたが最初に約repository_ruleをお読みになることをお勧めします。何かクリアされていない場合は、お気軽にお問い合わせください。 @abergmeierが言ったように

関連する問題