Open7

WasmLinux: ビルド環境の整理(Cygwin)

okuokuokuoku

流石にそろそろビルドの再現性を確保しないと困ったことになるだろうということで、諸々整理していく。

特に、今迄はLinuxカーネルとrunnerを同じリポジトリに入れてたけど、これを避けたい。

okuokuokuoku

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
okuokuokuoku

wabt

特記事項なし。

cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/cygdrive/d/wasmlinux/host ../../wabt
okuokuokuoku

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
okuokuokuoku

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 が必要になるっぽい。

okuokuokuoku

ダミー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を借りておく。

okuokuokuoku

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"