(交叉)为Raspberry PI编译Swift

Lup*_*rus 19 raspberry-pi swift raspberry-pi2

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

Ola*_*laf 7

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

以下步骤基于Andrew Madsen的博客文章,稍微关注内部步骤fdisk.

获取Ubuntu

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

更改分区

登录Raspberry Pi并更改分区大小.默认大小为/dev/root1.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
Run Code Online (Sandbox Code Playgroud)

运行fdisk

sudo fdisk /dev/mmcblk0
Run Code Online (Sandbox Code Playgroud)

在提示符处输入p'print the partition table'.有两个分区

/dev/mmcblk0p1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          133120     3670015     1768448   83  Linux
Run Code Online (Sandbox Code Playgroud)

出现提示时,输入d(删除),然后输入2.然后,通过输入重新创建分区n,那么p,然后2,再按下在下一两个提示接受默认值输入.

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
Run Code Online (Sandbox Code Playgroud)

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

sudo reboot
Run Code Online (Sandbox Code Playgroud)

调整分区大小

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

sudo resize2fs /dev/mmcblk0p2
Run Code Online (Sandbox Code Playgroud)

交换空间

通过执行设置交换文件

sudo apt-get install dphys-swapfile
Run Code Online (Sandbox Code Playgroud)

安装libicu-dev和clang-3.6

sudo apt-get install libicu-dev clang-3.6
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

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

wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

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

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

运行apt-get update:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

安装Swift

sudo apt-get install swift-2.2
Run Code Online (Sandbox Code Playgroud)

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

写Swift

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

let device = "Raspberry Pi 2!" 
print("Hello from Swift on \(device)")
Run Code Online (Sandbox Code Playgroud)

编译它

swiftc hello.swift
Run Code Online (Sandbox Code Playgroud)

并运行它:

./hello

Hello from Swift on Raspberry Pi 2!
Run Code Online (Sandbox Code Playgroud)

而已!Swift在Raspberry Pi上运行

  • 关于如何真正*交叉*编译它会很好的答案(例如在OS X上构建,在Rasperry Pi上部署). (3认同)

hnh*_*hnh 5

Swift Package Manager 在 2017 年 4 月末通过PR-1098获得了自定义工具链支持 。

我在此处编写了有关如何构建 RaspberryPi 工具链的详细说明:macOS -> RasPi 交叉编译工具链 ,甚至相反(在 RaspberryPi 上构建 macOS 二进制文件)以获得乐趣。这同样适用于 Intel-Linux 到 ARM-Linux,只需少量修改。SwiftPM 存储库包含有关如何从 Intel-macOS 到 Intel-Ubuntu 执行此操作的示例脚本

您可以在此处找到 Swift-on-ARM 的 2017-05-01 更新: 适用于 Raspberry Pi Zero/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