我今天阅读了rustup的源码和文档,我发现如果厂家有专有的LLVM,其实是可以借助rustup分发的,不需要在rust的生态里添加额外的工具。
我想解决什么问题:如果处理器核的厂家给出了自己的指令集或者子集,它设计成了LLVM后端,但是,厂家不希望把自己的专有代码泄露出去,又想借助已有的生态来分发rustc工具链,它应该怎么做?
我得到的解决方案是,厂家以rustup工具链的形式增加自己的专有工具链。比如叫做:
stable-myvendor-x86_64-pc-windows-msvc
厂家编译工具链之后,提供给商业或者专有的客户下载。客户下载到本地,比如下载到D:/Program Files/MyVendorRustc目录下,然后使用以下的命令:
$ rustup toolchain link stable-myvendor-x86_64-pc-windows-msvc "D:/Program Files/MyVendorRustc"
这样就把工具链注册到rustup了。
而后,客户就可以使用rustup target选择工具链中支持的专有平台或者专有指令集了。比如使用以下的指令:
$ rustup target add myvendor_arch-unknown-linux-gnu
这样就能安装一个名为myvendor_arch-unknown-linux-gnu
的编译目标。
通过以上描述的方法,厂家可以为商业客户发放专有的rustc版本。这种方法的优点是不泄露拥有版权的代码,缺点是不能通过网络去下载和更新工具链。
要优化它的缺点,仍然需要一种方法用rustup update来在线更新工具链,不需要厂家再次手动发发放。这个我个人还没仔细看rustup的源码,我觉得可能需要一种多个dist server或者类似于镜像的模式,来解决这个方法的缺点。不过无论方法如何,厂家是需要提供不同编译平台下所有分发版的编译器,不过这一点的工作量和其它语言的工具链是相同的。
评论区
写评论LGTM