问题标签 [starlark]

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 回答
54 浏览

c - 您如何处理在 Bazel 中作为 #defines 传递的包含依赖项?

我正在尝试使用 Bazel 构建遗留​​的 C/C++ 嵌入式代码库。代码被分成软件集。因为系统是嵌入式的,所以有一个环境头包含作为参数传递给每个软件集的编译器。标头路径使用#define 定义:

software_set_b 的源文件可能以:

编译指令会将 MY_ENV 定义为 software_set_a 中环境头的绝对路径,例如:

是否可以使用 Bazel 来实现这一点,而无需显式传入/path/to/software_set_a/headers/MyEnvironment.h参数--definebazel build或硬编码 software_set_b 的 BUILD 文件中的值,例如:

理想情况下,程序员可以选择带有参数的包,例如bazel build //:software_set_b --//:from_env=software_set_a在 BUILD 脚本中使用类似于以下内容的片段:

0 投票
1 回答
30 浏览

python-3.x - 在 py_binary 的 args 字段中传递命名参数

考虑我有一个 py_binary :

如果 mock.py 接受--somearg使用参数解析器命名的命令行参数,我如何通过 bazel 文件中的 args 字段传递这个参数而不在bazel build命令中传递参数?

0 投票
0 回答
20 浏览

protocol-buffers - Bazel + rules_proto:实例化Base +多个Impls

语境

我正在尝试在Bazel中做一些 protobuf 代码生成,最终使用rules_proto_grpc,但正如我所见,内核正在使用rules_proto,我们现在可以专注于这些。

总体思路是构建一个包含多个 API 实例的monorepo,所有实例都共享/专门化一个公共基础/核心 API

简化后,它看起来像:

目标

service_a构建过程应该为两个 ( + service_b) 实例准备必要的目标:

  • 最终我们想要一些具有通用部分和service_a专业化(消息SpecificServiceInfo)的语言 X 代码
  • 最终我们想要一些具有通用部分和service_b专业化(消息SpecificServiceInfo)的语言 X 代码

这两个输出是独立的。他们只是共享这个核心并生活在同一个存储库中。

没有巴泽尔

一个不像Bazel那样严格的简单工具链,可能只需准备2 个基本部分的先验副本到2 个隔离目录中,添加特定的实现并实例化/编译它们。

我不认为这有任何问题,除了最初的目标是在 bazel 中表达这一点,因为事情在某些时候会变得更加复杂。

尝试/问题

嗯...事实上我什至不知道从哪里开始。

我想尝试模拟上述孤立的复制方法,但我无法做到这一点。我尝试了一些genrule的组合(据我了解,类似复制的方法与 genrule背后的构建时固定文件基数的想法相悖),但随着各种问题的出现,我似乎错过了一些基本概念。

核心问题似乎得到了以下两个,而不是直接连接的东西同步:

  • bazel 类目标管理(例如将 base + service_a 表示为一个整体)
  • 保持路径结构,以便imports在这些.proto文件中工作
    • 特别是:import "generic-api/specific_impl/X/specific_service_info.proto";service_info.proto

似乎,rules_proto旨在与WORKSPACE 相关的导入一起使用。这似乎使这变得更加困难,因为在没有相对导入的那些导入中指定service_avs看起来很麻烦。service_b

我不知道是否import_prefixstrip_import_prefix可以提供帮助。import public / exports也可能是一种成分,但我害怕不支持 java免责声明(在 protobuf 页面上)。

有人知道如何实现这样的目标吗?是否有可能的宏/通用路径或是否需要更复杂的方法?

0 投票
1 回答
31 浏览

bazel - Bazel 问题:`filegroup` 到 `declare_directory`

我有一个关于如何制作filegroupdeclare_directory.

所以我能想到的是, filegroup-> pkg_tar-> untar_to_dir(将 tarball 解压到declare_directory.

它会起作用,而且我已经证明了这一点。但是,我想知道是否有其他更优雅的方法来避免 tar 和 untar 文件组?

我尝试过的一个想法,但非常复杂,是将它们declare_directory逐个文件复制到文件中。但棘手的一点是,它无法优雅地处理在新目录中保持相同的目录结构。(就像我之前要mkdir很多子目录一样cp)。

0 投票
1 回答
57 浏览

bazel - 如何将用户定义的构建设置传递给现有的 Bazel 规则?

我想从--define标志中迁移出来并根据以下内容构建设置:https ://docs.bazel.build/versions/5.0.0/skylark/config.html

这是我想传递命令行值的规则。

  • 在使用加载规则时,这可以在实践中完成吗?
  • 可以访问 .bazel 文件的规则字段中的构建设置值,还是只能访问 Starlark 配置?
  • 有没有办法有效地“子类化”加载的规则而无需访问已发布的实现?如果_impl是公开的,似乎我可以用我自己的实现来包装它,并传递标志。

我对 Bazel 有点陌生,并且仍在寻找正确的方法来概念化这些东西。任何指导表示赞赏!

当前方法

后端/BUILD.bazel:

然后我运行:

我试过的

几种变体:

后端/rules.bzl:

然后我运行:

返回:

0 投票
1 回答
19 浏览

bazel - 如何将别名值传递给 bazel 函数?

我在 BUILD 文件中定义了以下别名:

如何将“实际”字符串传递给这样的函数?

我正在尝试最天真的事情,它不明白它是别名,而不是字符串: