bazel:从环境变量设置全局变量

时间:2020-12-21 16:48:00

标签: bazel

我需要在我的 bzl 文件中使用环境变量。现在它像这样硬编码

PI_TOOLCHAIN_ROOT_DIR = "/home/dev/oosman/.leila/toolchains/rpi"

我可能会在下面的_impl方法中读取环境变量,但是我如何设置上面的全局变量。

def _impl(ctx):
    #todo: need to get this env variable and use it instead of hardcoded paths where ever rpi is defined above
    #PI_TOOLCHAIN_ROOT_DIR=${HOME}/${DOCKERUSER}/.leila/toolchains/rpi
    #ctx.os.environ.get("PI_TOOLCHAIN_ROOT_DIR", "/home/dev/oosman/.leila/toolchains/rpi") #osm

https://github.com/jambamamba/libedgetpu/blob/raspi0/coral_crosstool1/cc_toolchain_config.bzl

1 个答案:

答案 0 :(得分:1)

使用 repository rule 生成 .bzl 文件。像这样:

def _impl(repository_ctx):
  repository_ctx.file("pi_toolchain_root.bzl", "PI_TOOLCHAIN_ROOT_DIR = \"%s\"" % \
      repository_ctx.os.environ.get("PI_TOOLCHAIN_ROOT_DIR", "/home/dev/oosman/.leila/toolchains/rpi"))

pi_toolchain_repository = repository_rule(
    implementation=_impl,
    environ = ["PI_TOOLCHAIN_ROOT_DIR"],
)

然后在你的 WORKSPACE 你可以写:

load("//:wherever.bzl", "pi_toolchain_repository")
pi_toolchain_repository(name = "pi_toolchain")

然后(稍后在 WORKSPACE 或 BUILD 或 .bzl 文件中):

load("@pi_toolchain//:pi_toolchain_root.bzl", "PI_TOOLCHAIN_ROOT_DIR")