首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义命令行编译标志

2 背景 Starlark Configurations 是 Bazel 的 API,用于自定义项目的构建方式。...使用 Starlark Configurations 可以让你: 定义项目自己的编译标志,而不再需要 --define 对于规则,可以实现默认的编译配置 不像传统的 --cpu 、--copt 、--compilation_mode...=(-c) 等方式,是 Bazel 版本内置,而用户自定义的编译设置可以在 .bzl 文件中实现,不需要重新编译 Bazel 源码就可以实现 我们最终实现: $ bazel build //my:binary...当然,简单的,我们可以定义构建设置,只限制值类型,而不限制值内容。 构建设置相关的规则跟其他规则定义差不多,区别就是看有没有 build_setting 属性。...更多的使用场景可以参考官方文档,包括 Bazel 内置的 label_flag 和 label_setting;结合 select() 使用; 参考资料 [1] 这里: https://docs.google.com

2.6K40

扩展 Bazel 的构建语言

本篇介绍何使用宏和规则扩展 Bazel 的构建语言。 在学习更高级的概念之前,先了解以下几个知识点: 了解 BUILD 和 .bzl 文件中使用的 Starlark 语言。...Starlark 语言 参考 https://www.backendcloud.cn/2022/07/01/bazel-starlark/ 宏和规则(Macros and rules) 宏是实例化规则的函数...它可以访问 Bazel 内部信息,并完全掌控将要处理的内容。例如,它可以将信息传递给其他规则。 如果您想重复使用简单的逻辑,请从宏开始。如果宏变得复杂,通常最好使其成为规则。...对新语言的支持通常通过规则来实现,例如 rules_go( https://github.com/bazelbuild/rules_go )。...path/to/variables.bzl 中,写入: COPTS = ["-DVERSION=5"] 然后,可以在 BUILD 文件以访问变量: load("//path/to:variables.bzl

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    告别配置复杂性:领域特定语言(DSL)能帮你吗?

    事实上,其中一些语言最初是为特定工具创建的,例如 Terraform 的 HCL,Bazel 的 Starlark Bazel,Nix 包管理器的 Nickel Nix 包管理器,以及 KusionStack...与模板语言相比,配置语言具有更强大的表达能力,并且通常具有更高的类型安全性和模式验证能力。 当然,每位语言设计者在设计语言时都有一些具体目标。...Starlark 是一种可嵌入的 Python 方言,对于熟悉 Python 的人来说很熟悉。Jsonnet 是JSON 的超集。Nickel 中的类型是可选的。Pkl……等等。...,语法 显然也略有不同:是否使用大括号,是否允许尾随逗号,双引号与单引号与无引号,严格嵌套与否,冒号与等号,是否使用类型名称,是否在语言内部定义模式,是否需要显式生成语句,额外的关键字或标点符号等等。...有些语言的样板代码稍多一些,有些则稍少一些。类型安全在每种语言中的工作方式也略有不同。不同的语言会让不同的人感觉更熟悉,这取决于他们了解的其他语言。

    9610

    golang with script

    实际我们在使用过程中,有时候希望 go 能够像脚步语言一样执行一些动态的命令,这种功能至少有以下的好处: 学习使用,作为一种 repl 工具验证语法 快速验证某个包的功能,或者某种远程资源内容 作为工程的嵌入代码...,这点 gopher-lua 比较方便 作为嵌入脚本,要降低使用成本,使用已经存在的、简单的语言的优势比较明显,比如 lua、starlark 能否动态 import 第三方库对于作为 repl 使用是一个很重要的功能...但是这还是不够,go 语言已经有非常丰富的生态,如果用一种很简单的办法直接使用 go 语言的库,那就很方便了。...解决这个问题的办法是这样的一个库:https://github.com/layeh/gopher-luar 这个库的思路是通过 reflect 的办法封装 go 语言的库,方法,和类型,在 go 语言和...最终使用示例如下: [20211021205013.png] 更多 gopher-luar 和 starlark-go-lib 已经把在 gopher-lua 和 starlark-go 中使用 go

    3.4K170

    自定义规则实现将多个静态库合并为一个动态库或静态库

    1 前言 2 自定义规则实现 2.1 规则功能 2.2 实现规则的理论基础 2.3 规则代码实现 3 总结 4 参考资料 1 前言 为了实现如标题所述的将多个静态库合并为一个动态库,内置的 Bazel...规则是没有这个功能的,Bazel C/C++ 相关的内置规则有: cc_binary :生成可执行文件 cc_import :允许用户导入预编译的 C/C++ 库,包括动态库、静态库 cc_library...目前还没有找到相关办法是否可以做到只链接进上层模块库所调用到的函数。...创建操作(Action)时,Bazel 不会立即运行命令。它将其注册在依赖关系图中,因为一个 Action 可以依赖于另一个 Action 的输出(例如,在 C 语言中,必须在编译后调用链接器)。...通常用于从 rules 和 aspects 的传递依赖中积累数据。depset 的成员必须是可散列的(hashable),并且所有元素都是相同类型。

    5.4K20

    如何挖掘 Bazel 的极致性能

    不满足封闭性的任务,则会导致增量构建失效,例如 Task 访问某个互联网资源,或者 Task 在执行时依赖随机数或时间戳这样的动态特征,这些都会导致多次执行 Task 得到不同的结果。...为了避免重复下载,Bazel 要求在声明外部依赖的时候,需要记录外部依赖的 hash,例如下面的这种形式: 图 8 外部依赖描述 Bazel 会将下载的依赖,以 CAS 的方式存储在内置的 repository_cache...不同客户端发来的相同 Action,可以考虑在服务端进行合并。 不同类型的 worker,需要根据系统的负载,进行弹性伸缩,以确保资源的高效利用。...这种模式对于 Bazel 构建很不友好,不仅外部依赖要重新下载,而且增量编译功能也无法使用。但我们也有办法尽可能的加快构建速度。...Bazel 在设计时非常注重“增量”,“缓存”和“并行”,这是高性能的 基础。而 Bazel 官方推出并维护了不同语言的构建规则,也保证了构建过程时封闭,可靠的,这是高性能的 前提。

    74020

    现代 CI 系统太复杂,方向跑偏了

    这里有很多不同的方法和商业模式,其中一种常见的增值特性是使用某种类型的配置文件 (通常是 YAML),它本身提供了常见的功能,例如配置版本控制系统的检出,并指定要运行的命令,而我遇到的问题就是从这里开始...前面我说过,CI 系统是一种远程执行代码的服务。虽然从传统上看,构建系统是在本地运行 (因此不是服务),但现代的构建系统(如 Bazel、Buck、Gradle) 完全不一样。...Bazel 将远程执行和远程缓存作为内置特性,而这些也是现代 CI 系统的内置功能!...Taskcluster 所提供的特性远远超过了 GitHub、GitLab 等产品。 Taskcluster 提供了 IAM(身份识别与访问管理)风格的作用域特性来实现访问控制。...定义 Starlark 方言,这样就可以像 Bazel 等构建工具中的原语一样定义 CI/ 发布任务。 迫使其他构建工具(如 Bazel)做出改进,缩短构建时间。

    93810

    RustCon Asia 实录 | Rust 在国内某视频网站的应用

    同时,因为我们使用了 Bazel 跟 Gradle,所以在办公网里面,很多开发也需要去访问我们的 Remote Cache 服务,来进行编译加速。...3.2 Bazel 另外介绍一个工具 Bazel,这是谷歌内部类似于 Cargo 的一个编译工具,支持地球上几乎所有的语言,内部本质是一个脚本工具,内置了一套脚本插件系统,只要写一个相应的 Rules...就可以支持各种语言,同时 Bazel 的官方又提供了 Rust 的编译脚本,谷歌官方也提供了一些相应的自动化配置生成的工具,所以 Golang 在使用的时候,优势也很明显,支持 Remote Cashe...同时 Bazel 也支持分布式的编译,可以去用 Bazel 去做 Rust 的分布式编译,并且是跨语言的,但这个功能可能是实验性质的。...4.6 DPDK + 用户态协议栈 那么有没有一种技术既能把数据拷到用户态又能快速的处理?有的,就是 DPDK。 接下来我为大家简单的介绍一下 DPDK,因为在 Aster 里面没有用到。

    1.1K20

    云原生安全全攻略

    Linux内核实现了多种不同类型的Namespace,提供对包括计算和网络在内的不同类型资源的隔离。...BuildKit由Docker公司推出,对Dockerfile有天然较好的支持,它内置高效缓存,支持并行构建操作能力,相比较Docker构建方式,其在执行效率上有明显的优势。...(3)Bazel Bazel是一个功能强大的多语言编译器,可以编译Java、C++、Android、iOS、Golang应用程序,同样也支持容器镜像的编译构建。...其原理是通过扩展插件机制,来添加对新语言及新平台的支持。 使用Bazel分为两个步骤,首先是创建一个工作空间,Bazel从这个工作空间里查找编译文件和Bazel运行时所需要的配置文件。...之后,创建Bazel所需要的BUILD文件,在BUILD文件中定义了编译构建的执行过程。

    1.3K20

    核心语言团队无可替换”

    做出贡献,并维护 C++ 集成工具; 开发和维护 Python 的构建系统规则,包括付出巨大努力将 Python 规则转移到纯 Starlark 代码,而不是让它们纠缠在 blaze/bazel 核心引擎中...; 开发并维护了一个类型检查器(pytype),它可以在没有类型注释的情况下对代码进行推理,并使用一次一个文件的架构处理非常大的项目; 对数亿行代码执行自动重构。...谷歌计算机科学家兼研究总监 Peter Norvig 在 2003 年时说道。 该公司的格言“Python 能用,C++ 必须用”,描述了它对这种多功能编程语言的依赖程度。...是的,谷歌一直是 Python 编程语言的长期支持者和用户,除了 C++、Java 和 Go 之外,Python 是该公司的官方服务器端语言之一。...Python 目前也是机器学习项目的开发人员最常使用的语言,包括谷歌著名的 TensorFlow 框架就是以此为基础。 还值得注意的是,谷歌与该语言本身和 Python 软件基金会有着密切的关系。

    13710

    核心语言团队无可替换”

    做出贡献,并维护 C++ 集成工具; 开发和维护 Python 的构建系统规则,包括付出巨大努力将 Python 规则转移到纯 Starlark 代码,而不是让它们纠缠在 blaze/bazel 核心引擎中...; 开发并维护了一个类型检查器(pytype),它可以在没有类型注释的情况下对代码进行推理,并使用一次一个文件的架构处理非常大的项目; 对数亿行代码执行自动重构。...谷歌计算机科学家兼研究总监 Peter Norvig 在 2003 年时说道。 该公司的格言“Python 能用,C++ 必须用”,描述了它对这种多功能编程语言的依赖程度。...是的,谷歌一直是 Python 编程语言的长期支持者和用户,除了 C++、Java 和 Go 之外,Python 是该公司的官方服务器端语言之一。...Python 目前也是机器学习项目的开发人员最常使用的语言,包括谷歌著名的 TensorFlow 框架就是以此为基础。 还值得注意的是,谷歌与该语言本身和 Python 软件基金会有着密切的关系。

    19010

    多年C++开发使用经验总结

    2、thirdparty的管理 Bazel内置了对thirdparty源码级别依赖的支持https://docs.bazel.build/versions/master/external.html:...在该项目中,我们依赖了几个不同类型的项目: 从构建工具上来看,这些依赖有使用CMake的,有使用make的,有使用autotools的 从来源上来看,有的依赖来自git仓库,有的来自http链接,有的则是从一个大的项目里面挑选了一个更小的模块使用...3、其它 Bazel和CMake当然还有些其它方面值得对比,但并非一些通用的点,这里就简单列举下,不再详细展开了: IDE集成 缓存编译结果,从而加速编译过程 多语言混合变成的支持 分布式编译 跨平台的支持...master/tensorflow/core/lib/core/status.h C语言的字符串封装:string_view https://github.com/abseil/abseil-cpp/blob...说的更直白一点就是,“代码洁癖”这东西到底有没有意义? 我的看法是:代码洁癖不是一个原则,而是在投入和产出上的一种权衡。

    3K30

    自定义工具链

    因此非平台方式(Non-Platform)的自定义工具链实现并没有统一的 APIs 来规范不同语言的跨平台构建。而 Bazel 的目标是在大型、混合语言、多平台项目中脱颖而出。...3.2 工具链 在“前言”一章节中,可以知道平台可以实现混合语言项目的构建,而如果对每一种语言实现构建,则需要配置工具链以及实现工具链的平台约束设定。...任何定义工具链的人都需要声明一个 toolchain_type 目标,这是一个字符串标识,用来标志工具链类别,以避免在加载了多个语言规则的工作区中出现潜在的冲突。...4 小结 从 Bazel 的平台应用我们可以看到它的强大在于大型、混合语言、多平台的应用,能够统一平台构建,这也是 Bazel 的核心特点。...,不过对于单语言的大型项目,实现分布式缓存和构建、非时间戳的增量构建用 Bazel 也是一个很好的选择。

    4.8K31

    repository_rule() vs rule()

    首先整体比较下 repository_rule() 和 rule 的区别: repository_rule rule 仅可在 WORKSPACE 中使用 只能在 BUILD 中使用 在构建的最开始(获取阶段...repository_ctx APIs 提供的规则可直接访问主机系统而无需沙箱,因此为了构建在不同环境下的可复制性,需要注意不要引入系统相关的信息,比如时间戳或者特定目录名或者环境变量等。...git 仓库 与 http 相关的规则:@bazel_tools//tools/build_defs/repo:http.bzl http_archive:将 Bazel 相关的压缩的存档文件远程仓库下载下来...和内置的 repository rules 一样,可以使用 `repository_rule`[1] 函数自定义 repository rules。...其实就相当于我们要实现一套语言相关的规则了,比如 go_binary,怎么去实现下载指定 Go 发行版 SDK,并编译出该 SDK 对应的可执行文件呢?

    2.4K20

    Go的语言特性总结

    更丰富的内置类型 其实作为一种新兴的语言,如果仅仅是为了某种特定的用途那么可能其内置类型不是很多,仅需要能够完成我的功能即可,但是Go语言“不仅支持几乎所有语言都支持的简单内置类型(比如整型和浮点型等)...数组切片(Slice),类似于C++ STL中的vector,在Go也是一种内置的数据类型作为动态数组来使用。...,但接口和类型可以直 接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接 口调整而导致的大量代码调整工作”。...在Go语言中直接重用了大部份的C模块,这里称为Cgo.Cgo允许开发者混合编写C语言代码,然后Cgo工具可以将这些混合的C代码提取并生成对于C功能的调用包装代码。...开发者基本上可以完全忽略这个Go语言和C语言的边界是如何跨越的。 例如书中一个例子,在Go语言中直接调用了C标准库的puts函数。

    2.1K70

    Java和Python思维方式的不同之处

    但后来因为工作原因强行写了一年的Java,反而不那么讨厌它了。 我们常说语言决定思维方式,Java和Python其实是两种不同的思维方式。...点击空白处查看答案 可爱的豆子——使用Beans思想让Python代码更易维护 这是我2016年的一篇文章,记住Python变量类型的三种方式,2016年的时候,python还么有dataclass这个内置模块...目前知乎会员可完整阅读的帖子只能在 app 中可读web 小程序都不行,airtest 现在不显示回答的内容,fd 抓包在 app 内无网络 (手机自带的浏览器可以访问网络排除了fd设置问题) 点击空白处查看答案...你可以用mitmproxy监控手机的http请求。拦截这个接口的返回信息。我的爬虫书上面讲到了具体的方法,可以在微信读书上面搜索我的名字就能找到我的书,绿皮那本。...6 接问题5,可是这样不绕过安卓微信的sslpining,能抓到数据吗?有没有办法电脑微信抓取呢?

    73650

    【五万言】Rust 2022 生态版图调研报告(下)

    主要特点: 完全支持 JSON 标准 在文档中选择元素使用类似 JSONPath 的语法 文档存储为树结构中的二进制数据,允许快速访问子元素 所有 JSON 值类型支持类型化原子操作 基于 RediSearch...而随之而来的是一些不可忽视的额外好处:一个业界最好的包/模块系统,针对竞赛条件或越界内存访问的内置安全,广泛的工具和实用程序,以改善程序员的工作流程,以及其他许多东西。...starlark-rust : starlark 语言的 Rust 实现 Tensorflow, Envoy, Kubernetes, KubeVirt 等等大型项目都是用 Bazel 构建的,要参与开发这些项目或者基于这些项目做开发...Starlark 是一门配置语言,设计之初是为了作为 Bazel 的配置语言,Starlark语法类似 Python,但不是Python,保持语言类似于 Python 可以减少学习曲线,使语义对用户更加明显...starlark-rust[320] 是 Meta(原 facebook) 团队对 Starlark 语言的 Rust 实现。

    3K51

    总结 | 尹立博:Python 全局解释器锁与并发 | AI 研习社第 59 期猿桌会

    AI 科技评论按:作为排名靠前的最受欢迎和增长最快的编程语言之一,Python 是一种多用途、高级别、面向对象、交互式、解释型和对用户非常友好的编程语言,拥有卓越的可读性和极高的自由度。...然而,GIL 的设计有时会显得笨拙低效,并对语言的并发性带来严重限制,但是此时由于内置库和第三方库已经对 GIL 形成了巨大的依赖,想改变 GIL 反而变得困难了。...PyPy:实验性分支支持软件事务内存 (STM),不过 STM 目前还是一个相对少见的机制,可解决当前很多问题,但是实现非常困难——尤其在像 Python 这种高度动态的语言当中。...Starlark:这种方案并非去掉 GIL,而是一门兼容部分 Python 语法,并发执行字节码的新语言。它目前用于 Google Bazel 编译系统,我个人认为这是一个非常有意思的未来趋势。...而 Python 指令不具有原子性 第二,每次访问受限资源都需获取锁 第三,锁不具有强制性,即使忘记获取锁,代码也可能运行 第四,竞争状态难以复制 我们看一个相关的案例——多线程计数器: (关于多线程计数器的案例讲解

    83920
    领券