SSブログ

Swiftをコンパイルしてみる。 [プログラミング]

https://swift.org/download/#using-downloads

Ubuntuは解凍してそこにパスを張って使うように薦めているけれど、なんかきちんとインストールディレクトリに入っていないと気持ち悪い。というか、こういう任意の場所で解凍しただけで動くものなんだ。Linuxの深いところを分かっていないので、ディレクトリの位置とか深く考えたことがない。

なんとなく一からコンパイルしたくなった。ただ気持ちの問題。というか、今ならコンテナもあるし、時間もあるしというところで。それにしてもググると他のSwiftが出てくるな。具合の悪いことに開発関係にもあったりするので、apt searchしても他のものが引っかかってくる。一瞬勘違いしそうになったじゃないかw。

https://github.com/apple/swift

ここにガッツリUbuntu用のインストール方法が出ている。最近はOSSだとみんなギフハブだな(ってもうAskaネタはいいってw)。シャブ患者はさておき、インストールしてみた。何気にUbuntu16.04はビルド通ってねぇって書いてあったりする。大丈夫なのかw?

かなり時間がかかりそうなので、途中でコンパイルを止めて、tmuxを入れて続行。LXCコンテナ内だとtmuxを動かすのに17.04用のdebファイルを入れない今のところLTSでは使えないのは前に書いたとおりで、入れ方を自分のブログを見た。まぁインストールはコピペで。にしても長い作業はtmuxとかでやっていないと色々と不安だ。

コンパイル作業を見ているとC++のソースファイルが多いみたい。SwiftはObjective-Cで書かれているわけじゃないのね。その割にはObj-Cとの互換性とかはあるみたいだけど、いちいちインターフェイスを揃えてあげないといけなくなるよなぁ。そこいらの言語の違いはWindowsで面倒だった覚えがある。でもLLVMで作られているからいくらか面倒が少なくなってはいるのかな。

案の定、コンパイルは通っているようなのですがテストが通っていないようで、インストールはされませんでした。そもそも16.10はコンパイルが通るけど、16.04ではコンパイルが通らないとか依存性の問題がバリバリ出とるとしか思えんのだが。まぁそもそもがMacのOSX上で依存性関係無しに作られていたのだろうから、すぐにUbuntuに依存性をクリアして移植と言うのは難しい話なのだろう。そもそも自分たちのXcode環境のバージョンを気にするだけで精一杯とかそのレベルであってもおかしくない。


しょうがないから16.04でビルド済みのtar玉を持ってきて解答してそこにパスを通した。まぁこれが普通なんだろうな。でも、swiftcでコンパイルした時に問題が出た。たった一行のhello worldも出力できなかったのだった。コンパイルは出来ているみたいなのだが、実行時にリンクするライブラリがないみたいで、実行環境は入れているのだが、バージョンがあっていないらしい。このコンパイラを作っている環境では問題ないのかもしれないが、普通にapt update && apt upgradeしている環境では足りないらしい。

またまたしょうがないから16.10でビルドすることにした。というか特に開発とかではLTS以外を使う気にはならないんだよなぁ。色々面倒くさい。

Testing Time: 1133.37s
Expected Passes : 2753
Expected Failures : 81
Unsupported Tests : 787
-- check-swift-linux-x86_64 finished --
--- Finished tests for swift ---

最後に出てきて、swiftコマンドを打つもインストールはされていなかった。失敗?と思いきや、テストしているんだからバイナリ自体はできているんじゃないかと思って
find . -name swiftc
とやってみると、案の定/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin に出てきた。テストが失敗したのか、もともとやらないのかはわからないが、インストールまではしてくれていない。まぁコンパイル・ビルドが./configure&&make&&make installじゃない時点で気づけよという話なのかもしれないが、そこはOSS的なお作法とは違うところから来たものだから仕方ないのかもしれない。

とりあえず、print("Hello, Swift.")という中身を書いたtest.swiftを作って、./swiftc test.swiftをしたら無事コンパイルができて、./testでHello, Swift.が出てきました。そりゃ地元でコンパイルした開発環境だもんなぁ、当たり前か。たぶん16.04でもできていたので、環境を消してしまったけどもう一回16.04のコンテナでコンパイルしたものを、ディレクトリを見つけて動かして見たい。というかLTS以外の短い運命のOSでは開発などはしたくないんだヨォ。


あれ〜作られたバイナリを始めにやって見たんだけど、16.04LTSでもきちんと動くね。コンパイルをする環境を作ってから、始めから用意されたバイナリなtar玉を使おうとしたから、実行環境に問題が起こっていたんだね。どちらにしてもバイナリファイルを入れる.debファイルを作れたら作りたいなと思ったり。それにはバイナリはできているので、make installの記述ができれば大丈夫なのかなと思いつつ、makeファイルなんてしばらく書いてねぇよと独りごちる。

dpkg-buildpackageを使えばできるみたいなので、ちょっとお勉強して.debファイルを作ってみようかなぁ。なんかこのまま解凍してパスを通すってのはあまり綺麗じゃない感じがするんだけれど、そこまでの労力に見合った効果があればいいのだけれど。でも、依存性とか気にしなくて良くなったりするから、きちんとできればいいのかもね。というか、debファイルってディストリビューションのバージョンの依存性とかどうやって解消してんだろう。aptで吸収してそうだな。.debファイルがどのくらいの威力を持っているのかわかってないな。

って16.04でコンパイルするんじゃなかったのかよw。まぁ動く状況ならどんな方法でもいい。

タグ:SWIFT
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0