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

使用Zig在arm64上引导Uber的基础设施

下图画出了主机工具链、sysroot 以及它们之间的关系,每个主机工具链(左)都可以使用任意特定于目标平台的 sysroot(右): 图 2:基于 LLVM 的工具链需要每个主机和目标平台的 tarball...(“sysroot”) 为了支持这些主机和目标平台,我们需要维护 8 个压缩文件:3 个工具链(每个主机架构需要一个编译的 LLVM)和 5 个目标平台的 sysroot。...一个典型的 LLVM 工具链需要 500 到 700MB(压缩包),一个典型的 sysroot 需要 100 到 150MB(压缩包)。...在购买 Bazel 工具链时,我们评估了 GCC 和基于 LLVM 的工具链。LLVM 更受青睐,因为它需要维护的压缩文件数量的增长是线性的(而不是 GCC 那样的二次幂增长)。...Bazel 与 Zig 对于 Bazel 来说,只有一个 C++ 工具链(在本例中是 Zig SDK)是不够的:它还需要一些粘合代码,一个工具链配置。

37130

连1.0版本都没有,Uber为什么会采用这样一项新技术?

Bazel 文档对此做了很好的解释。 创建于 2019 年,没有太多变动。 C++ 工具链是一个编译 C/C++ 代码的程序集。...从 Go Monorepo 创建伊始,C++ 工具链就不是封闭式的:Bazel 会使用它在系统上发现的任何东西。...我花了几个晚上基于 musl.cc 创建了一个 Bazel 工具链,但没走多远,因为当时我无法深入理解 Bazel 的工具链文档,而且也没有找到一个好的示例可以参照。...对于以 macOS 为目标封闭式工具链,选择的天平偏向了zig cc,连同它所有的缺陷、风险和不稳定性。...Go 平台团队承诺为我们的 C++ 工具链实现交叉编译和封闭。 合同金额是公开的,因为 ZSF 是非营利的。

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

    自定义工具链

    Bazel 自定义工具链的两种方式,Platform 和 Non-Platform 方式。...--crosstool_top 来指定工具链集合,--cpu 来指定具体的某设备工具链;对于 Java,则需要通过 --java_toolchain、--host_java_toolchain、--javabase...如第一章所述,平台是这些约束的指定选择集合,表示在某些环境中可用的特定资源。 将环境建模为平台有助于 Bazel 为构建操作自动选择适当的工具链。...3.1.4 指定平台构建 你可以使用以下命令行标志为构建指定主机和目标平台: --host_platform:默认为 @bazel_tools//platforms:host_platform --platforms...最后,当 Bazel 开始构建时,它会检查执行和目标平台的约束条件。然后选择与这些约束兼容的一组合适的工具链。Bazel 将向请求它们的规则提供这些工具链的 ToolchainInfo 对象。

    4.8K31

    嵌入式开发之交叉编译程序万能命令_以freetype为例

    系统目录:就是交叉编译工具链里的某个include目录; 也可以自己指定:编译时用 “ -I dir ”选项指定。 链接时去哪找库文件?...系统目录:就是交叉编译工具链里的某个lib目录; 也可以自己指定:链接时用 “ -L dir ”选项指定。 运行时去哪找库文件?...系统目录:就是交叉编译工具链里的某个include目录; 也可以自己指定:编译时用 “ -I dir ”选项指定。 怎么确定“系统目录”?...① 系统目录:就是交叉编译工具链里的某个lib目录 ② 也可以自己指定:链接时用 “ -L dir ”选项指定 怎么确定“系统目录”?...确定头文件、库文件在工具链中的目录 以STM32MP157开发板为例,它的工具链是arm-buildroot-linux-gnueabihf-gcc,可以执行以下命令: echo 'main(){}'

    2.1K20

    【FFmpeg】编译不同平台的 FFmpeg 源码 ( 本地编译 与 交叉编译 | FFmpeg 指定目标平台的编译配置参数 | 配置目标 CPU 架构 | 配置目标操作系统 )

    自带的 目标系统的 头文件 ; 依赖库 : 特定交叉编译工具链 自带的 目标系统的 依赖库文件 , 需要与头文件匹配 ; 在交叉编译中 , 需要使用交叉编译工具链 , 并手动配置编译选项以适应目标系统的要求.../ 禁用滤镜 --enable-cross-compile \ // 启用交叉编译 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ // 指定交叉编译工具链的前缀...="$FLAGS" \ // 额外的编译选项 , 用于设定 gcc 编译器的其它编译选项 --arch=arm \ // 指定目标体系结构为 ARM --target-os=android /...- 配置 交叉编译工具链的前缀 ; --sysroot 配置 交叉编译工具链 的 头文件 和 函数库 搜索路径 ; --extra-cflags="$FLAGS" 配置 gcc / g++ 编译器的 额外选项...; --arch=arm 配置要编译 arm 架构的 可执行程序 和 函数库 ; --target-os=android 配置 指定要编译的目标系统为 Android 系统 ; 2、配置目标 CPU

    1.4K00

    OpenHarmony开发——CMake方式组织编译的库移植

    文中着重介绍各编译组织方式下工具链的设置方法以及如何将该库的编译添加到OpenHarmony整个工程的构建中。...设置执行交叉编译CMake方式可通过指定工具链进行交叉编译,修改并编译该库,生成OpenHarmony平台的可执行文件,步骤如下:设置工具链 将下列clang工具链配置添加到该工程的顶层CMakeLists.txt...c编译工具(确保工具链所在路径已经添加到了PATH环境变量中)和编译标志,使用clang编译时标志中必须指定--target,否则无法交叉编译。...c++编译工具(确保工具链所在路径已经添加到了PATH环境变量中)和编译标志,必须指定--target,否则无法交叉编译。...make -j其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot目录的位置,以OpenHarmony为例即目录out/hispark_xxx/ipcamera_hispark_xxx

    25721

    构建Golang项目

    如果使用 cgo,则需要本机上有 C/C++ 工具链,默认的 Bazel 会尝试自动配置工具链 Bash、patch、cat 和 PATH 中的其他一些 Unix 工具 无需安装 Go 工具链,Bazel...会自动为每个项目下载最新版本,当然你也可以用 rules_go 里的工具链相关规则配置本地 Go 工具链或下载指定版本 go_register_toolchains(go_version="1.14.0...") : 下载指定的 Go SDK,默认最新版本 有两种方式使用 gazelle: gazelle 本身就是用 Go 实现的一个工具,通过 Go 的方式使用它。...Bazel Go 规则集,可以让我们很方便地管理 Go 工具链和外部库,而无需依赖于本地安装的库。...借助 Gazelle,能够以最少的人工输入为 Go 项目中的大多数 Go 软件包生成 Bazel 规则。

    4K10

    编译tensorflow-lite-with-select-tf-ops遇到的坑

    tf训练的模型迁移到Android端,使用的是tensorflow-lite,由于模型用到了一些tflite还没有支持的op,所以需要让tflite支持tf的op,官方没有直接给出aar,而是让自己用bazel...去编译一个,实在是有点坑啊,官方编译网址: https://www.tensorflow.org/lite/using_select_tf_ops 大致方法就是: 【1】 安装bazel,【https:...FAILED: Build did NOT complete successfully 这个是我遇到最坑的,由于对bazel工具不熟悉,各种google,花了整整一个上午,才搞出点名堂了,如果编译遇到坑的话...,还是建议先去熟悉下bazel 其实stackoverflow上已经有大神给到了解决方法: How to resolve bazel “undeclared inclusion(s)” error?...return std::round(x); ^~~~~~~~~~ round external/androidndk/ndk/sysroot/usr/include/

    5.7K141

    repository_rule() vs rule()

    它还会中断远程执行,即主机的工具链可能在执行平台上不可用。而 repository_rule() 就可以解决这个问题。...query @{工作区名称}//:* 4 使用 repository_rule 实现下载工具链 我们可以将 Bazel 配置为使用本地工具链,但是为了实现构建环境的可复制性,我们可以将工具链统一远端管理...,当然不只是工具链可以,我们的依赖也可以。...下载并解压工具链后,如果去使用这些工具链呢?其实就相当于我们要实现一套语言相关的规则了,比如 go_binary,怎么去实现下载指定 Go 发行版 SDK,并编译出该 SDK 对应的可执行文件呢?...我们则需要去定义工具链以及定义工具链的动作,比如编译动作(Action)。最后实现 go_binary,将输入(源文件)传入规则,并调用具体的动作实现最后的可执行文件生成。

    2.4K20

    OpenHarmony开发——Makefile方式组织编译的库移植

    以yxml库为例,其移植过程如下文所示。...yxml.c-yxml/yxml.c.in-yxml/yxml-gen.pl-yxml/yxml.h-yxml/yxml.md-yxml/yxml-states-设置交叉编译设置Makefile的交叉编译工具链...,修改并编译该库,生成OpenHarmony平台的可执行文件,步骤如下:设置工具链将下列clang工具链配置替换掉yxml库根目录的Makefile(即表1中的文件)中的原有配置。...clang工具链配置: #设置交叉编译工具链,确保工具链所在路径已经添加到了PATH环境变量中 CC:=clang AR:=llvm-ar #cflags中必须要添加--target及-...=...其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot所在目录,以OpenHarmony为例即源码根目录下out/hispark_xxx/ipcamera_hispark_xxx

    17810

    LinuxMac 交叉编译 Android 程序

    交叉编译工具链 1. 什么是交叉编译工具链 交叉工具链是指可以生成目标环境可运行代码的工具集。...下的编译工具的,而应该使用 Android NDK 里的工具链,它们对应的名子为 arm-linux-android-gcc, arm-linux-android-ld等等。...kernel, 指的目标环境使用的 kernel,以android为例,它使用的是 linux内核,所以在这部分会填写为linux。...CROSS-PREFIX:指明交叉编译前辍 arch-vender-kernel-system SYSROOT: 指明交叉编译目标机器的头文件和库文件目录 TOOLCHAIN: 指明交叉编译工具链的位置...如何进行交叉编译 通过设置configure 参数来生成交叉编译的 Makefile 文件 ** —arch 指定架构 ** ** —cross-prefix 交叉编译工具链前辍 ** **

    2.3K20

    用cmake交叉编译到iOS和Android

    编译iOS工程 iOS 只要设置CMAKE_OSX_SYSROOT,CMAKE_SYSROOT和CMAKE_OSX_ARCHITECTURES就可以了,其他都是自动的。...只要cmake的时候把cmake的工具链检测文件改成这个就行了。...另外Android这个工具链还允许我们选择用哪个STL库(ANDROID_STL选项)、设置NDK目录(ANDROID_NDK选项)和设置使用gcc还是clang(ANDROID_TOOLCHAIN选项...不过使用Android这个文件指定工具链的时候有一个问题,android.toolchain.cmake指定了只从sysroot来获取include目录和库目录,也就是说很多module里可以指定库的搜索目录在...cmake适配写了打包android动态库的脚本: https://github.com/owent-contrib/pbc/blob/master/build_android.sh 前面提到的android工具链只能从

    3.7K10

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

    fdo_profile :表示工作区中或位于指定绝对路径的 FDO 配置文件 cc_test :测试 C/C++ 样例 cc_toolchain :表示一个 C++ 工具链 cc_toolchain_suite...:表示 C++ 工具链的集合 而我们知道规则(Rule)定义了 Bazel 对输入执行的一系列操作,以生成一组输出。...作为规则编写人员,你不仅必须考虑用户提供的规则输入,还必须考虑执行操作(Actions)所需的所有工具和库。...那我们还需要在规则中获取到当前编译器的信息,包括 gcc、ld、ar 工具。...居然是软链接到沙箱(sandbox)源文件,这中间的原理我暂未弄清楚,或许就是沙箱优化 对于交叉编译器,我们必须使用 find_cpp_toolchain(ctx),而不是直接使用 /usr/bin/gcc 等工具链

    5.4K20

    重构基于CMake的构建工具链

    但是每个包的版本和对应工具链的兼容性得自己管理,还是十分不便。 第三个问题比较难解决。大多数 vcpkg 里的包都是配置了从github下载的,也有些只从一些其他的URL下载。...然后如果父级项目指定了 CMAKE_BUILD_TYPE 的话会找不到匹配的链接目标。所以我写了工具自动导出某些特定 CMAKE_BUILD_TYPE fallback到未指定的配置。...另外就是对于 iOS ,tvOS 和 watchOS需要给可执行程序设置BUNDLE,我这里仅仅是编译时工具链,并不需要安转运行。...Windows 长路径问题(260路径长度限制) 还有个问题是使用 cmake-toolset 的时候,默认是的依赖编译目录是 BUILD目录/_deps/平台及工具链名/包名 。...cplusplus即和C++标准保持一致可通过 -DCOMPILER_OPTION_MSVC_ZC_CPP=OFF 来关闭(非 vcpkg 模式)默认设置 CMAKE_MSVC_RUNTIME_LIBRARY 为

    5.1K10
    领券