首页
学习
活动
专区
工具
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)是不够的:它还需要一些粘合代码,一个工具配置。

24230

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

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

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

自定义工具

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.4K31

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

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

2K20

构建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 规则。

3.7K10

编译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.5K141

repository_rule() vs rule()

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

2.3K20

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.1K20

用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.4K10

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

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 等工具

5K20

【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )

交叉编译工具 : ① 其它开源库的惯例 : 在 FFMPEG 和 x264 交叉编译时 , 都指定了 --cross-prefix 交叉编译工具前缀 ; ② FAAC 中指定交叉编译工具的方法 :...variables: # C 编码器命令行, 即 gcc, 这里可以直接指定交叉编译工具的 gcc CC C compiler command # 指定传递给 gcc.../bin/arm-linux-androideabi # gcc 编译器参数, 这里指定使用 android-17 版本的库进行编译 FLAGS="-isysroot $NDK_ROOT/sysroot...expected an absolute directory name # 改成绝对路径, 或者使用下面的方法 PREFIX=`pwd`/android/armeabi-v7a # FAAC 中没有指定交叉编译工具的选项..., 只能在此处通过环境变量的方式进行指定 # 这里指定使用 android-17 版本的库进行编译 export CC="$CROSS_COMPILE-gcc --sysroot=$NDK_ROOT/platforms

71010

重构基于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

4.9K10

「Android音视频编码那点破事」第七章,在Linux下编译Android版X264

这里以arm例,首先新建build-android-arm.sh脚本文件。 vim build-android-arm.sh   输入以下脚本代码。...其中NDK替换成本系统NDK的路径,PLATFORM和TOOLCHAIN也可以替换成对应平台的工具。ARM_IN和ARM_LIB不用管,PREFIX是so的输出路径,也可替换成自己的。...enable-pic 开启pic选项 --enable-static 生成静态库 --enable-shared 生成共享库 --disable-lavf 禁用lavf --host=arm-linux 指定目标平台...--cross-prefix 指定交叉编译工具 --sysroot 指定头文件 --extra-cflags 添加编译参数,听说这样对arm有优化?...--disable-lavf \ --host=arm-linux \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --sysroot

36130
领券