我編譯 openwrt 的過程總是充滿血與淚的。
openwrt 的版本碎片化,我的編譯環境更碎片化。x86 的軟路由我在 vmware 的虛擬機裡;mt798x 的硬路由有虛擬機,有 ubuntu2202-wsl2。
因為我的 mac 都是 none-case sensitive 的,所以我從來沒在 mac 上跑過編譯。今天突發奇想,來體驗一下快不快。
我非常喜歡 OrbStack,不僅是 docker,虛擬機也配置也是深得我心。可以一鍵的生成 arm64/amd64 的完整 Linux 環境,而且 amd64 下是自動掛在 rosette 的(一波硬廣。
新建 ubuntu 2002 arm 的機器。安裝以來。
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache clang clangd cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext \
git gperf haveged help2man intltool libelf-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5 libncursesw5-dev libreadline-dev \
libssl-dev libtool lld lldb lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 \
python3 python3-pip python3-ply python-docutils qemu-utils re2c rsync scons squashfs-tools subversion swig \
texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
sudo apt install gcc-multilib-i686-linux-gnu gcc-multilib-s390x-linux-gnu gcc-multilib-x86-64-linux-gnu gcc-multilib-x86-64-linux-gnux32
sudo apt install g++-multilib-i686-linux-gnu g++-multilib-s390x-linux-gnu g++-multilib-x86-64-linux-gnu g++-multilib-x86-64-linux-gnux32
sudo apt install libc6-dev-i386-amd64-cross libc6-dev-i386-cross libc6-dev-i386-x32-cross
參考下文,arm 下的交叉編譯 gcc/g++ 組件有特殊的後綴。這裡不得不感慨下 go 的好,少年不知 golang 好,不把交叉編譯當成寶。
mac 沒有使用 magsafe 電源,typec 連接顯示器,10 線程編譯,基本跑慢 60w 的輸出功率。
mt798x 2102 的默認配置,增加了一個 ttyd 的情況下,全量編譯僅用時~14 分鐘。
作為一個沒有吃過細糠的山豬的我,還是蠻快的。這裡不得不又再羨慕下,那些家裡客廳有十幾路志強服務器的大佬們,飛機起飛的功夫,就能編譯完。