2017-05-12 4 views
0

에서 사용할 I WORKSPACE에서 다음과 같은 규칙이 있습니다전화 LLVM-구성 --prefix와는 BUILD 규칙

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

지금 LLVM에 대한 하드 경로를 사용하고 싶습니다. llvm-config --prefix 나에게 LLVM에 대한 디렉토리를 제공 할 수 있습니다. 이것을 얻는 올바른 방법은 무엇입니까? 난 그냥 표준 파이썬 명령 (예를 들어, subprocess 패키지)를 사용할 수 있습니까?

답변

2

, 당신은 출력을 가리키는 심볼릭 링크를 생성, 명령을 실행, 사용자 정의 저장소 규칙을 작성하고 저장소에 대한 빌드 파일을 만들 수 있습니다

작업 영역 파일 :

workspace(name = "io_bazel") 

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

llvm_configure(name = "local_config_llvm") 

foo는/repo.bzl 다음의 repo에서

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 = []) 

대상 :

,443,967,개

생성 된 파일 :

$ 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 말했듯이