问题标签 [bazel-rules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

bazel - bazel的输出类型是什么?

在 Bazel 中,您可以定义一个属性类型,它可以是 int 或 string ... 或output

将一种属性类型作为“输出”是什么意思?

这是一个例子:

这是一个简单的规则,它的输出类型为 the_results

0 投票
1 回答
159 浏览

bazel - 如何将相对路径扩展为 bazel 中 cc_common.create_cc_toolchain_config_info 中 cxx_builtin_include_directories 的完整路径?

在声明 cc_common.create_cc_toolchain_config_info 和 providecxx_builtin_include_directories时,我发现需要完全指定包含路径。我只知道 crosstool.bzl 文件中目录的相对路径def _impl(ctx),如何才能完全展开呢?例如

如何将“relative/clang/include”扩展为真实路径?

0 投票
1 回答
415 浏览

bazel - bazel 不会复制二进制文件来构建输出文件夹

使用 bazel 进行初始构建设置,用于在一个最小示例(具有广泛的依赖关系)上测试通用 UI 库。构建设置包括该库的规则和配置。但是,当我扩展此构建时,将依赖项目作为包(BUILD)添加到子文件夹中并将库保留为 new_local_repository - bazel 吐出错误。

它不会将该库的共享二进制文件复制到构建输出。因此,它给出了共享库或所需二进制文件丢失的随机(依赖于任何二进制文件)错误:

这是示例工作区文件:workspace(name = "project")

qt.构建:

0 投票
1 回答
97 浏览

testing - 如何动态生成 bazel 测试套件?

我想根据复杂的 python 脚本的输出动态生成 Bazel 测试规则(使用导入等,不幸的是不能移植到 Starlark)。

是否可以在 Bazel 规则解析期间运行此脚本、解析其输出并创建测试规则,而不是以某种方式生成BUILD包含这些预先编写的规则的文件?

0 投票
0 回答
61 浏览

bazel - 从自定义 bazel 工具链公开 make 变量的预期模式是什么?

我正在尝试将 make 变量公开给 genrule,以便我可以将一些信息从工具链选择传递到自定义规则。在这种情况下,目标文件格式对应于当前为我的语言选择的工具链(MachO/ELF/PE 之一)。

我已经发现,如果我TemplateVariableInfo在特定规则上公开 ,然后在我的 genrule 的工具链属性中依赖该规则,那么我会得到所需的行为。但是我没有看到如何将它与工具链解析结合起来,除了手动通过一个唯一目的是公开 make 变量的规则。这是因为我不控制toolchain_type规则的实施,因此无法使其返回TemplateVariableInfo.

如果我这样做,那么在定义目标时,我需要在工具链属性中提供与定义规则时不同的标签。也许这是最好的模式,但如果是这样的话,那么如果提供的东西与工具链无关,为什么还要Make Variables在属性中提供它们呢?toolchain

0 投票
1 回答
1525 浏览

bazel - 将 CMake 包与 bazel cmake_external 链接

要将 pytorch c++ 库与 CMake 链接,您真的只需要find_package(Torch REQUIRED)并使用

您可以在此处下载源代码:https : //download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip CMake 教程在这里:https ://pytorch.org/cppdocs/安装.html

我有以下内容WORKSPACE

这在我的BUILD

当我尝试链接到它时,我得到了<dir> does not appear to contain CMakeList.txt 这是真的,但是,当您将它与 链接时,不需要find_package(Torch REQUIRED)顶层。CMakeList.txtCMake 寻找TorchConfig.cmake. bazel 可以为这个包创建一个没有顶层的目标CMakeList.txt吗?应该找TorchConfig.cmake吧?

CMAKE_PREFIX_PATH另外,当文件是远程的,通过获取时如何工作http_archive,你使用~/.cache/bazel目录吗?

谢谢!

0 投票
1 回答
397 浏览

docker - 使用 Bazel 将 Go Test 二进制文件添加到 container_image

我正在构建一个我希望包含在 Docker 映像中的 go 测试包。二进制文件可以使用bazel build //testing/e2e:e2e_test. 这会在 bazel_bin 文件夹中创建一个二进制文件。现在我想把这个二进制文件添加到一个 docker 镜像中......

这给了我以下错误

最终,我想要完成的是使用 Go Test 框架创建一个包含一套端到端测试的应用程序。然后我可以将这些测试分发到一个 docker 容器中,以便在测试环境中运行。

0 投票
1 回答
379 浏览

bazel - 将 Bazel 规则输出的目录展开为另一个规则的平面输出

我正在尝试打包一个捆绑包以上传到 Google Cloud。我有一个pkg_web我所做的角度构建的输出,如果我传递到我正在生成的这个自定义规则中,File它是一个作为文件目录的对象。我正在生成的自定义规则需要 app.yaml 等,以及捆绑包和上传。

但是,捆绑包变成了一个目录,我需要扩展该目录的文件以在命令的根目录中上传。

例如:

我需要:

我的规则:

规则实现:

谢谢你的想法!

0 投票
0 回答
47 浏览

bazel - 存储库用户执行预定义 bazel 查询的最便捷方式

我正在编写一个存储库规则,我需要执行一个查询,以便我可以将该查询的输出与我的包管理器一起使用:

bazel query 'rdeps(//..., @package_manager//...) except @package_manager//...' --output=xml

让这个存储库的用户执行这个查询对我来说最方便的方法是什么?

理想情况下,我可以为此使用genquery,但由于//...查询范围,genquery 会出错。

我已经考虑让用户执行我定义的目标并将其通过管道传输到他们的 shell 中:bazel run @package_manager//:query" | shell但这看起来很尴尬,并且显然会在似乎不需要时创建对 shell 的依赖,并要求用户信任任何 shell 命令我要给他们,这似乎是一种糟糕的形式。

背景

我正在制定规则以使用 dotnet 的 nuget 包管理器。Nuget 包管理有一个有趣的特点,即每个包都声明了多个目标框架的依赖关系。当目标 A 声明对包 P 的依赖时,nuget 检查目标 A 以确定其目标框架列表是什么。在确定目标框架列表后,nuget 会针对给定的目标框架解析包 P 的传递依赖关系。

本质上,每个包都由子包组成:P:version:target-framework,即Newtonsoft.Json:12.0.3:netstandard2.0

但是,当目标声明对包的依赖时,目标只是列出 P_version,不包括目标框架。更重要的是,即使Newtonsoft.Json只有一个明确定义netstandard2.0的包,这个框架还是兼容netstandard2.1的。

为了在 Bazel 中适应这一点,我想保持与 nuget 生态系统相同的依赖管理风格,但指定包存储库的版本。即我希望用户指定类似

在 WORKSPACE 中,并指定:

在构建中。

然后结果:

  1. 不获取 newtonsoft.json:12.0.3:netstandard2.0 的依赖项(因为没有),并且此版本与目标 netstandard2.1 兼容
  2. 获取 newtonsoft.json:12.0.3:netstandard1.0 的依赖项(因为有一些) 目标框架的依赖项位于依赖项部分

我计划让用户检查 nuget packages.lock.json 文件,这样第二次就不需要查询目标,而是进行第一次获取,当用户更改任何目标框架版本时,它看起来像在 nuget 能够计算给定包的依赖关系图的传递闭包之前,我需要查询 bazel 以获取依赖于这些包的目标框架。

0 投票
0 回答
269 浏览

go - Bazel build - go:generate stringer “stringer:不可能发生:常量不是整数”

我正在尝试在 Bazel 沙箱中创建一个自动生成的文件“txstatus_string.go”,它依赖于一个 go 文件,它是使用以下 stringer 命令创建的:

我正在使用这样的 bazel genrule:

)

但不知道为什么在这种情况下,纵梁由于“纵梁:不可能发生:常量不是整数”而失败,有人对如何处理或为什么会发生这种情况有更好的了解吗?

我已经使用通用的规则创建了其他一些纵梁文件stringer,一切顺利。

如果您想深入了解代码,这是一个开源 Github 存储库,您可以去查看 =)