gpt4 book ai didi

bazel - 如何将 `config_setting()` 加载到我的 `.bzl` 文件中?

转载 作者:行者123 更新时间:2023-12-05 06:29:55 25 4
gpt4 key购买 nike

我的动机:我们的代码库分散在至少 20 个 git 存储库中。我想用一个构建系统将所有内容合并到一个 git 仓库中。目前我们使用 SBT,但我们认为构建时间太长,因此我正在研究使用 Bazel 代替的可能性。

我们的大部分代码库使用 Scala 2.12,我们的一些代码库使用 Scala 2.11,其余代码库需要在 Scala 2.11 和 Scala 2.12 下构建。

我正在尝试使用 bazelbuild/rules_scala .

通过在我的 WORKSPACE 中调用 scala_repositories,我可以使用 Scala 2.12 进行构建:

scala_repositories(("2.12.6", {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}))

如果我有以下调用,我可以使用 Scala 2.11 构建:

scala_repositories(("2.11.12", {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04"
}))

但是,不可能在我的 BUILD 文件中指定包级别的 Scala 版本来构建。我必须在我的 WORKSPACE 中全局指定它。

为了解决这个问题,我的计划是设置 configurable attributes ,因此我可以指定 --define scala=2.11 以使用 Scala 2.11 构建,并指定 --define scala=2.12 以使用 Scala 2.12 构建。

首先,我尝试将此代码放入我的 WORKSPACE:

config_setting(
name = "scala-2.11",
define_values = {
"scala": "2.11"
}
)

config_setting(
name = "scala-2.12",
define_values = {
"scala": "2.12"
}
)

scala_repositories(
select(
{
"scala-2.11": "2.11.12",
"scala-2.12": "2.12.6"
}
),
select(
{
"scala-2.11": {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04",
},
"scala-2.12": {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}
}
)
)

但这给了我错误 config_setting cannot be in the WORKSPACE file

然后我尝试将代码移动到 Starlark 文件中。

tools/build_rules/scala.bzl 中:

config_setting(
name = "scala-2.11",
define_values = {
"scala": "2.11"
}
)

config_setting(
name = "scala-2.12",
define_values = {
"scala": "2.12"
}
)

def scala_version():
return select(
{
"scala-2.11": "2.11.12",
"scala-2.12": "2.12.6"
}
)

def scala_machinery():
return select(
{
"scala-2.11": {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04",
},
"scala-2.12": {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}
}
)

回到我的WORKSPACE:

load("//tools/build_rules:scala.bzl", "scala_version", "scala_machinery")
scala_repositories(scala_version(), scala_machinery())

但是现在我得到这个错误:

tools/build_rules/scala.bzl:1:1: name 'config_setting' is not defined

这让我很困惑,因为我认为 config_setting() 是内置的。我找不到应该从哪里加载它。

所以,我的问题:

  • 如何将 config_setting() 加载到我的 .bzl 文件中?
  • 或者,是否有更好的方法从命令行控制将哪些参数传递给 scala_repositories()
  • 或者,这是不可能的吗?
$ bazel version
Build label: 0.17.2-homebrew
Build target: bazel-out/darwin-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Sep 28 10:42:37 2018 (1538131357)
Build timestamp: 1538131357
Build timestamp as int: 1538131357

最佳答案

如果您从 bzl 文件调用 native 代码,则必须使用 native. 前缀,因此在这种情况下您将调用 native.config_setting

但是,这将导致相同的错误:config_setting 是 BUILD 规则,而不是 WORKSPACE 规则。

如果你想改变用于特定目标的构建工具,你可以改变工具链,这似乎通过scala_toolchain得到支持。

而且我相信您可以使用配置来选择工具链。

我不熟悉 scala_repositories 的作用。我希望它使用适当的版本名称定义工具链,以便您可以正确引用所需的工具链。并且我希望你可以在同一个工作空间中调用它两次,否则我认为没有解决方案。

关于bazel - 如何将 `config_setting()` 加载到我的 `.bzl` 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com