Linux でSwift してみる

Appleのプログラミング言語Swiftが公約通りオープンソース化。

swift.org

祝!!Swiftオープンソース化ってことで。Ubuntu 15.10で試してみました。

Linux向けバイナリのリンクが切れてて残念ですが、コンパイル。素直に公式バイナリ使う方が良さげ。

swift.org

ビルドしてみる

基本的にgithubのREADMEに従えばいい模様。

github.com

$ sudo apt-get install 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

githubからcloneする。全部は必要ないっぽいけど一応。

$ git clone https://github.com/apple/swift.git swift
$ git clone https://github.com/apple/swift-llvm.git llvm
$ git clone https://github.com/apple/swift-clang.git clang
$ git clone https://github.com/apple/swift-lldb.git lldb
$ git clone https://github.com/apple/swift-cmark.git cmark
$ git clone https://github.com/apple/swift-llbuild.git llbuild
$ git clone https://github.com/apple/swift-package-manager.git swiftpm
$ git clone https://github.com/apple/swift-corelibs-xctest.git
$ git clone https://github.com/apple/swift-corelibs-foundation.git

ビルドしてみる。

$ ./swift/utils/build-script -R -t

-tはテストの実施。

たぶん成功。

<省略>
Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/%target-sdk-name/x86_64
Testing Time: 138.09s
  Expected Passes    : 1667
  Expected Failures  : 92
  Unsupported Tests  : 573
-- check-swift-linux-x86_64 finished --
--- Finished tests for swift ---
$ echo $?
0

buildディレクトリ配下に下記のサブディレクトリが生成される。

$ ls ./build/Ninja-ReleaseAssert/
cmark-linux-x86_64  llvm-linux-x86_64  swift-linux-x86_64

お目当のswiftはというと…。

 ./build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift
LLVM ERROR: Compiler-internal integrated REPL unimplemented for this platform

REPLはLinuxではダメなのか?気を取り直して、

$ ./build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift --version
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 51a9cea5cd)
Target: x86_64-unknown-linux-gnu

対話モードは有効になってない?適当なソースを作って試す。

import Glibc

print("Hellor, World")

ひとまずOK。

$ ./build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift sample.swift
Hellor, World

対話モードを有効化する方法は要調査。

追記

オプション変えてビルドすると

[415/490] Linking CXX executable bin/swift-ide-test
FAILED: : && /usr/bin/clang++
<skip>
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)

で失敗する。./swift/utils/build-script./swift/utils/build-script -R --debug-swiftでもダメ。 空きディスク容量は十分なはずなので、メモリ容量2GBのVPSでは厳しいのかも。

追記その2(2015/12/16)

メモリ不足の対処法がSwiftのメーリングリストに出ていたのでメモ。実際にはまだ試せてない。

ソースコードを最新版に更新すると、-jオプションが使えるようになる。

$ cd swift
$ git pull

他のディレクトにも同じ要領で最新に更新。もしくは以下のようにupdate-checkoutというスクリプトもある。swift本体以外の古いモジュールのディレクトリを削除した上で、下記を実行すると各々のリポジトリからgit cloneしてくれる模様。

$ swift/utils/update-checkout --clone

以下のようにすると時間はかかるがデバッグオプション付きでビルドできるらしい。

$ ./swift/utils/build-script -j 1 -t


追記ここまで

公式バイナリ

リンク切れになってた公式バイナリが落とせるようになってるのでそちらを試す方向で。

Swift.org - Download Swift

おとなしく公式ドキュメントに従う。

$ wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import -
$ wget https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
$ wget https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz.sig
$ gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift
$ gpg --verify swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz.sig
gpg: 署名されたデータが「swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz」に あると想定します
gpg: 2015年12月03日 06時22分49秒 JSTにRSA鍵ID 412B37ADで施された署名
gpg: “Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>”からの正し署名
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: 7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD

警告は出てるが、アーカイブ自体に問題はないっぽい。

アーカイブを展開する。

$ tar zxf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz 

こんな感じ。

$ ls swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/
bin  include  lib  local  share
$ ls swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/
lldb            lldb-mi-3.8.0      swift                   swift-demangle
lldb-3.8.0      lldb-server        swift-autolink-extract  swiftc
lldb-argdumper  lldb-server-3.8.0  swift-build
lldb-mi         repl_swift         swift-build-tool

swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr配下のファイルを適当なとこに移動するか、パスを通す。

今度は対話モードもちゃんと動く。

$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
  1> print("Hello, World!")
Hello, World!
  2>

バイナリ版アーカイブの方が良さそう。

参考:Swift.org - Download Swift

とりあえずここまで。