DevTerm R-01が笑えるくらいもっさりなので、クロスコンパイルを導入することに。
以前、EdgeRouterで調べたのがこれ。
今回参考にさせていただいたページは以下。
https://qiita.com/tetsu_koba/items/9bdcb59f912efbff3128
g++を指定して入れるのがミソらしい。
その流れでクロスコンパイラーを調べてみた。なんでもいけそう。RISC-Vもあった。このリストが俗に言う現行サポートアーキテクチャーなのか。DEC Alphaとかm68kとかあるw
g++-10/focal-updates,focal-security 10.3.0-1ubuntu1~20.04 amd64
g++-10-aarch64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-alpha-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-arm-linux-gnueabi/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-arm-linux-gnueabihf/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-hppa-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-i686-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-m68k-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips64-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips64el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsel-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa32r6-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa32r6el-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa64r6-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa64r6el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib/focal-updates,focal-security 10.3.0-1ubuntu1~20.04 amd64
g++-10-multilib-arm-linux-gnueabi/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-arm-linux-gnueabihf/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-i686-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips64-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips64el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsel-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa32r6-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa32r6el-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa64r6-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa64r6el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-powerpc-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-powerpc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-s390x-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-sparc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-x86-64-linux-gnux32/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc64le-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-riscv64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-s390x-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-sh4-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-sparc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-x86-64-linux-gnux32/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
以下のようにして、動かせた。テスト環境は、ARM64 (VMware Fusion Tech Preview 22H2 Ubuntu 20.04.5)とx86_64のUbuntu 20.04.5。
aarch64
apt -y install g++-aarch64-linux-gnu qemu-user-binfmt
mv /lib/aarch64-linux-gnu /lib/aarch64-linux-gnu.orig
ln -s /usr/aarch64-linux-gnu/lib/ /lib/aarch64-linux-gnu
ln -s /lib/aarch64-linux-gnu/ld-2.21.so /lib/ld-linux-aarch64.so.1
RISC-V
apt -y install g++-riscv64-linux-gnu qemu-user-binfmt
mv /lib/riscv64-linux-gnu /lib/riscv64-linux-gnu.orig
ln -s /usr/riscv64-linux-gnu/lib /lib/riscv64-linux-gnu
ln -s /lib/riscv64-linux-gnu/ld-2.31.so /lib/ld-linux-riscv64.so.1
ln -s /lib/riscv64-linux-gnu/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1
x86_64(わかるまでちょっと厄介だった。)
apt -y install g++-x86-64-linux-gnu qemu-user-binfmt
mkdir /lib64
ln -s /usr/x86_64-linux-gnu/lib64/ /lib64/x86_64-linux-gnu
ln -s /lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
mv /lib/x86_64-linux-gnu /lib/x86_64-linux-gnu.orig
ln -s /usr/x86_64-linux-gnu/lib /lib/x86_64-linux-gnu
まぁ、動かないときは、何かのリンク忘れなので、比較的簡単に動いた。
となるとやりたくなるのは、どこでコンパイルすればいいのかという話になりそうw