-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
An Update on Swift 3.1.1 For Raspberry Pi Zero/1/2/3 #52
Comments
title: "An Update on Swift 3.1.1 For Raspberry Pi Zero/1/2/3" 原文链接=https://www.uraimo.com/2017/05/01/An-update-on-Swift-3-1-1-for-raspberry-pi-zero-1-2-3/ Swift 3.1.1 版本关于树莓派(Raspberry Pi) Zero/1/2/3 的更新5 月 12 号更新:添加了交叉编译部分。 我认为现在是时候再次在 Raspberry Pi 和其他 ARM 板上更新 Swift 了。 如果你正在 Ubuntu Mate 16.04 上使用 Raspberry Pi 2 或 3(我一直推荐的版本),只需要从这里下载 3.1.1 版本或使用 多亏了 Florian Friedrich, 在 ARM 上编译所需的大部分补丁已经集成到 Swift master 和 3.1 分支上。如果你有 ARMv6 的板子,比如原来的 Raspberry Pi、新的 Zero 板或者你刚刚运行的 Raspbian,那么目前无法在比 3.0.2 更新版的 Swift 上编译。 如果上述版本已经可以满足你的需求,你可以从这里找到(的确仍然没有 Raspbian/Debian 上的 SPM,请阅读有关交叉编译的部分)。 自从 3.1 版本发布以来,基于 swift-arm 所建立的社区就一直致力于让 Swift 在 Raspbian(或其他 Debian 系统)上编译,并且取得了一些进展。 已经有一些补丁(某些 Ubuntus 版本也是需要的),并且已经提出了几个 issue 来跟踪当前的阻塞问题:SR-4613,SR-4147。 像往常一样,3.1.1 版本已经使用 SwiftyGPIO 进行测试,一切似乎都可以正常运行。 在 Docker 上构建和交叉编译还有一项最近的进展是 Helge Heß 的名为 dockSwiftOnARM 新项目,这个项目可以允许在 Linux 或 MacOS 上的 ARM docker 容器中运行甚至构建 Swift,相当方便而且有文档的支持。 几周前,Swift Package Manager 终于获得了交叉编译的支持。 感谢 Johannes Weiß 的伟大工作,他完成了交叉编译和 toolchains generation。 这意味着现在你终于可以在 Mac(或 Ubuntu)上交叉编译 ARM 二进制文件,并且按照 Helge Heß 的详细说明,构建自己的具有 SPM 功能的交叉编译工具链(Cross-compiling Toolchain),该工具链可以在 macOS 上为 Ubuntu 16.04 生成 Swift 3.1.1 ARM 二进制文件。 在 Raspbian 上用于 Swift 3.0.2 的 Cross-compiling Toolchain将上面提到的说明略作修改,可以生成一个工具链,它用来构建基于 Swift 3.0.2 的可在 Raspbian 上运行的的二进制文件,但更重要的是,它具有可用的 SPM! 在原始指南中所描述的内容中,有一些需要进行更改。 下载 Swift 3.0.2 软件包而不是 3.1.1 软件包: curl -o /tmp/swift-3.0.2-RPi1Zero-RaspbianNov16.tgz https://www.dropbox.com/s/dkrkt9ht1c3hog2/swift-3.0.2-RPi1Zero-RaspbianNov16.tgz
curl -o /tmp/swift-3.0.2-RELEASE-osx.pkg https://swift.org/builds/swift-3.0.2-release/xcode/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-osx.pkg 使用以下参数启动脚本: ./build_rpi_ubuntu_cross_compilation_toolchain \
/tmp/ \
/tmp/swift-3.0.2-RELEASE-osx.pkg \
/tmp/swift-3.0.2-RPi23-RaspbianNov16.tgz 工具链构建成功,但 SPM 却无法工作。这是因为 Swift 3.0.2 版本的 swiftc 不支持在调用编译器时包管理器所追加的新 下面构建一个不使用此选项的包管理器的版本。 克隆 SPM: cd /tmp/
git clone /~https://github.com/apple/swift-package-manager.git 将脚本保存到文件并执行:( diff --git a/Sources/Build/BuildPlan.swift b/Sources/Build/BuildPlan.swift
index 5c48fb57..af50f539 100644
--- a/Sources/Build/BuildPlan.swift
+++ b/Sources/Build/BuildPlan.swift
@@ -260,7 +260,7 @@ public final class SwiftTargetDescription {
/// The arguments needed to compile this target.
public func compileArguments() -> [String] {
var args = [String]()
- args += ["-swift-version", String(swiftVersion)]
+ //args += ["-swift-version", String(swiftVersion)]
args += buildParameters.toolchain.extraSwiftCFlags
args += buildParameters.swiftCompilerFlags
args += optimizationArguments
diff --git a/Sources/PackageLoading/ManifestLoader.swift b/Sources/PackageLoading/ManifestLoader.swift
index 9f8f3cbd..02cde4be 100644
--- a/Sources/PackageLoading/ManifestLoader.swift
+++ b/Sources/PackageLoading/ManifestLoader.swift
@@ -306,7 +306,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
) -> [String] {
var cmd = [String]()
let runtimePath = self.runtimePath(for: manifestVersion)
- cmd += ["-swift-version", String(manifestVersion.rawValue)]
+ //cmd += ["-swift-version", String(manifestVersion.rawValue)]
cmd += ["-I", runtimePath.asString]
#if os(macOS)
cmd += ["-target", "x86_64-apple-macosx10.10"] 编译 SPM: swift build 暂时将正在使用的 cd /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2017-05-09-a.xctoolchain/usr/bin/
sudo mv swift-build swift-build.old
sudo cp /tmp/swift-package-manager/.build/debug/swift-build /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2017-05-09-a.xctoolchain/usr/bin/ 现在可以使用工具链,进入到项目的根目录并使用新的SPM选项进行编译: swift build --destination /tmp/cross-toolchain/rpi-ubuntu-xenial-destination.json 所得到的二进制文件可以在 Raspberry Pi 上处理 Swift 3.0.2(请记住按照指南更新 而且,正如你所注意到的那样,这个程序对 Raspbian 来说有点复杂。 �另外其他方面的消息,我计划启动一个新的开源项目,目的是降低使用 Swift 开发 IoT 项目的门槛,这个项目将提供更好的文档,设备库注册表,以及你项目中所需的所有其他信息(遵循 Android Things 采用的方法并加以改进): 请继续关注这个项目的更新,根据投票情况,目前暂时可能会命名为 Swifty Things 或 Swift IoT。 喜欢这篇文章的话,请在 Twitter 上通知我! |
https://www.uraimo.com/2017/05/01/An-update-on-Swift-3-1-1-for-raspberry-pi-zero-1-2-3/
The text was updated successfully, but these errors were encountered: