町の時計屋さんがRust toolchainのカスタムビルドに至った理由
何故又こんなことを?
いつの頃からか、Rustのnightly-x86_64-pc-windows-gnu Tool chainがProfiler = falseでビルドされてるらしくてgrcovが動かなくなっちまったのが始まり。別にnightly-x86_64-pc-windows-msvcの方は問題ない反面、なんか出力結果に齟齬があるような気がしたのと、カスタムツールチェインの作成に興味が少しあったので良い機会だから作ってみることにした
前提条件
前提となる環境は以下の通り
- Windows 11
- PowerShell 7.4.5
- Msys2導入済み
- Powershell側にPathが通ってる前提
- mingw-w64-x86_64-toolchain python git cmake当たりが既に放り込んである
- Rustup導入済み
- nightly-x86_64-pc-windows-gnu がインストール済み
制限
何となくChatGptにお伺いを立てながらTry and Errでうまくいった事例なので、もしかしたら環境によっては不奏功になることもあるのでその点ご容赦の程。
また、各種configもとりあえず走り切れたモノなので、齟齬や問題があるのならご指摘ください。
加えて、profiler = false
に変更してビルドされたモノが提供されている理由を僕は知らないのであくまでビルドと導入に成功した以上の意味は無く、nightly-x86_64-pc-windows-gnu
を代替できるかどうかは未確認なのでその点ご注意の程
実際の手順
それじゃ実際にビルドと導入をしていこうと思う
Step1 GitからRustを貰ってくる
初手はGithubからRustのソースコードをcheckoutすることになる。ぼちぼちサイズがでかいのでそれなりの回線速度と、ストレージサイズを用意しておこう
git clone https://github.com/rust-lang/rust.git
cd ./rust
Step2 config.tomlを作る
Cloneされた中にconfig.example.toml
が存在する。これを元にprofilerを有効にしたconfigをこさえた僕の場合は以下の通り
[llvm]
download-ci-llvm = true
[build]
target = ["x86_64-pc-windows-gnu"]
extended = true
verbose = 1
submodules = false
[rust]
channel = "nightly"
codegen-units = 0
debug = true
optimize = true
[target.x86_64-pc-windows-gnu]
profiler = true
こいつを./rust
以下に放り込んどく。
Step3 ビルド
ここまでできたらビルドを実行する。
.\x.ps1 build --stage 2
pythonのスクリプトもあるのだけど、そっちだと不奏功だったのでPowershellを使ってる。また、理由は不明なんだけどーー stage 2
を指定しないとfmtとかが使えなかった。
Step4 Rustupに登録
ビルドが成功したらRustupに作ったTool chainを登録する必要がある
rustup toolchain link my-nightly ./rust/build/x86_64-pc-windows-gnu/stage2
この例だとmy-nightly
という名前で登録している。
Step5 Defaultを変更する
問題なければ
rustup toolchain list
で先に登録した名前が表示されているはずである。なのでrustup default my-nightly
でデフォルトのツールチェインを変更して完了となる。
注意事項
カスタムツールチェインの作成を使うにあたりいくつかの注意事項がある
cargo installする際
cargo installを実行すると、tripleがオカシナことになってるのでエラーになる。なので、tripleを明示しよう。例は以下の通り
cargo install --target x86_64-pc-windows-gnu grcov
最新版にする場合
最新版にする場合は、以下のようにする
cd <path to rust dirctory>
git pull
./x.ps1 build --stage 2
リンクは済んでるのでこれだけで良い。
ただしビルドには時間がそれなりにかかるので時間のあるときにした方が良いと思う
Discussion