Swift コンパイラーをビルドする環境を Fork したリポジトリーから作成する
Swift プログラミング
Swift コンパイラーのビルド環境を自分で Fork したリポジトリーからビルド環境を整える場合はどうしたら良いのか調べてみました。
以前に こちら で、Apple 公式のリポジトリーから Swift コンパイラーのビルド環境を整える方法を綴ってみましたけれど、今回は 自分で Fork したリポジトリーからビルド環境を整える場合はどうしたら良いのか について調べてみることにしました。
必要なリポジトリーを Fork する
自分で Fork したリポジトリーを使って Swift コンパイラーのビルド環境を作るために、まずは必要なリポジトリーを Apple から Fork します。Swift コンパイラーは複数のリポジトリーで構成されていて、必要なリポジトリーだけ Fork すれば大丈夫そう な様子でしたけど、今回は試しに次のすべてのリポジトリーを Fork しておくことにしました。
- apple/swift-llvm
- apple/swift-clang
- apple/swift
- apple/swift-lldb
- apple/swift-cmark
- apple/swift-llbuild
- apple/swift-package-manager
- apple/swift-compiler-rt
- apple/swift-corelibs-xctest
- apple/swift-corelibs-foundation
- apple/swift-corelibs-libdispatch
- apple/swift-integration-tests
- apple/swift-xcode-playground-support
これらの Fork したリポジトリーをすべて利用した Swift コンパイラーのビルド環境を整えてみることにします。
Swift コンパイラーのビルド環境を構築する
基本的な流れは こちら
で記したのと同じです。その記事の中の ソースコードセットを取得する
のところが僅かに変わる感じです。
Fork した Swift リポジトリーをクローンする
この手順が必要なのは apple/swift
リポジトリーを 公式のものの代わりに自分で Fork したものを使いたい場合 に限られますけど、まずは swift_source
ディレクトリーに、自分で Fork したリポジトリーをクローンするところから始めます。
git clone git@github.com:es-kumagai/swift.git
今回は ssh のアドレスを使ってクローンしましたけど、HTTP が良ければ https のアドレスを使ってクローンします。クローンするリポジトリーが Apple 公式から自分のリポジトリーに変わるだけで、それ以外はまったく同じです。
構成リポジトリーを Fork したリポジトリーから取得する
続いて、Swift コンパイラーのビルドで使うリポジトリーを、自分で Fork したリポジトリーから取得できるようにします。そのために、まずは swift/utils/update-checkout-config.json
を swift_source/
ディレクトリー直下にコピーしておきます。
cp swift/utils/update-checkout-config.json .
そうしたら、この ファイル内
に記載されている repos
の中から、Fork したリポジトリーに差し替えたいところの apple/
のところを Fork 先のユーザー名に書き換えます。
"repos" : {
"llvm": {
"remote": { "id": "apple/swift-llvm" } },
"clang": {
"remote": { "id": "apple/swift-clang" } },
"swift": {
"remote": { "id": "apple/swift" } },
"lldb": {
"remote": { "id": "apple/swift-lldb" } },
"cmark": {
"remote": { "id": "apple/swift-cmark" } },
"llbuild": {
"remote": { "id": "apple/swift-llbuild" } },
"swiftpm": {
"remote": { "id": "apple/swift-package-manager" } },
"compiler-rt": {
"remote": { "id": "apple/swift-compiler-rt" } },
"swift-corelibs-xctest": {
"remote": { "id": "apple/swift-corelibs-xctest" } },
"swift-corelibs-foundation": {
"remote": { "id": "apple/swift-corelibs-foundation" } },
"swift-corelibs-libdispatch": {
"remote": { "id": "apple/swift-corelibs-libdispatch" } },
"swift-integration-tests": {
"remote": { "id": "apple/swift-integration-tests" } },
"swift-xcode-playground-support": {
"remote": { "id": "apple/swift-xcode-playground-support" } },
"ninja": {
"remote": { "id": "ninja-build/ninja" } }
},
今回はすべての Apple 公式リポジトリーを自分自身で Fork したリポジトリー(es-kumagai/)に差し替えてみようと思うので、次のコマンドを使って一括で編集してみることにしました。全部を変える必要がなければ、テキストエディター等で必要な部分だけを書き換えれば大丈夫です。
sed -i -e 's/\bapple\//es-kumagai\//g' update-checkout-config.json
このようにしたら、あとはこの update-checkout-config.json
を指定して update-checkout
コマンドを実行します。
./swift/utils/update-checkout --config ./update-checkout-config.json --clone-with-ssh
直接 update-checkout-config.json
を書き換えても良いのですけど、今回はなるべく元のリポジトリーに影響しないように swift_source
ディレクトリーにコピーしてから編集することにしました。
環境準備、完了
これで Fork したディレクトリーを使った Swift コンパイラーのビルド環境を作ることができた様子です。
これ以降は update-checkout
コマンドを --config
を指定しないで使っても origin
に対して git 命令が発行される様子なので、普段どおりに操作することができそうです。
ところで、このようにして Fork したリポジトリーで環境を構築してみましたけれど、公式とは完全に独立したリポジトリーで Swift を作っていくような場合とかでなければ、このようにしても 意味がないような 気もします。
普段それほど git に親しんでないので詳しいことはわからないのですけど、複数のリポジトリーで構成されている都合、公式の更新を取り込むのも煩雑になりそうですし、 おそらく普通は Apple 公式のものを http のアドレスでクローンして、fork したリポジトリーをリモートリポジトリーとして ssh のアドレスで追加して運用するのが良いのかなって思ったりしました。