過去に取得した Swift オープンソースのコードをアップデートする

Swift プログラミング

以前に、オープンソース化された Swift のソースコードをダウンロードして Xcode で眺められるようにしてみましたけど、久々にアップデートして再ビルドしてみたところエラーになりました。

今回はそんなエラーを解消してみたお話です。

以前に こちら で Swift のソースコードを Xcode で開けるようにする話をしましたけれど、そうしてダウンロードしてあった Swift のコードをアップデートしてみたところ、ビルドが上手く通りませんでした。

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 のワーキングコピーが更新されたら、次のようにして関連するリポジトリを更新します。この操作だけで clanglldb などの Swift に関連するリポジトリが全て更新されます。

utils/update-checkout --clone

もし初期の swift-corelibs-libdispatch をダウンロードしてあったりすると、この操作が失敗したりするかもしれません。どうにもうまくいかない場合は、全部消してやり直してみるのも良いかもしれません。

Xcode プロジェクトを生成する

ここまで出来たら、あとは次のコマンドを実行して Xcode プロジェクトファイルを作成します。この最後につけている -c がクリーンビルドの指定になるようです。

utils/build-script -x -c

このようにしてみたところ、無事にビルドに成功して、これまで通り build フォルダー内に Xcode-DebugAssert フォルダーが作成されました。そしてこの中の swift-macosx-x86_64Swift.xcodeproj が作成されています。

普通にビルドして実行ファイルを作りたい場合は swift/utils/build-script -r -t を実行します。