wasix-org/wasix-libc

Build instructions don't work

Opened this issue · 2 comments

I tried to build wasix-libc as documented:

make CC='zig cc -target wasm32-freestanding` AR=`zig ar` NM=`zig nm`

But that fails with:

find: ‘libc-bottom-half/getpid’: No such file or directory
find: ‘build/-wasi’: No such file or directory
#
# Install the include files.
#
mkdir -p "/tmp/wasix-libc/sysroot/include"
cp -r "libc-bottom-half/headers/public"/* "/tmp/wasix-libc/sysroot/include"
# Generate musl's bits/alltypes.h header.
mkdir -p "/tmp/wasix-libc/sysroot/include/bits"
sed -f libc-top-half/musl/tools/mkalltypes.sed \
    libc-top-half/musl/arch//bits/alltypes.h.in \
    libc-top-half/musl/include/alltypes.h.in \
    > "/tmp/wasix-libc/sysroot/include/bits/alltypes.h"
sed: can't read libc-top-half/musl/arch//bits/alltypes.h.in: No such file or directory
make: *** [Makefile:611: include_dirs] Error 2

The build32.sh script fails on macOS due to GNUisms. On Linux, it successfully completes.
But then, the sysroot folder contains headers, but lib/wasm32-wasi folder is empty.

How to build wasix-libc?

I face similar issue as you did. It took me quite a while to build the wasix sysroot. I believe the build instruction need to be updated. Here is what I found.

First, there is not need to run build32.sh and build64.sh. What these script did (except the final make step, because /sysroot is in the .gitignore file) is already reflect in the current commit of the repo.

Second I found some issues in the Makefile, as the output suggest

find: ‘libc-bottom-half/getpid’: No such file or directory
find: ‘build/-wasi’: No such file or directory

The first line is complaining about not finding getpid.c which is not in /libc-bottom-half but inside /libc-bottom-half/sources
Correcting the Makefile get me through this part.

The second line is caused by missing environment variables.

# or wasm64
export TARGET_ARCH=wasm32
export TARGET_OS=wasix

Finally, I use wasi-sdk to build the sysroot

CC=${WASI_SDK_PATH}/bin/clang AR=${WASI_SDK_PATH}/bin/llvm-ar NM=${WASI_SDK_PATH}/bin/llvm-nm make -j $NUM_OF_CPUS
# or wasm64
export TARGET_ARCH=wasm32
export TARGET_OS=wasix

Finally, I use wasi-sdk to build the sysroot

CC=${WASI_SDK_PATH}/bin/clang AR=${WASI_SDK_PATH}/bin/llvm-ar NM=${WASI_SDK_PATH}/bin/llvm-nm make -j $NUM_OF_CPUS

Worked!!!!