過去に取得した Swift オープンソースのコードをアップデートする
Swift プログラミング
以前に、オープンソース化された Swift のソースコードをダウンロードして Xcode で眺められるようにしてみましたけど、久々にアップデートして再ビルドしてみたところエラーになりました。
今回はそんなエラーを解消してみたお話です。
make -f /Data/Development/Third-Party/Swift/build/Xcode-DebugAssert/swift-macosx-x86_64/CMakeScripts/ReRunCMake.make
make[1]: *** No rule to make target `/Data/Development/Third-Party/Swift/swift/cmake/modules/SwiftHandleDTraceSources.cmake', needed by `/Data/Development/Third-Party/Swift/build/Xcode-DebugAssert/swift-macosx-x86_64/CMakeFiles/cmake.check_cache'. Stop.
make: *** [/Data/Development/Third-Party/Swift/build/Xcode-DebugAssert/swift-macosx-x86_64/CMakeFiles/ZERO_CHECK] Error 2
Command /bin/sh failed with exit code 2
** BUILD FAILED **
原因は以前にビルドしてあった中間ファイルか何かが最新のコードと矛盾して、結果的にビルドに失敗していた様子です。クリーンビルドを行ったところ無事にエラーは解消しましたけど、せっかくなのでその手順を軽く記しておくことにします。ソースコードの取得からビルドまでの捜査は、初期の頃よりかなり簡単になりました。
今回は OS X 環境で、既に Swift オープンソースが取得して過去にビルドが成功している環境を想定しています。
ツールをアップデートする
まずは念のため Swift のビルドで使うツールを最新版にアップデートしておきます。
CMake をアップデートする
以前にダウンロードした CMake の Mac OS X 用を Installing | CMake からダウンロードしてインストールしておきます。
Ninja をアップデートする
Ninja ツールも brew
を使ってアップデートしておきます。
brew update
brew install ninja
Swift ソースコードを更新する
そうしたら Swift のソースコードを更新します。既に ~/source/Swift
フォルダー内に Swift 関連のソースコードがダウンロードされているものとします。
今は apple/swift
に含まれる utils/update-checkout
を使ってソースコードのアップデートが簡単にできるようになってますけど、最初の頃は対応してなかったので、今回は念のため apple/swift リポジトリをアップデートしておくことにしました。
cd ~/source/Swift/swift
git pull origin master
そうして apple/swift のワーキングコピーが更新されたら、次のようにして関連するリポジトリを更新します。この操作だけで clang
や lldb
などの Swift に関連するリポジトリが全て更新されます。
utils/update-checkout --clone
もし初期の swift-corelibs-libdispatch
をダウンロードしてあったりすると、この操作が失敗したりするかもしれません。どうにもうまくいかない場合は、全部消してやり直してみるのも良いかもしれません。
Xcode プロジェクトを生成する
ここまで出来たら、あとは次のコマンドを実行して Xcode プロジェクトファイルを作成します。この最後につけている -c
がクリーンビルドの指定になるようです。
utils/build-script -x -c
このようにしてみたところ、無事にビルドに成功して、これまで通り build
フォルダー内に Xcode-DebugAssert
フォルダーが作成されました。そしてこの中の swift-macosx-x86_64
に Swift.xcodeproj
が作成されています。
普通にビルドして実行ファイルを作りたい場合は swift/utils/build-script -r -t
を実行します。