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

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

原生编译和交叉编译的基础知识 一些我们可能不太熟悉的术语: 二进制文件是由源代码编译而来的机器代码程序。 工具链是将源代码编译为二进制文件所需的一组工具,通常包括预处理器、编译器、链接器等。...在进行交叉编译时,主机和目标是不同的平台(例如,从 macOS arm64 (M1) 编译成 x86_64 Linux)。有时候,目标机器可能无法编译代码,但可以运行。...基础镜像包含许多从 Go 代码库编译出来的内部工具。因此,我们遇到了一个先有鸡还是先有蛋的问题:如何为我们的第一个 arm64 构建主机编译工具?...我们尝试做一些其他工具链无法做到的事情:在 Linux 机器上交叉编译和链接 macOS 可执行文件: 尽管在 2021 年底,Zig 还只是一项未经验证的新技术,但一个主机平台一个 tar 包和交叉编译...Bazel 与 Zig 对于 Bazel 来说,只有一个 C++ 工具链(在本例中是 Zig SDK)是不够的:它还需要一些粘合代码,一个工具链配置。

37330

xmake v2.3.7 发布, 新增 tinyc 和 emscripten 工具链支持

另外,我们在这个版本中也新增对 TinyC 和 Emscripten (WebAssembly) 编译工具链的支持。...更加丰富的工具链支持 当前我们已经支持非常多的工具链环境,而在这个版本中,我们又新增了 TinyC 和 Emscripten (WebAssembly) 编译工具链的支持,我们可以通过下面的命令快速切换到对应的工具链来编译...另外,如果我们要查看 xmake 支持的所有工具链,可以执行下面的命令,另外 xmake f -p cross --sdk=/xxx 的编译配置可以支持更多通用的交叉工具链。...改进对 Qt SDK 环境的支持 另外,这个版本我们还对 Qt SDK 的工具链环境进行了更好的支持,比如 ubuntu 系统下通过 apt 命令安装的 Qt SDK 工具链也进行了支持,而之前的版本只能支持从...工具链 Bugs修复 #903: 修复vcpkg包安装失败问题 #912: 修复自定义工具链 #914: 修复部分aarch64设备上运行lua出现bad light userdata pointer

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

    conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义

    conan NDK交叉编译自己的conan包项目塈profile的定义 上一篇博客《conan入门(八):交叉编译自己的conan包项目》中我们以jsonlib为例说明了如何将交叉编译自己封装成conan...本文还以 jsonlib 为例,说明如何将自己的封装成conan的模块使用Android NDK实现交叉编译。...profile 上一篇博客《conan入门(八):交叉编译自己的conan包项目》中我们是以如下指定来执行交叉编译的。...Using Profile》 使用conan profile文件,我们不仅可以声明settings将识别我们的二进制文件(host设置),还可以声明使用工具链或交叉编译器所需的所有环境变量。...带有指向已安装工具链的 PATH 变量的**[env]部分。**还有工具链期望的任何其他变量(阅读编译器的文档)。一些构建系统需要一个变量SYSROOT来定位主机系统库和工具的位置。

    1.4K30

    xmake从入门到精通9:交叉编译详解

    xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。...除了win, linux, macOS平台,以及android, ios等移动端平台的内建构建支持,xmake也支持对各种其他工具链的交叉编译支持,本文我们将会详细介绍下如何使用xmake进行交叉编译。...-sdk=用于指定交叉工具链的根目录。...例如:一些特殊的交叉工具链的,编译器bin目录,并不在 /home/toolchains_sdkdir/bin 这个位置,而是独立到了 /usr/opt/bin 这个时候,我们可以在设置了sdk参数的基础上追加...clang编译器,或者指定交叉编译工具链中的编译器名或者路径。

    1.8K30

    交叉编译概念详解

    ; Flexibility: 一个完整的 Linux 编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标机器上。...仅用目标编译器替换主机编译器就会破坏需要构建在构建本身中运行的事物的软件包。...这样的软件包需要访问主机和目标编译器,并且需要教它们何时使用它们; Toolchain Leaks:配置不正确的交叉编译工具链可能会将主机系统的某些位泄漏到已编译的程序中,从而导致通常易于检测但难以诊断和纠正的故障...注意: 严格意义上来说,交叉编译器,只是指交叉编译的gcc,但是实际上为了方便,我们常说的交叉编译器就是交叉工具链。本文对这两个概念不加以区分,都是指编译链。...既然明白了交叉编译链的功能,那么在针对嵌入式系统开发时,我们需要的交叉编译链从哪儿得到?

    4.3K10

    conan入门(八):交叉编译自己的conan包项目

    conan 交叉编译自己的conan包项目 上一篇博客《conan入门(七):将自己的项目生成conan包》中我们以jsonlib为例说明了如何将自己的模块封装成conan提供给第三方使用。...在物联应用的大背景下,C/C++开发中跨平台交叉编译的应用是非常广泛的。在使用conan来管理C/C++包(制品库)的环境下,如何实现对conan包封装的项目实现交叉编译的支持呢?...TOOLCHAIN_FILE 要实现交叉首先要定义好工具链文件,我有一个DS-5 ARM的交叉编译器(arm-linux-gnueabihf)。...已经写好了交叉编译工具链文件 conan_example/cmake/ds5-arm-linux-gnueabihf.toolchain.cmake 我们需要通过定义环境变量CONAN_CMAKE_TOOLCHAIN_FILE...后台就可以看到已经上传的package 总结 上面一套流程做完,可以总结一下将一个conan封装项目生成交叉编译的conan二进制包发布的过程: 开始麻烦些,需要工具链文件,并设置环境变量CONAN_CMAKE_TOOLCHAIN_FILE

    2.2K40

    xmake v2.3.4 发布, 更加完善的工具链支持

    为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链。...而新版本xmake内置了一些常用工具链,可以省去交叉编译工具链复杂的配置过程,只需要传递工具链名到--toolchain=xxx即可。...$ xmake f -p cross --toolchain=gnu-rm --sdk=/xxx/cc-arm-none-eabi-9-2019-q4-major $ xmake 就可以快速切换的指定的交叉编译工具链...xmake默认会从xmake f --sdk=xx的sdk参数中去探测工具,当然我们也可以在xmake.lua中对每个自定义工具链调用set_sdk("/xxx/llvm")来写死工具链sdk地址。...因此,从v2.3.4开始,xmake提供默认构建策略的修改设置,开放给用户一定程度上的可配置性。

    1.4K20

    构建一个适合stm32mp157系列开发板的嵌入式Linux系统

    6.3 配置交叉编译工具链 注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,...yocto的交叉编译工具链。...6.3.1 设置 yocto 交叉编译工具链(不推荐) 交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其他平台上运行。...在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修改本节所讲述的命令。 设置这3个环境变量有多种方法,任意选择其中一种方法即可。...在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修改本节所讲述的命令。

    5K50

    配置交叉编译工具链-嵌入式Linux

    注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构建生成的...8.4以及yocto生成的9.3工具链,开发板系统默认安装的系统使用的是通过yocto编译构建,所以如果只想针对于文件系统应用做开发或者编译内核uboot等操作,建议只使用yocto的交叉编译工具链。...1.设置 yocto 交叉编译工具链(不推荐) 交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其他平台上运行。...在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修改本节所讲述的命令。 设置这3个环境变量有多种方法,任意选择其中一种方法即可。...在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修改本节所讲述的命令。

    3.2K10

    完全可复制、经过验证的 Go 工具链

    因为工具链本身是这些构建输入之一,而且 Go 是用 Go 编写的,所以引导过程[2]只有在单台机器上的工具链构建是可重复的情况下才能收敛。...在实践中,要在工具链的每次使用 sort 的地方强制执行这种不变性太困难,因此我们安排将 Go 1.X 中的 sort 包复制到呈现给引导编译器的源代码树中。...现在,当程序第一次使用 net 包时,Go 工具链会使用本地系统的 C 工具链进行编译并缓存结果。除了从工具链构建中删除相关输入和减小工具链下载的大小外,不提供预编译包还使工具链下载更加便携。...由于完整路径将引用不同机器上的目录,这个重写不会有损失。另外,在非发布构建中,保留完整路径,以便在开发人员自身导致编译器崩溃时,IDE和其他工具可以轻松找到正确的源文件。...验证Ubuntu的Go工具链 Go工具链的易重现构建应该意味着在go.dev上发布的工具链中的二进制文件与其他打包系统中包含的二进制文件相匹配,即使这些打包程序是从源代码构建的。

    37510

    xmake v2.3.9 发布, 新增独立 Xrepo CC++ 包管理器

    同时,xrepo 也支持从 vcpkg/homebrew/conan 等第三方包管理器中安装包,并提供统一一致的库链接信息,方便与第三方项目的集成对接。...新版本中,我们改进了 xmake 内部的依赖包安装机制,增加了对交叉编译工具链的 C/C++ 依赖包安装支持,例如: add_requires("zlib", "openssl") target("...自定义交叉工具链改进 新版本中,我们继续对自定义工具链做了改进,使得自动检测更加的智能化,通常只需要指定 sdkdir,xmake就可以自动检测其他的配置,比如 cross 等信息,例如: toolchain...,仅仅设置了对应的sdk路径,然后通过 set_kind("standalone") 将其标记为完整独立的工具链。...目录查找 #1008: 改进交叉编译工具链 #1030: 改进 xcode.framework and xcode.application 规则 #1051: 为 msvc 编译器添加 edit 和

    1.1K30

    Tina Linux(1)---系统篇

    / ├── build # 构建系统文件 ├── config # 配置菜单的界面以及一些固定的配置项,该配置菜单基于内核的 mconf 规格编写 ├── Config.in # 菜单项配置文件。...├── prebuilt # 存放预编译交叉编译器 ├── rules.mk # 定义了 Makefile 中使用的一些通用变量和函数 ├── scripts # 存放host端(PC端,下同)或target...端(小机端,即目标机器,下同)使用的一些脚本 ├── target # 存放目标板相关的配置以及sdk和toolchain生成的规格 ├── tmp # 临时文件夹。...编译过程中的临时文件保存。...├── toolchain # 交叉工具链构建配置、规则 └── tools # 存放 host 端工具的编译规则 一、SDK准备--下载 $ git clone https://github.com

    74710

    github workflow构建哪吒探针FreeBSD安装包

    之前写了关于如何在serv00/ct8机器上一键安装哪吒探针的内容,这里主要分享下如何构建这种运行在serv00/ct8这种FreeBSD操作系统上的哪吒探针面板二进制安装包。...cgo to work的错误: 三、交叉编译的困局 在开启CGO的前提下,最初nezha-build工程尝试在github workflow中使用 Ubuntu 环境,然后使用交叉编译工具链(如 Clang...尽管我尝试使用 musl-gcc 作为交叉编译器,但是 Go runtime 自身的 C 代码仍然会尝试使用 Ubuntu 系统中的头文件,导致编译器无法找到 sys/signalvar.h。...3.3 困局 通过多次构建,我发现即使使用了clang 、musl-tools 和其它交叉编译工具链,仍然无法在 Ubuntu 环境下成功构建 FreeBSD amd64 二进制文件。...我在 Ubuntu 环境中尝试构建 FreeBSD 程序,虽然使用了交叉编译工具,但是 Go runtime 仍然会受到 Ubuntu 系统库的影响。

    8810

    Buildroot系统构建学习笔记(以百问网imx6ull开发板为例)

    2、搭建嵌入式开发环境 2.1、配置imx6ull交叉编译工具链 将解压出来的sdk里的交叉编译工具链的路径移动到opt目录下,便于管理: ?...vim ~/.bashrc该文件中添加环境变量: export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- export PATH=$PATH:...Buildroot运行于Linux平台,可以使用交叉编译工具为多个目标板构建嵌入式Linux平台。...Buildroot可以自动构建所需的交叉编译工具链,创建根文件系统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立组合。...例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。 3.2、怎么深入学习Buildroot?

    1.8K20

    自定义工具链

    ,使用许多不同版本的构建工具,比如链接器和编译器。...约束是构建或生产环境可能不同的维度,比如 CPU 架构、GPU 的存在或缺失,或者系统安装的编译器的版本。如第一章所述,平台是这些约束的指定选择集合,表示在某些环境中可用的特定资源。...3.2 工具链 在“前言”一章节中,可以知道平台可以实现混合语言项目的构建,而如果对每一种语言实现构建,则需要配置工具链以及实现工具链的平台约束设定。...工具链实现是一个目标,它通过列出作为工具链一部分的文件(例如,编译器和标准库)以及使用该工具链所需的代码来表示实际的工具链。...4 小结 从 Bazel 的平台应用我们可以看到它的强大在于大型、混合语言、多平台的应用,能够统一平台构建,这也是 Bazel 的核心特点。

    4.8K31

    Xmake v2.7.2 发布,更加智能化构建第三方库

    其实,也就是让 Xmake 检测到对应的构建系统后,调用 cmake 等命令来实现,但是会帮助用户简化配置操作,另外还能对接 xmake 的交叉编译工具链配置。...它大概得处理流程是这样子的: 在第三方源码库目录执行 xmake 命令 Xmake 获取目录名,尝试解析项目名和版本 尝试从 xmake-repo 仓库匹配现有的包 如果匹配成功,直接采用包中构建逻辑来构建...对接交叉编译工具链 这种智能构建模式,我们不仅能够编译本机程序,还可以对接交叉编译工具链,实现对 ios/android 以及任意交叉编译平台的支持。...因此,在新版本中,我们新增了 clang-cl 工具链,仅仅只需要 xmake f --toolchain=clang-cl 就可以快速切换到 clang-cl 工具链,而无需任何 PATH 设置。...target 和 rule #2374: 允许 xmake 包中引入自定义规则 添加 clang-cl 工具链 改进 #2745: 改进 os.cp 支持符号链接复制 #2773: 改进 vcpkg

    91920

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

    与其他工具链相比,zig-cc 提供的 C/C++ 工具链的主要优势是:glibc 版本可配制与 macOS 交叉编译。 Uber 没有任何使用 zig-the-language 的计划。...从 Go Monorepo 创建伊始,C++ 工具链就不是封闭式的:Bazel 会使用它在系统上发现的任何东西。...Go 的新版本的官方二进制文件在构建时使用的 GCC 版本,比我们的一些构建机器上的新。在这些机器上,我们不得不通过从源代码编译 Go 来解决这个问题。...由于我们大部分的底层基础设施都在 Go Monorepo 中,我首先需要一个交叉编译器。 我终于有了一个实现交叉编译器的商业理由。现在,时间和金钱都可以投入了。...一个存在缺陷,但可以工作的封闭式 macOS(交叉)编译器。使用这两种方法中的任何一种处理 glibc 都没问题,然而,grailbio似乎不大可能编译到 macOS 上,更不用说交叉编译了。

    1.5K20

    你再也不用设置 GOROOT 了

    在 Go 1.0 的发布后,引入了 cmd/dist 引导构建工具,GOOS 和 GOARCH 真正意义上是可选项了,仅仅在交叉编译时才会用到。...如下命令查看: $ echo $GOROOT $ go env /home/dfc/go 复制代码 从 golang.org 下载的二进制包或者系统方式安装的 Go 环境,也已在工具链中设置了正确的...设置 GOROOT 将会覆盖掉保存在 go 工具链中的默认值,可能会导致 go 执行不同版本的编译器和标准库文件。 两种情况下,你需要设置 GOROOT。在官方的 安装介绍 有相关的描述。...构建完成后,将 Go 工具链安装到 /usr/bin 目录下,编译器、源码和包安装到 /usr/lib/go 下。...之前,我们是通过 make.sh 编译构建 GOROOT,但如果将整个目录移动到新的路径下,这会使 Go 工具链无法正常工作。 如何解决这个问题呢?

    1.2K50

    S3C2440② | arm-linux-gcc交叉编译工具链

    1.为什么需要交叉编译工具 宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标处理器(S3C2440@ARM920T)上跑,这就叫交叉编译,编译器叫做交叉编译器。...S3C2440@ARM920T芯片上跑的程序,所以不能使用这个编译器,需要使用arm-linux-gcc交叉编译器。...\n"); return 0; } 然后使用交叉工具链编译: ?...编译完成后,接下来可将生成的可执行文件从服务器上下载,烧写到目标板上运行,查看一下生成的可执行文件类型: ? 可以看到这是32位ARM机器上可执行程序。...4.嵌入式开发中目标文件的链接 在使用交叉编译工具链时,最重要的过程是链接过程: 简单的程序链接可以使用一些参数指定; 复杂的程序链接需要使用链接文件.ld指定。

    4K40
    领券