@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby.wasmのビルド中にruby/zlibのconfigureに失敗する

ビルド終盤の linking ruby のあとでエラーが起きています。

ruby.wasmのビルドエラー

zlibがインストールされていない?

dpkg -l |grep zlibを実行すると

ledsun@MSI:~/ruby.wasm[1]►dpkg -l |grep zlib
ii  zlib1g:amd64                        1:1.2.11.dfsg-2ubuntu9.2                     amd64        compression library - runtime
ii  zlib1g-dev:amd64                    1:1.2.11.dfsg-2ubuntu9.2                     amd64        compression library - development

zlibはインストールされています。

sudo apt --reinstall install zlib1g zlib1g-devしてみます。変わりません。

エラーログファイルをみる

build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug/ext/zlib/mkmf.logをみます。 build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug/ext/zlib/mkmf.log · GitHub

15~16行目

conftest.c:3:10: fatal error: 'zlib.h' file not found
#include <zlib.h>

echo '#include <zlib.h>' | gcc -o a.out -E - は成功します。 zlib.hが見えなくなる条件があるようです。

ビルドの出力を確認

コンパイルオプションぽいものをさがします。

HEAD is now at aabc019 Skip VM_CALL_BLOCKISEQ for Ruby < 3.3
echo aabc019684d8b4a1ed66c2a1ca48da7bbb18dcc0 | /bin/sh /home/ledsun/ruby.wasm/build/checkouts/head/tool/ifchange /home/ledsun/ruby.wasm/build/checkouts/head/.bundle/.timestamp/typeprof.revision -
/home/ledsun/ruby.wasm/build/checkouts/head/.bundle/.timestamp/typeprof.revision unchanged
        BASERUBY = /home/ledsun/ruby.wasm/build/x86_64-pc-linux/baseruby-head/opt/bin/ruby --disable=gems
        CC = /home/ledsun/ruby.wasm/build/checkouts/head/tool/wasm-clangw /home/ledsun/ruby.wasm/build/toolchain/wasi-sdk/bin/clang
        LD = /home/ledsun/ruby.wasm/build/toolchain/wasi-sdk/bin/clang
        LDSHARED = /home/ledsun/ruby.wasm/build/toolchain/wasi-sdk/bin/clang
        CFLAGS = -fdeclspec -O3 -fno-fast-math -g -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef   -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS
        XCFLAGS = -DWASM_SETJMP_STACK_BUFFER_SIZE=24576 -DWASM_FIBER_STACK_BUFFER_SIZE=24576 -DWASM_SCAN_STACK_BUFFER_SIZE=24576 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -I. -I.ext/include/wasm32-wasi -I/home/ledsun/ruby.wasm/build/checkouts/head/include -I/home/ledsun/ruby.wasm/build/checkouts/head -I/home/ledsun/ruby.wasm/build/checkouts/head/enc/unicode/15.0.0
        CPPFLAGS = -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS
        DLDFLAGS = -Xlinker --stack-first -Xlinker -z -Xlinker stack-size=16777216 /home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/wasi-vfs-0.1.1/libwasi_vfs.a @/home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug-ext/js/link.filelist @/home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug-ext/witapi/link.filelist /home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug-ext/extinit.o
        SOLIBS = -lcrypt -lm -lwasi-emulated-mman -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks
        LANG = C.UTF-8
        LC_ALL =
        LC_CTYPE =
        MFLAGS =
        RUSTC = rustc
        YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug/yjit/target/release/' /home/ledsun/ruby.wasm/build/checkouts/head/yjit/src/lib.rs
clang version 13.0.0 (https://github.com/llvm/llvm-project fd1d8c2f04dde23bee0fb3a7d069a9b1046da979)

インクルードパスっぽいものをさがします。

-I. -I.ext/include/wasm32-wasi -I/home/ledsun/ruby.wasm/build/checkouts/head/include -I/home/ledsun/ruby.wasm/build/checkouts/head -I/home/ledsun/ruby.wasm/build/checkouts/head/enc/unicode/15.0.0

ここにzlib.hがないのでしょうか?

locate zlib.hを実行すると

ledsun@MSI:~/ruby.wasm[1]►locate zlib.h
/home/ledsun/.cache/node-gyp/17.0.1/include/node/zlib.h
/mnt/c/Ruby30-x64/msys64/mingw64/include/bzlib.h
/mnt/c/Ruby30-x64/msys64/mingw64/include/szlib.h
/mnt/c/Ruby30-x64/msys64/mingw64/include/zlib.h
/mnt/c/Users/led_l/.cargo/registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.26+1.3.0/libgit2/deps/zlib/zlib.h
/mnt/c/Users/led_l/.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/zlib.h
/mnt/c/Users/led_l/.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib-ng/zlib.h
/mnt/c/Users/led_l/AppData/Local/Programs/Python/Python311/Doc/html/library/zlib.html
/mnt/c/bm311/psql/include/zlib.h
/usr/include/zlib.h
/usr/include/node/zlib.h
/usr/share/doc/nodejs/api/zlib.html
/usr/src/linux-ibm-headers-5.15.0-1034/include/linux/zlib.h
/usr/src/linux-ibm-headers-5.15.0-1035/include/linux/zlib.h

/usr/include/zlib.hがあります。 コピーしたらいいのかな?

cp /usr/include/zlib.h /home/ledsun/ruby.wasm/build/wasm32-unknown-wasi/head-wasm32-unknown-wasi-full-js-debug/.ext/include/wasm32-wasi /.してみます。 変わりません。

ファイルが見つかってないわけじゃないのかなあ?

CIはどうなっているの?

Nightly release · ruby/ruby.wasm@d0e1445 · GitHub

GitHub Action上でのエラー

同じエラーが起きています。 成功しているジョブもあります。

Ruby 3.2は成功しています。

Ruby 3.2ならビルドが通るのでは?

rake npm:ruby-3_2-wasm-wasiしてみます。

rake npm:ruby-3_2-wasm-wasi をしたときのエラー

headとおなじエラーがでます。 CIとは環境のちがいもあるのかもしれません。