(交叉-)为 Raspberry PI 编译 Swift



Swift 现在是开源的。有没有人尝试过为 Raspberry PI 编译 Swift?我开始这样做,但我的8 GB SD卡似乎太小了,无法;)是否可以从 Ubuntu 交叉编译它?

8GB SD卡工作正常,但您需要扩展根卷。我让它工作,分区上的已用空间约为 3.1GB /dev/root

以下步骤基于Andrew Madsen的博客文章,并额外关注fdisk中的步骤。

获取 Ubuntu

从 finnie.org 下载适用于树莓派 2 的 Ubuntu 14.04 映像,并将其复制到 SD 卡上。启动树莓派。

更改分区

登录树莓派并更改分区大小。/dev/root的默认大小为 1.7G,可用 1.1G。这还不够。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.7G  540M  1.1G  35% /
devtmpfs        458M  4.0K  458M   1% /dev
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none             93M  228K   93M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            462M     0  462M   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/mmcblk0p1   64M   20M   45M  31% /boot/firmware

运行磁盘

sudo fdisk /dev/mmcblk0

在提示符下输入"打印分区表"的p。有两个分区

/dev/mmcblk0p1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          133120     3670015     1768448   83  Linux

出现提示时,输入 d(用于删除(,然后输入 2 。然后,通过输入 n 来重新创建分区,然后输入 p ,然后2 ,然后在接下来的两个接受默认值的提示符下按 Enter 键。

再次输入p,看到第二个分区现在更大,现在8GB卡上的所有空间都被使用。

           Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          133120    15523839     7695360   83  Linux

输入w将更改写入磁盘,然后重新启动

sudo reboot

调整分区大小

重新启动后,通过运行以下命令调整分区文件系统的大小

sudo resize2fs /dev/mmcblk0p2

交换空间

通过执行设置交换文件

sudo apt-get install dphys-swapfile

安装 libicu-dev 和 clang-3.6

sudo apt-get install libicu-dev clang-3.6

使用 update-alternative 为 clang 和 clang++ 提供/usr/bin 链接:

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

然后,添加@iachievedit的存储库密钥:

wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -

将相应的存储库添加到 sources.list:

echo "deb [arch=armhf] http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list

运行 apt-get 更新:

sudo apt-get update

安装 Swift

sudo apt-get install swift-2.2

安装完成后,您就可以编译 Swift 程序了!

写斯威夫特

打开您喜欢的文本编辑器,编写程序并保存(例如,"hello.swift"(:

let device = "Raspberry Pi 2!" 
print("Hello from Swift on (device)")

编译它

swiftc hello.swift

并运行它:

./hello
Hello from Swift on Raspberry Pi 2!

就是这样!Swift 在 Raspberry Pi 上运行

Swift Package Manager 通过以下方式获得自定义工具链支持PR-10982017年4月底。

我在这里写了关于如何构建RaspberryPi工具链的详细说明:macOS -> RasPi交叉编译工具链甚至反过来(在RaspberryPi上构建macOS二进制文件(来娱乐它。这同样适用于Intel-Linux到ARM-Linux,只需进行最少的修改。SwiftPM 存储库包含一个示例脚本,介绍如何从 Intel-macOS 到 Intel-Ubuntu 执行此操作。

你可以在这里找到关于 Swift-on-ARM 的 2017-05-01 更新:适用于树莓派零/1/2/3 的 Swift 3.1.1 更新。

作为一个小总结,所以这个答案不仅仅是链接;-(,ARM状态2017-05-16:

  • 你可以在 RaspberryPi Ubuntu 上编译 Swift 3.1/3.1.1
    • 不要忘记设置交换,需要一些最小的补丁对于 3.1.1.8GB磁盘可能有点少。
  • 在Raspbian上的编译似乎还没有工作(最后已知的版本是 3.0.2(
  • 您可以使用自定义工具链交叉编译 Swift,即设置相当容易
    • 为此,您需要获取 SwiftPM 快照(Swift 4((但工具链本身可以是 3.1 甚至 3.0.2,带有微小的更改(
  • 你也可以通过 Docker 运行(和编译(Swift,例如在HypriotOS中。
  • Swift ARM 有一个 Slack 组:swift-arm

最新更新