jacobfriedman/p2p-prolog

Failure in WASM Build

Closed this issue · 6 comments

root@jacob:/usr/lib/swipl-devel# cd build.wasm
root@jacob:/usr/lib/swipl-devel/build.wasm# ls -l
total 272
-rw-r--r-- 1 root root 200154 Sep 29 20:17 build.ninja
-rw-r--r-- 1 root root  30529 Sep 29 20:17 CMakeCache.txt
drwxr-xr-x 5 root root   4096 Sep 29 20:17 CMakeFiles
-rw-r--r-- 1 root root   2144 Sep 29 20:17 cmake_install.cmake
-rw-r--r-- 1 root root   4090 Sep 29 20:17 CPackConfig.cmake
-rw-r--r-- 1 root root   4541 Sep 29 20:17 CPackSourceConfig.cmake
-rw-r--r-- 1 root root    279 Sep 29 20:17 CTestTestfile.cmake
drwxr-xr-x 2 root root   4096 Sep 29 20:17 home
drwxr-xr-x 2 root root   4096 Sep 29 20:17 packages
-rw-r--r-- 1 root root   3247 Sep 29 20:17 rules.ninja
drwxr-xr-x 3 root root   4096 Sep 29 20:17 src
-rw-r--r-- 1 root root      5 Sep 29 20:17 swipl.home
root@jacob:/usr/lib/swipl-devel/build.wasm# cmake --build .
[152/336] Building C object src/CMakeFiles/libswipl.dir/pl-zip.c.o
FAILED: src/CMakeFiles/libswipl.dir/pl-zip.c.o 
/usr/lib/emsdk/upstream/emscripten/emcc  -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2   -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-zip.c.o -MF src/CMakeFiles/libswipl.dir/pl-zip.c.o.d -o src/CMakeFiles/libswipl.dir/pl-zip.c.o   -c ../src/pl-zip.c
In file included from ../src/pl-zip.c:40:
In file included from ../src/pl-zip.h:40:
../src/minizip/zip.h:50:10: fatal error: 'zlib.h' file not found
#include "zlib.h"
         ^~~~~~~~
1 error generated.
emcc: error: '/usr/lib/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=2 -D__EMSCRIPTEN_minor__=0 -D__EMSCRIPTEN_tiny__=5 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SSE -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/neon -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/compiler-rt/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libunwind/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2 -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-zip.c.o -MF src/CMakeFiles/libswipl.dir/pl-zip.c.o.d -o src/CMakeFiles/libswipl.dir/pl-zip.c.o -c ../src/pl-zip.c -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SDL -c -o src/CMakeFiles/libswipl.dir/pl-zip.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (1)
[157/336] Building C object src/CMakeFiles/libswipl.dir/pl-wam.c.o
FAILED: src/CMakeFiles/libswipl.dir/pl-wam.c.o 
/usr/lib/emsdk/upstream/emscripten/emcc  -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2   -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-wam.c.o -MF src/CMakeFiles/libswipl.dir/pl-wam.c.o.d -o src/CMakeFiles/libswipl.dir/pl-wam.c.o   -c ../src/pl-wam.c
emcc: error: '/usr/lib/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=2 -D__EMSCRIPTEN_minor__=0 -D__EMSCRIPTEN_tiny__=5 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SSE -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/neon -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/compiler-rt/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libunwind/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2 -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-wam.c.o -MF src/CMakeFiles/libswipl.dir/pl-wam.c.o.d -o src/CMakeFiles/libswipl.dir/pl-wam.c.o -c ../src/pl-wam.c -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SDL -c -o src/CMakeFiles/libswipl.dir/pl-wam.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (-9)
ninja: build stopped: subcommand failed.
root@jacob:/usr/lib/swipl-devel/build.wasm# ninja
[83/184] Building C object src/CMakeFiles/libswipl.dir/pl-zip.c.o
FAILED: src/CMakeFiles/libswipl.dir/pl-zip.c.o 
/usr/lib/emsdk/upstream/emscripten/emcc  -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2   -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-zip.c.o -MF src/CMakeFiles/libswipl.dir/pl-zip.c.o.d -o src/CMakeFiles/libswipl.dir/pl-zip.c.o   -c ../src/pl-zip.c
In file included from ../src/pl-zip.c:40:
In file included from ../src/pl-zip.h:40:
../src/minizip/zip.h:50:10: fatal error: 'zlib.h' file not found
#include "zlib.h"
         ^~~~~~~~
