Rust使交叉编译成为儿童游戏

2020-12-07 02:23:49

最近,我解决了这个增量问题,维护人员要求将Travis CI切换到GitHub action。

如果您想看看这次旅程,这些就是我完成的所有提取请求:#399,#400,#409,#411,#413,#417和最后#418。

是的。如您所见,我喜欢少量的增量工作和早期反馈,而不是庞大的请求。 😁

无论如何,delta项目有很多编译目标,并且每次标记该项目时,二进制文件都会自动在GitHub发布页面中发布。甜。 😌

从x86_64架构(TLDR:通用的64位Intel或AMD处理器)开始,如果您针对相同的架构,就可以直接针对不同的操作系统进行编译,例如,如果要针对macOS进行编译,则只需运行:

当您要编译为其他架构(例如i686(32位)或ARM处理器)时,问题开始出现,在这种情况下,您必须安装一些依赖项并设置一些环境变量,这可能很痛苦。在旧的delta持续集成脚本中,这就是依赖项的安装方式。丑,我知道。作为锈开发人员,我们习惯了出色的工具,因此必须有更好的方法吧?

TLDR允许您编译和测试除i686和x86_64之外的体系结构的rust项目。

而不是进行货物建造--target< YOUR_TARGET>您只需进行交叉构建--target< YOUR_TARGET&gt ;.事实上,基于目标,cross将运行一个docker映像,该映像具有由锈嵌入式团队本身已经安装和配置的所有正确依赖项。 😉就是这样..只需交叉运行商品安装即可,您就可以为ros中的所有这些目标进行交叉编译了,不需要其他依赖项,当然除了docker!

显然,这不是关于cross的详尽概述,如果您有兴趣,我鼓励您看一下GitHub页面。

当然,在一整天的生气后,试图为delta问题设置怪异的ubuntu依赖项时,当我发现十字架时,由于事先不知道它而感到非常愚蠢,因此我尝试将其集成到Continuous Deployment delta管道中。

事实证明,这就像世界上最简单的事情!我已经在使用的action-rs / cargo action具有对cross的内置支持。现在我什至觉得更愚蠢,但是无论如何..您只需要将use-cross变量设置为true就可以了!

这是为所有不同目标构建整个增量项目的步骤。容易,对吧? 😀

Rust GitHub模板是用于货物生成的模板,旨在成为适合将在GitHub上托管的绝大多数rust项目的起点。

除了其所有优点之外,此模板还将为您设置“持续部署”,因此,每当您标记项目时,它将在crates.io上发布,并且二进制文件将在GitHub Releases页面上发布,就像在delta中一样。 😁

直到今天,Rust GitHub模板仅支持x86_64 Windows,Linux和Mac,但是在发现Cross后,我忍不住了,我添加了对i686和aarch64 linux体系结构的支持,它们都是两个1级rust目标。 您的“旧版ThinkPad”和“ Raspberry Pi”用户将非常感谢您。 😛 就是这样,在我花了很多非常有用的时间来尝试建立编译依赖关系之后,我只是想与世界其他地方分享对crosstool的热爱,以便尽可能地避免这种痛苦。 😅 感谢您阅读本文! 您可以在Twitter或YouTube上找到我,再见! 👋