Open7
WasmLinux: ビルド環境の整理(Cygwin)
流石にそろそろビルドの再現性を確保しないと困ったことになるだろうということで、諸々整理していく。
特に、今迄はLinuxカーネルとrunnerを同じリポジトリに入れてたけど、これを避けたい。
LLVM
ClangとLLDがあれば良いかな。
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_PARALLEL_LINK_JOBS=1 \
"-DLLVM_ENABLE_PROJECTS=clang;lld" -DLLVM_TARGETS_TO_BUILD=WebAssembly \
-DCMAKE_INSTALL_PREFIX=/cygdrive/d/wasmlinux/host ../../llvm-project/llvm
wabt
特記事項なし。
cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/cygdrive/d/wasmlinux/host ../../wabt
Linuxのビルド
改めて手動でビルドしてみる。
PATH=/usr/bin make -j10 -C tools/lkl ARCH=lkl CC=`pwd`/../_toolchain/bin/warp-cc \
LD=`pwd`/../_toolchain/bin/warp-ld AR=`pwd`/../_toolchain/bin/warp-ar \
NM=`pwd`/../_toolchain/bin/warp-nm OBJCOPY=/cygdrive/d/wasmlinux/host/bin/llvm-objcopy \
KALLSYMS_EXTRA_PASS=1 CONFIG_OUTPUT_FORMAT=wasm32 CROSS_COMPILE=wasm32 V=1
.config
にはパスは含まれないので書き換え不要。
PATHをクリアしないとビルドに失敗する。たぶんパス内に (
のようなShellエスケープが必要な文字が含まれることを考慮していない。
bc
コマンド要るのか。。
/bin/sh: line 1: bc: command not found
make[2]: *** [Kbuild:24: include/generated/timeconst.h] Error 127
カーネルヘッダのインストール
make ARCH=lkl INSTALL_HDR_PATH=/cygdrive/d/wasmlinux/prefix headers_install
Musl
Muslは ./configure && make && make install
するタイプ。
AR=/cygdrive/d/wasmlinux/_toolchain/bin/warp-ar \
RANLIB=/cygdrive/d/wasmlinux/host/bin/llvm-ranlib \
CC=/cygdrive/d/wasmlinux/_toolchain/bin/warp-cc \
CFLAGS=-fPIC ./configure --enable-debug --disable-shared --build=wasm32 \
--prefix=/cygdrive/d/wasmlinux/prefix
その後は make && make install
。
MuslのMakefileは差分ビルドを正常にハンドルしないようなので、都度 make clean && make
が必要になるっぽい。
ダミーlibm
../../_toolchain/bin/warp-cc -nostdlib -nostdinc -fPIC -g -c -o dummymath.o dummymath.c
../../_toolchain/bin/warp-ar crs libm.a dummymath.o
さっさとcompiler-rtを移植するべきなんでは。。
Muslも中身が空のlibmを用意してくれるが、とりあえずlibmを借りておく。
Busybox
... これちょっとパッチしすぎだな。。 scripts/trylink
コードを足すんではなくて、sysrootを設定する方向にもっていく必要がある。
scripts/trylink
にパッチされていると仮定して:
make -j10 AR=/cygdrive/d/wasmlinux/_toolchain/bin/warp-ar \
CC=/cygdrive/d/wasmlinux/_toolchain/bin/warp-hosted-cc
.config
にパスが含まれる:
CONFIG_EXTRA_CFLAGS="-nostdlib -nostdinc -fPIC -isystem /cygdrive/d/wasmlinux/host/lib/clang/18/include -isystem /cygdrive/d/wasmlinux/prefix/include"
CONFIG_EXTRA_LDFLAGS="-shared -Wl,--error-limit=0 -L/cygdrive/d/wasmlinux/prefix/lib -lm"