1 error generated.
emcc: error: '/usr/lib/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=2 -D__EMSCRIPTEN_minor__=0 -D__EMSCRIPTEN_tiny__=5 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SSE -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/neon -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/compiler-rt/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libunwind/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2 -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-zip.c.o -MF src/CMakeFiles/libswipl.dir/pl-zip.c.o.d -o src/CMakeFiles/libswipl.dir/pl-zip.c.o -c ../src/pl-zip.c -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SDL -c -o src/CMakeFiles/libswipl.dir/pl-zip.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (1)
[87/184] Building C object src/CMakeFiles/libswipl.dir/pl-gc.c.o
../src/pl-gc.c:1423:3: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result]
{ pushSegStack(&LD->cycle.vstack, p, Word);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/pl-segstack.h:93:5: note: expanded from macro 'pushSegStack'
                : pushSegStack_((stack), &data)                 \
                  ^~~~~~~~~~~~~ ~~~~~~~~~~~~~~
1 warning generated.
[88/184] Building C object src/CMakeFiles/libswipl.dir/pl-wam.c.o
FAILED: src/CMakeFiles/libswipl.dir/pl-wam.c.o 
/usr/lib/emsdk/upstream/emscripten/emcc  -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2   -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-wam.c.o -MF src/CMakeFiles/libswipl.dir/pl-wam.c.o.d -o src/CMakeFiles/libswipl.dir/pl-wam.c.o   -c ../src/pl-wam.c
emcc: error: '/usr/lib/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=2 -D__EMSCRIPTEN_minor__=0 -D__EMSCRIPTEN_tiny__=5 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SSE -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/neon -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/compiler-rt/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/lib/libunwind/include -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -Isrc -I../src -Iusr/lib/zlib-1.2.11 -DNDEBUG -O2 -Wall -MD -MT src/CMakeFiles/libswipl.dir/pl-wam.c.o -MF src/CMakeFiles/libswipl.dir/pl-wam.c.o.d -o src/CMakeFiles/libswipl.dir/pl-wam.c.o -c ../src/pl-wam.c -Xclang -isystem/usr/lib/emsdk/upstream/emscripten/system/include/SDL -c -o src/CMakeFiles/libswipl.dir/pl-wam.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (-9)
ninja: build stopped: subcommand failed.
root@jacob:/usr/lib/swipl-devel/build.wasm# 
rla commented

-Iusr/lib/zlib-1.2.11 it probably tries to link with system zlib which is not going to work.

Autoconf-based build needed special flags for zlib: https://github.com/JanWielemaker/swi-prolog-wasm
I don't remember how to tweak it in the CMake-based build.

rla commented

Make sure that you followed the CMake-based build instructions from: https://github.com/SWI-Prolog/swipl-devel/blob/master/CMAKE.md#wasm-emscripten

rla commented

Make sure that you followed the CMake-based build instructions from: https://github.com/SWI-Prolog/swipl-devel/blob/master/CMAKE.md#wasm-emscripten

I just noticed that instructions to build wasm zlib are missing.

Will be looking into this today.

Update with ZLIB built. Now I'm running into

emcc: error: Invalid command line option -s BINARYEN_TRAP_MODE=clamp: The wasm backend does not support a trap mode (it always clamps, in effect)

which is weird, looking at the swpl changelogs as of 8:

  • FIXED: WASM: Use BINARYEN_TRAP_MODE=clamp to avoid traps when
    converting large floats to integers.

emcc: error: Invalid command line option -s BINARYEN_TRAP_MODE=clamp: The wasm backend does not support a trap mode (it always clamps, in effect)

which is weird, looking at the swpl changelogs as of 8:

FIXED: WASM: Use BINARYEN_TRAP_MODE=clamp to avoid traps when
converting large floats to integers.

May add pull request soon. looking into it.