(交叉)为Raspberry PI编译Swift

时间:2015-12-05 16:31:32

标签: swift raspberry-pi raspberry-pi2

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

2 个答案:

答案 0 :(得分:7)

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

以下步骤基于Andrew Madsen的博文,稍微关注fdisk内的步骤。

获取Ubuntu

finnie.org下载用于Raspberry Pi 2的Ubuntu 14.04的图像并将其复制到SD卡上。启动Raspberry Pi。

更改分区

登录Raspberry Pi并更改分区大小。 /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

运行fdisk

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-alternatives为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 update:

sudo apt-get update

安装Swift

sudo apt-get install swift-2.2

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

写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上运行

答案 1 :(得分:4)

Swift Package Manager通过自定义工具链支持 PR-1098 2017年4月底。

我在这里写了关于如何构建RaspberryPi工具链的详细说明:macOS -> RasPi Cross Compilation Toolchain 甚至反过来(build macOS binaries on a RaspberryPi)以获得它的乐趣。 这同样适用于Intel-Linux到ARM-Linux的最小修改。 SwiftPM repo包含example script关于如何为Intel-macOS执行此操作到Intel-Ubuntu。

你可以在这里找到关于Swift-on-ARM的2017-05-01更新: An Update on Swift 3.1.1 For Raspberry Pi Zero/1/2/3

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

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