问题标签 [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.
bazel - 基于 --config 有条件地创建一个 Bazel 规则
我正在解决一个问题,如果指定了某个 Bazel 配置(通过“--config”),我只想创建一个特定规则。我们从 0.11 开始就一直在使用 Bazel,并且有一堆构建基础设施可以解决 Bazel 以前的限制。我正在逐步将我们移植到更新的版本。缺少的功能之一是编译器转换,因此我们使用配置和一些外部脚本推出了自己的功能。
我第一次尝试解决我的问题是这样的:
这几乎可以让我到达那里,但问题是如果我想构建一个库作为输出,那么它就会成为一个中间依赖项,因此会被删除或永远不会构建。
例如,如果我这样做:
然后我跑
然后libsome_lib.a
没有达到bazel-out
,虽然如果我使用 定义它cc_library
,那么它会。
有没有一种方法可以直接在宏中创建适当的规则,而不是创建noop
规则并使用选择?还是其他机制?
在此先感谢您的帮助!
tensorflow - 如何在 Bazel 中获取文件的绝对路径
上下文:我正在尝试为https://github.com/tensorflow/tensorflow/issues/37861提供修复,其中手动列出了外部依赖项的头文件,但该列表是特定于版本的,因此无法跟上迄今为止。
怎么了:
tf_http_archive(name = "com_google_protobuf", system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD") ...)
被调用tf_http_archive
是一个repository_rule
实际上只有ctx.template("BUILD.bazel", ctx.attr.system_build_file, {...}, False)
- 在
protobuf.BUILD
里面有一个列表HEADERS = ["google/protobuf/any.pb.h", ...]
,它被传递给调用的hdrs
参数cc_library
- 一个明显的
genrule
符号链接这些头文件(我$(INCLUDEDIR)
对$(@D)
Bazel 不是很熟悉,但 IIUC 是稍后使用的一些内部构建目录)
由于我一般不熟悉 Bazel,因此我假设标题列表是必需的,并且存在一个$(INCLUDEDIR)/google/protobuf
文件夹并且位于系统上的某个位置(其他),例如/usr/local/include
.
有什么方法可以通过 glob 或类似方式获取格式(即相对于 )的所有文件*.h
?Bazel函数不适用于绝对路径,因此无法使用。*.inc
$(INCLUDEDIR)
glob
我发现https://github.com/bazelbuild/bazel/issues/8846建议new_local_repository
与 abuild_file
和 a一起使用path
(在这种情况下)$(INCLUDEDIR)
,但我不知道如何将其应用于tf_http_archive
(有一些条件要么下载依赖项,要么只使用 system_build_file)。这似乎也可以避免符号链接(无论如何我都非常怀疑,因为该文件夹是通过-iquote
但包含样式添加的#include <...>
,请参阅我在https://github.com/tensorflow/tensorflow/issues/37861中的评论)
为问题做出贡献的人或为什么在调用中似乎忽略了 action_env 环境变量的想法的人的奖励积分native.cc_library
。
go - Bazel/Golang:规则“go_embed_data”不包含声明的提供者“GoArchive”
我正在尝试为我的项目创建一个仅嵌入文件集合的 Bazel 规则。嵌入规则如下:
然后我将其添加到我的 go_library 规则中:
但是,当我尝试构建它时,我最终得到了一个在其他地方找不到的模糊错误。
我应该如何解决这个错误?
bazel - 如何使用私有存储库对瞪羚 --update-repos
当您的 go.mod 文件中有私有存储库时,当您有私有存储库时如何运行 bazel gelelle update-repo 命令
bazel - 如何在客户端检索 bazel 远程缓存指标
语境
我们想要获取客户端指标,以便我们可以跟踪每个目标构建所需的时间、目标输出的大小以及它们是否是远程缓存命中。
通常,我们可以使用以下两个标志检索每个输出的大小,如果它是远程缓存命中以及编译/下载需要多长时间:
--execution_log_json_file:给我们输出大小,remoteCacheHit,下载的文件数
--profile:向我们提供有关操作何时开始以及花费多长时间的详细信息(但不是很详细)
我们的用例
我们无法使用执行日志,因为我们的构建太大(几 GB 大小)。
我们不能使用配置文件,因为它没有关于远程缓存命中或文件大小的信息。
理想情况下,我们希望两者结合。
问题
有没有办法在一个位置检索所有这些信息?Build 事件协议会公开这些指标吗?有这个问题可能是相关的。
bazel - 将目录复制到 Bazel 中的新目录
基本上我想要的只是cp -r src/ dist/
,但由于某种原因,我根本无法让它工作。
目前我正在尝试:
我已经浏览了至少 4 页的 google 和文档,但似乎除非我创建一个 genrule 并在规则中手动指定所有 100 个文件,否则它不会起作用?
dockerfile - Bazel 3.5.1 版本下载
我有一个dockerfile:
来自 golang:最新
我收到错误消息:
我认为这是一个版本问题,我怎样才能使它工作?
go - 瞪羚+protobuf 问题:没有强制提供者:'GoLibrary'
从瞪羚生成的 BUILD 文件中,我在运行时收到以下错误bazel build //foo/bar/protos/...:
ERROR: .../foo/bar/protos/BUILD.bazel:15:17: in deps attribute of go_proto_library rule //foo/bar/protos:protos_go_proto: '//baz/quux/api:api_proto' does not have mandatory providers: 'GoLibrary'
两个 BUILD 文件都有:
我见过https://github.com/bazelbuild/rules_go/blob/master/go/providers.rst
,但它更令人困惑。
我也在 Gophers Slack 上问过这个问题,但那里的流量很少。
bazel - 了解 Bazel“运行”动作的“输入”参数
我正在编写一个简单的 Bazel 规则,它使用ctx.actions.run
. 不幸的是,我很难理解运行动作inputs
的参数。
文档说inputs
是“动作输入文件的列表或 depset”。如果我的操作只是运行一个可执行文件并传递一些文件路径作为其参数怎么办?假设我将参数指定为操作的arguments
参数run
。我还需要将这些文件路径添加到inputs
参数中吗?为什么 ?
bazel - Bazel 外部依赖项在用作另一个规则中的工具的规则中不必要地重建
我正在研究一组Bazel 规则,其中一个测试规则也作为工具从另一个可执行规则中执行。测试规则依赖于由rules_foreign_cc构建的外部工具。
使用原始 Bazel 缓存,在使用bazel test //examples:counter_fail
外部工具运行测试规则的实例时构建。当可执行规则的实例(利用测试规则)运行时,也会构建外部工具bazel run //examples:counter_fail_trace
。一旦在这两个上下文中构建了外部工具,后续测试或运行就会使用缓存的输出。
两次构建外部工具似乎没有必要,因为测试和可执行规则都具有相同的配置(“exec”)。我有一种预感,这可能bazel test
与bazel run
调用不同的命令行选项有关,导致缓存错过外部依赖项。
我的问题主要是导致此重建的原因以及如何摆脱它?没有回答这个问题,有哪些技术可以深入挖掘导致这种重建的原因?我尝试了一些基本的 Bazel 查询,但运气不佳。
编辑
这个我还没破解 我确实怀疑两者之间存在细微差别bazel test
,bazel run
但不幸的是,关于两者在文档中的具体差异的信息有限。