在 ARMv7 的设备上编译 Swift 3.0

作者:Joe,原文链接,原文日期:2016/09/24
译者:X140Yu;校对:walkingway;定稿:CMB

编者注: 此文是我们上一篇在 BeagleBone Black 或 Raspberry Pi 3 上编译 Swift 3.0 的续篇,这篇文章使用了由 Swift ARM 组织搭建的仓库。

为了在一个 ARMv7 的系统上原生编译 Swift 3.0,你需要做以下准备工作:

  • 一个性能强劲的 ARMv7 设备;我们使用 BeagleBoard X15 编译了大概 4 个小时,在 Raspberry Pi 3 上编译了大概六个小时。
  • 使用 USB3 flash drive 或者 UHS-I/class 10 microSD 之类的高速 IO 存储设备,有 16GB 或以上存储空间(我比较喜欢 Patriot EP Series 这种价格合适,读写速度也不错的产品)
  • 支持编译 Swift 的 Ubuntu 发行版,例如 Ubuntu Xenial 16.04
  • 耐心

安装编译的依赖

编译 Swift 需要很多依赖。你可以使用下面的一条命令把它们都安装上:

sudo apt-get install -y git cmake ninja-build clang uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config autoconf libtool systemtap-sdt-dev libcurl4-openssl-dev

增大 swap 的空间

在 ARMv7 的设备上编译 Swift 至少需要 2G 的内存。如果你使用 Pi3 的话,可能就需要增大一些 swap 的空间,把内存从 1G 翻倍到 2G。

bash
# cd /var/cache
# sudo mkdir swap
# cd swap
# sudo fallocate -l 1G 1G.swap
# sudo mkswap 1G.swap
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=184d002a-2f15-4b23-8360-8e792badc6a2
# sudo chmod 600 1G.swap
# sudo swapon 1G.swap

使用 build-swift

build-swift 是我们的一个 Github 仓库,里面有几个 helper 脚本,使其在 ARM 下编译 Swift 更加轻松。

bash
# git clone https://github.com/swift-arm/build-swift
# cd build-swift

默认 build-swift 会切换到 swift-3.0 分支。

scripts 文件夹中的脚本都比较简单:

  • get.sh – 下载所有在编译 Swift 时需要的仓库;这些仓库都来自 Swift ARM 组织,而且特别为 ARMv7 打了补丁。
  • update.sh – 把本地的仓库都更新到与 Github 相同的最新版本。
  • package.sh – 运行 Swift 的 build-script
  • clean.sh – 删除 build 中产生的临时文件。
  • distclean.sh – 同时删除 build 中产生的临时文件还有已经被替换过的旧仓库。

开始动手吧!

在开始之前,确保你已经:

  • 安装了所有的依赖包。
  • 至少 2G 的可用 RAM。
  • 从 Github 上 clone 了 build-swift

现在,clone 所有需要依赖的仓库:

bash
# cd build-swift
# ./scripts/get.sh

在高速的 SD 卡上,这一步需要大概 15 分钟。

现在可以编译了。Swift 的 ARM team 使用 Jenkins 来跑这个编译任务,在没有 CI 的情况下,你可以使用 nohup 命令来确保你的编译任务是持续工作的,即使 terminal 把你给踢掉线也没问题:

bash
# nohup ./scripts/package.sh > swiftbuild.log &

想要看编译的输出可以使用 tail -F swiftbuild.log 命令。

现在耐心等待就可以了。在 Raspberry Pi 3 上,一次完整干净的 Swift 编译可能会花上 6 个小时。但是结果却是值得的,这是一个 swift.tar.gz 的包,可以把它安装在运行 Ubuntu Xenial 的 Raspberry Pi 2 或 Pi 3 上(不要把它安装在 Raspbian 机器上,你会失望的)。我会把 Swift 像下面一样安装在 /opt/swift/ 中:

 bash
# cd /opt
# mkdir -p swift/swift-3.0
# cd swift/swift-3.0
# tar -xzvf /path/to/swift.tar.gz

你可以添加 export PATH=/opt/swift/swift-3.0/usr/bin:$PATH 来设置 PATH。 为了使用 swiftcswift build 你还需要运行下面几条命令:

bash
sudo apt-get install -y libicu-dev
sudo apt-get install -y clang-3.6
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100

获取帮助

如果你在编译中遇到了问题,就加入 swift-arm Slack channel 吧!

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容