バージョンアップしたRustでUEFIと遊ぼうとしたら1年間詰んだ話

# はじめに
RustでUEFIを叩くアプリをね1年くらい前にいろいろいじってました。
[これ(GitHub:rust-uefi-sample)](https://github.com/segfo/rust-uefi-sample)

昨年の自作OSアドベントカレンダーに書いたやつだね。そうだね。
[Rustでベアメタル(UEFI)するときにprintfデバッグできなくて半年たった話](https://qiita.com/segfo/items/0a66bdaceab2845e4e1c)

Rustのバージョンが1.24に上がったくらいからビルドができなくなった。
控えめに申し上げてFuck
そうだよ、このアドベントカレンダーの記事書いてから、数か月後にはもうビルドできない体になってたんだよ！ビルドできる喜びを知りやがって！！

まぁそれは置いといて原因が分かったので書いていく。

# 原因
1. [こちらのカスタムターゲットファイル](https://github.com/segfo/rust-uefi-sample/commit/1cf9a951217675d9665385b3228909fb302ec7c6#diff-d4c6db329b8d2a41794b9fe1a42cccdd)の仕様が変更されていた
2. [lang_itemsの#[lang = "panic_fmt"]](https://github.com/segfo/rust-uefi-sample/commit/1cf9a951217675d9665385b3228909fb302ec7c6#diff-b4aea3e418ccdb71239b96952d9cddb6R156)が#[panic_implementation]に変更されていた。そのおかげで、[結構な変更が入った。](https://github.com/segfo/rust-uefi-sample/commit/1cf9a951217675d9665385b3228909fb302ec7c6#diff-b4aea3e418ccdb71239b96952d9cddb6R6)

ビルドには、プロジェクトディレクトリ直下で

```
export RUST_TARGET_PATH=`pwd`
```

これを打つ必要がある。

# 何とかビルドできた
が、次はQemuがうまいこと動いてくれなかったので

```
$ make run
xargo build --target x86_64-unknown-efi
    Finished dev [unoptimized + debuginfo] target(s) in 0.08s
cd target/x86_64-unknown-efi/debug && x86_64-efi-pe-ar x *.a
x86_64-efi-pe-ld --gc-sections --oformat pei-x86-64 --subsystem 10 -pie -e efi_main -o build/bootx64.efi target/x86_64-unknown-efi/debug/*.o
cp -fp build/bootx64.efi build/EFI/BOOT/
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB, 1.4 MiB) copied, 0.017609 s, 83.7 MB/s
qemu-system-x86_64.exe -m 1024 -bios ovmf.fd -usb -usbdevice disk::build/boot.img
D:\ProgramFiles\qemu\qemu-system-x86_64.exe: -usbdevice disk::build/boot.img: '-usbdevice' is deprecated, please use '-device usb-...' instead
D:\ProgramFiles\qemu\qemu-system-x86_64.exe: -usbdevice disk::build/boot.img: could not add USB device 'disk::build/boot.img'
Makefile:56: recipe for target 'run' failed
make: *** [run] Error 1
```


[こんな感じでvvfatを使うようにしたら](https://github.com/segfo/rust-uefi-sample/commit/1cf9a951217675d9665385b3228909fb302ec7c6#diff-b67911656ef5d18c4ae36cb6741b7965R55)うごいた


```
xargo build --target x86_64-unknown-efi
    Finished dev [unoptimized + debuginfo] target(s) in 0.04s
cd target/x86_64-unknown-efi/debug && x86_64-efi-pe-ar x *.a
x86_64-efi-pe-ld --gc-sections --oformat pei-x86-64 --subsystem 10 -pie -e efi_main -o build/bootx64.efi target/x86_64-unknown-efi/debug/*.o
cp -fp build/bootx64.efi build/EFI/BOOT/
qemu-system-x86_64.exe -m 1024 -bios ovmf.fd -hda fat:build/
vvfat build/ chs 1024,16,63
D:\ProgramFiles\qemu\qemu-system-x86_64.exe: -hda fat:build/: Opening non-rw vvfat images without an explicit read-only=on option is deprecated. Future versions will refuse to open the image instead of automatically marking the image read-only.
WARNING: Image format was not specified for 'json:{"fat-type": 0, "dir": "build/", "driver": "vvfat", "floppy": false, "rw": false}' and probing guessed raw.
         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
         Specify the 'raw' format explicitly to remove the restrictions.
```

Rustちゃんの仕様変更に追いつくの大変。
特にこういう泥臭いところは結構激しい。

一緒にウォッチしてくれる人おらんかね・・・俺はもう疲れたよ・・・

きょうはここまで。