中国のAlibabaグループの半導体を司る、T-HeadがAndroidをRISC-Vに移植したことを発表し、そのソースコードをGitHub上に公開した。 やり方は一応簡単なはずなので、再現してみることにした。
一応断っておくと、非常に多くのディスク、CPU、メモリを必要とする。私のメインマシンであるSurface Laptop2(4コア16GB)では全く歯が立たなかった。WSLでのビルドは互換性などの問題でビルドがうまく行かない可能性があるのでやめた方がいいい。私はAWSのかなり強力なインスタンス(EPYC 16コア、128GB、500GB)を用意してようやくビルドに成功した。
上記のリポジトリをダウンロードすると、reproduce.sh
というのがあるので基本的にこれを実行すれば問題ないのだが、どうもURLのいくつが中国向けになっているようなのでこれを修正していく。具体的には日本国内ではAndroidのリポジトリなどは普通に日本のサイトを見ればよいはずなので、以下のように修正した。
reproduce.sh
diff --git a/reproduce.sh b/reproduce.sh index 560c844..f523215 100755 --- a/reproduce.sh +++ b/reproduce.sh @@ -4,7 +4,8 @@ SCRIPT_PATH=`realpath $0` export AOSP_RISCV_TOP=`dirname $SCRIPT_PATH` export AOSP_RISCV_PATCH_TOP=${AOSP_RISCV_TOP}/patches export AOSP_RISCV_BUILD_TOP=${AOSP_RISCV_TOP}/aosp -export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' +# export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' +export REPO_URL='http://android.googlesource.com/tools/repo' #check path if [ -z $AOSP_RISCV_TOP -o $AOSP_RISCV_TOP = "" ] ; then @@ -46,7 +47,7 @@ fi if [ ! -f ${AOSP_RISCV_TOP}/stages/.stamp_repo_sync ]; then mkdir -p ${AOSP_RISCV_BUILD_TOP} cd ${AOSP_RISCV_BUILD_TOP} - repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android10-release; + repo init -u https://android.googlesource.com/platform/manifest -b android10-release; cp ${AOSP_RISCV_PATCH_TOP}/manifest/default.xml ${AOSP_RISCV_BUILD_TOP}/.repo/manifests/default.xml repo sync cd ${AOSP_RISCV_TOP}
さらにrepo
コマンドをダウンロードする必要がある。
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/repo chmod +x ${HOME}/repo export PATH=${HOME}/:{PATH}
そしてreproduce.sh
コマンドを実行する。
途中でエラーで落ちてしまったが、どうもAndroidのビルド要件以外にClangビルド用のパッケージが必要らしい。
gen-attributes/gen/llvm/IR/Attributes.inc.d -o out/soong/.intermediates/external/llvm/llvm-gen-attributes/gen/llvm/IR/Attributes.inc external/llvm/include/llvm/IR/Attributes.td out/soong/host/linux-x86/bin/llvm-tblgen: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
$ sudo apt install libncurses5-dev libncurses5
これでとりあえず最後までビルドできたので、手順に従ってエミュレートを実行してみる。
cd /home/ubuntu/work2/aosp-riscv/aosp source ./build/envsetup.sh lunch aosp_riscv64-eng emulator -selinux permissive -qemu -smp 2 -m 3800M -bios /home/ubuntu/work2/aosp-riscv/aosp/prebuilts/qemu-kernel/riscv64/ranchu/fw_jump.bin
しかしとてつもなく遅い。ブート完了まで30分程度はかかっただろうか。やはりQEMU上で実行するのは遅いんだなあ...