Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Emscripten 3.1.52 incompatible with build #588

Closed
cxcorp opened this issue Jul 29, 2024 · 2 comments · Fixed by #589
Closed

Emscripten 3.1.52 incompatible with build #588

cxcorp opened this issue Jul 29, 2024 · 2 comments · Fixed by #589

Comments

@cxcorp
Copy link
Contributor

cxcorp commented Jul 29, 2024

Hello,

I just wanted to give a heads-up that it seems that emscripten 3.1.51 is the latest version with which sql.js builds.

Version 3.1.52 added this change:

emcc will now treat .bc files as source files. These means that will get compiled by clang before being passed to the linker. This matches the behaviour of clang. (emscripten-core/emscripten#20922)

When building with 3.1.52, the build fails with out/sqlite3.bc:1:2: error: expected top-level entity (the somewhat garbled output seems to be due to -j8):

625.2 emcc --memory-init-file 0 -s RESERVED_FUNCTION_POINTERS=64 -s ALLOW_TABLE_GROWTH=1 -s EXPORTED_FUNCTIONS=@src/exported_functions.json -s EXPORTED_RUNTIME_METHODS=@src/exported_runtime_methods.json -s SINGLE_FILE=0 -s NODEJS_CATCH_EXIT=0 -s NODEJS_CATCH_REJECTION=0 -s STACK_SIZE=5MB -s ASSERTIONS=2 -O1 -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 out/sqlite3.bc out/extension-functions.bc --pre-js src/api.js -o dist/sql-wasm-debug.js
625.3 out/sqlite3.bcout/sqlite3.bcout/sqlite3.bc:::111:::222:::   error: error: error: expected top-level entityexpected top-level entityexpected top-level entity
625.3 
625.3 
625.3             111 |  |  | <U+0000><U+0000><U+0000>aaasssmmm<U+0001><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0001><U+0001><B6><B6><B6><84><84><84><80><80><80><80><80><80><U+0000><U+0000><U+0000>FFF```<U+0004><U+0004><U+0004><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0003><U+0003><U+0003><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0005><U+0005><U+0005><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0002><U+0002><U+0002><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F><U+0000><U+0000><U+0000>``<U+0002>`<U+0002><U+007F><U+0002><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000><U+0000><U+0000>```<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001>~~~```<U+0003><U+0003><U+0003><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000><U+007F><U+0000>`<U+0000>`<U+0000>`<U+0000><U+0001><U+0000><U+0001><U+007F><U+0001><U+007F><U+007F>```<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>```<U+0003><U+0003><U+0003><U+007F><U+007F><U+007F><U+007F><U+007F>~<U+007F>~<U+0001>~<U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0001><U+0001><U+0001>~~~<U+0001><U+0001><U+0001>~~~```<U+0000><U+0000><U+0000><U+0001><U+0001><U+0001>~~~```<U+0001><U+0001><U+0001>~~~<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>```<U+0002><U+0002><U+007F><U+0002><U+007F>~<U+007F>~<U+0001>~<U+0001><U+007F><U+0001><U+007F>`<U+007F>`<U+0001>`<U+0001><U+0001><U+007F><U+007F><U+007F><U+0001><U+0001><U+0001>||`|`<U+0002>`<U+0002><U+007F><U+0002><U+007F>|<U+007F>|<U+0000>|<U+0000><U+0000>```<U+0004><U+0004><U+0004>~~~~~~~~~~~~<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>``<U+0005>`<U+0005><U+007F><U+0005><U+007F>~<U+007F>~~~~~~~~~<U+0000>~`<U+0000>~<U+0002>`<U+0000>`~<U+0002><U+0002>~~~~<U+0001>~~<U+0001><U+0001>`~~<U+0003>``<U+0003><U+007F><U+0003><U+007F>|<U+007F>|||<U+0000>||`<U+0000><U+0002><U+0000>`<U+007F>`<U+0002><U+007F><U+0002><U+007F><U+0001><U+007F><U+007F>~<U+007F><U+0001>`out/sqlite3.bc<U+0001>~<U+0007>:~`<U+007F>1`<U+0007><U+007F>:<U+0007>2<U+007F><U+007F><U+007F>:<U+007F><U+007F><U+007F><U+007F> <U+007F><U+007F><U+007F>error: <U+007F><U+007F>expected top-level entity<U+007F><U+007F><U+007F>
625.3 <U+007F><U+007F><U+007F><U+0001><U+0001><U+007F><U+007F><U+007F><U+0001>``<U+007F><U+0002><U+0002>`<U+007F><U+007F><U+0002>~~<U+007F><U+0000><U+0000>~``<U+0000><U+0005><U+0005>`<U+007F><U+007F><U+0005><U+007F><U+007F><U+007F>~~<U+007F><U+007F><U+007F><U+007F>~<U+007F><U+0001><U+007F><U+007F><U+0001><U+007F>`<U+007F><U+0001><U+0006>`<U+007F><U+007F><U+0006>`<U+007F><U+007F><U+0006><U+007F><U+007F><U+007F>~<U+007F><U+007F>~~<U+007F><U+007F>~~<U+0001><U+007F>~<U+007F><U+007F><U+0001>`<U+0001><U+007F><U+0004><U+007F>`<U+007F>`<U+0004><U+007F><U+0004><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000><U+007F><U+007F>`<U+007F><U+007F><U+0004>    <U+0000><U+0000><U+007F>1``<U+007F> | <U+0004><U+0004><U+0000><U+007F><U+007F><U+007F>a<U+007F>s~<U+007F><U+007F>m<U+0001><U+007F>~<U+0001><U+007F>~<U+0001><U+0000>`<U+007F><U+0001><U+0000><U+0003>`<U+0000><U+0003><U+007F><U+007F><U+0001><U+007F>`~<B6>~<U+0003><U+007F><84><U+007F><U+007F><U+0001><80><U+0001>~<U+007F><80><U+007F><U+007F>`<U+0000>`<U+0001><U+0003>F<U+0003><U+007F><U+007F>`<U+007F><U+0004><U+007F>`<U+007F><U+007F>~<U+0003>~<U+007F><U+0000><U+007F>`<U+0000><U+007F><U+007F>`<U+0005><U+007F>~<U+0005><U+007F><U+007F><U+0001><U+0000><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+0005>`<U+007F><U+007F><U+007F><U+0001><U+007F><U+007F><U+007F><U+007F><U+0000><U+0000><U+007F>`<U+0001>`<U+007F><U+0004><U+007F><U+007F><U+0004><U+007F>`<U+0000><U+007F><U+007F><U+0003>`<U+007F>~<U+007F><U+0004>~<U+007F><U+007F><U+007F><U+007F><U+0000><U+007F><U+007F><U+0000>`<U+0001>~`<U+007F><U+0005><U+007F><U+0000><U+0005><U+007F>``<U+007F><U+007F><U+0005><U+0005><U+007F>~<U+007F><U+007F>~<U+007F><U+007F><U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+0000><U+007F><U+007F><U+0000>`<U+0001><U+0000>`<U+0002><U+007F>`<U+0002><U+007F>`<U+0002><U+007F><U+0002><U+007F><U+007F><U+007F><U+0001><U+007F><U+0001><U+007F>|<U+0001>|<U+007F>`|``<U+0006><U+0001><U+0006><U+0006><U+007F><U+007F><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+007F><U+0001><U+007F><U+007F>~<U+007F>~~<U+007F><U+0000><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+0001><U+0002><U+007F><U+0001><U+0001><U+007F>`<U+007F><U+007F>`<U+007F><U+0005>`<U+0005><U+0000><U+007F>`<U+0005><U+007F><U+0001><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001>~~<U+007F>~<U+007F>`<U+007F>~<U+0001><U+0003><U+0001><U+007F><U+007F><U+0001>`<U+007F><U+007F><U+007F><U+0003><U+007F>``<U+0003><U+0003><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000><U+007F>`|<U+007F>|<U+0000><U+0001>|<U+0001><U+0001><U+0001><U+007F><U+007F><U+007F>``<U+007F>`<U+0002>|<U+0002>`<U+0000>|~<U+0002><U+0000>|~<U+0001>`~<U+0001><U+007F><U+0003><U+0001><U+007F><U+007F><U+007F>``<U+007F>`<U+0007><U+0007>~<U+0007><U+007F><U+007F><U+0001><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F>`<U+007F><U+0001><U+007F><U+007F>~~~~<U+007F><U+0001><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+0001><U+007F>`<U+0001><U+007F>`<U+0000><U+007F>`<U+0006>`<U+0006><U+0001><U+007F><U+0006><U+007F>~<U+007F><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+007F><U+0001><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+0001><U+0001><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+0001><U+007F>``<U+007F>`<U+0008><U+0002>`<U+0008><U+0008><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+007F><U+0001><U+007F><U+007F><U+007F><U+0001><U+0001><U+007F><U+0001><U+007F>|<U+007F><U+007F>``<U+0001>`<U+000B><U+0002><U+007F><U+000B><U+007F><U+007F>`<U+007F><U+007F>|<U+007F><U+000B><U+007F><U+0000><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+007F><U+007F><U+0004><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+0001><U+0001><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>``<U+007F><U+007F><U+0005>`       <U+007F><U+007F>       <U+007F>~<U+0001><U+007F><U+007F>~<U+007F><U+007F><U+007F>~`<U+007F><U+007F>~<U+007F>       <U+007F><U+0000><U+007F><U+007F><U+007F>`<U+007F><U+007F><U+0002><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+007F><U+0001><U+0001>~<U+007F><U+0001><U+007F>``<U+007F><U+007F><U+0003>
625.3 `<U+007F><U+007F><U+0001>      
625.3 ||       |<U+007F>        ^| <U+0000>`
625.3         ^`
625.3 
625.3 <U+0002>      <U+007F>| <U+007F>        ^<U+0001>
625.3 ~`<U+0007><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0002><U+007F>~<U+0000>`<U+0005><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0006><U+007F><U+007F><U+007F>~~<U+007F><U+0001><U+007F>`<U+0004><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0004><U+007F><U+007F><U+007F>~<U+0001><U+007F>`<U+0003>1<U+007F> error1~ generated error1.
625.3 <U+007F> generated error<U+0001>.
625.3 <U+007F> generated`.
625.3 <U+0003><U+007F><U+007F>~<U+0000>`<U+0005><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0004><U+007F><U+007F>~<U+007F><U+0000>`<U+0005><U+007F><U+007F>~<U+007F><U+007F><U+0000>`<U+0002><U+007F><U+007F><U+0001>|`<U+0006><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0005><U+007F><U+007F><U+007F>~<U+007F><U+0001><U+007F>`<U+0003><U+007F><U+007F>|<U+0001><U+007F>`<U+0002>|~<U+0001><U+007F>`<U+0007><U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0006><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0008><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+000B><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`       <U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`
625.3       |         ^
625.3 1 error generated.
625.3 out/sqlite3.bc:1:2: error: expected top-level entity
625.3     1 | <U+0000>asm<U+0001><U+0000><U+0000><U+0000><U+0001><B6><84><80><80><U+0000>F`<U+0004><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0001><U+007F><U+0001><U+007F>`<U+0003><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0005><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0002><U+007F><U+007F><U+0001><U+007F>`<U+0001><U+007F><U+0000>`<U+0002><U+007F><U+007F><U+0000>`<U+0001><U+007F><U+0001>~`<U+0003><U+007F><U+007F><U+007F><U+0000>`<U+0000><U+0001><U+007F>`<U+0000><U+0000>`<U+0003><U+007F><U+007F>~<U+0001><U+007F>`<U+0001>~<U+0001>~`<U+0000><U+0001>~`<U+0001>~<U+0001><U+007F>`<U+0002><U+007F>~<U+0001><U+007F>`<U+0001><U+007F><U+0001>|`<U+0002><U+007F>|<U+0000>`<U+0004>~~~~<U+0001><U+007F>`<U+0005><U+007F>~~~~<U+0000>`<U+0002>~~<U+0001>~`<U+0003><U+007F>||<U+0000>`<U+0002><U+007F><U+007F><U+0001>~`<U+0007><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0002><U+007F>~<U+0000>`<U+0005><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0006><U+007F><U+007F><U+007F>~~<U+007F><U+0001><U+007F>`<U+0004><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0004><U+007F><U+007F><U+007F>~<U+0001><U+007F>`<U+0003><U+007F>~<U+007F><U+0001><U+007F>`<U+0003><U+007F><U+007F>~<U+0000>`<U+0005><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0004><U+007F><U+007F>~<U+007F><U+0000>`<U+0005><U+007F><U+007F>~<U+007F><U+007F><U+0000>`<U+0002><U+007F><U+007F><U+0001>|`<U+0006><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0005><U+007F><U+007F><U+007F>~<U+007F><U+0001><U+007F>`<U+0003><U+007F><U+007F>|<U+0001><U+007F>`<U+0002>|~<U+0001><U+007F>`<U+0007><U+007F><U+007F><U+007F><U+007F>~<U+007F><U+007F><U+0001><U+007F>`<U+0006><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0008><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+000B><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`       <U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`
625.3       |         ^
625.3 1 error generated.
625.3 emcc: error: '/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default --sysroot=/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -Oz -flto out/sqlite3.bc -c -o /tmp/emscripten_temp_h78hqigr/sqlite3_0.o' failed (returned 1)
625.3 emcc: error: '/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -O1 out/sqlite3.bc -c -o /tmp/emscripten_temp_onl_5iyh/sqlite3_0.o' failed (returned 1)
625.3 emcc: error: '/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default --sysroot=/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -Oz -flto out/sqlite3.bc -c -o /tmp/emscripten_temp_sv8_kc3g/sqlite3_0.o' failed (returned 1)
625.3 emcc: error: '/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default --sysroot=/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -Oz -flto out/sqlite3.bc -c -o /tmp/emscripten_temp_w2og3jh2/sqlite3_0.o' failed (returned 1)
625.3 emcc: error: '/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -O1 out/sqlite3.bc -c -o /tmp/emscripten_temp_us0o7k47/sqlite3_0.o' failed (returned 1)
625.3 make: *** [Makefile:107: dist/sql-asm-memory-growth.js] Error 1
625.3 make: *** Waiting for unfinished jobs....
625.3 make: *** [Makefile:80: dist/sql-asm-debug.js] Error 1
625.3 make: *** [Makefile:86: dist/sql-wasm-debug.js] Error 1
625.3 make: *** [Makefile:101: dist/sql-wasm.js] Error 1
625.3 make: *** [Makefile:95: dist/sql-asm.js] Error 1

Another project's tracking issue for this (libretro/RetroArch#16160) suggests renaming the .bc to .a in the makefile, but I am not knowledgeable enough to suggest a solution.

Building with 3.1.51 produces warnings which I think may be related to this:

emcc: warning: .bc output file suffix used without -flto or -emit-llvm. Consider using .o extension since emcc will output an object file, not a bitcode file [-Wemcc]

Here is a Dockerfile to reproduce this:

FROM emscripten/emsdk:3.1.52
# this works:
#FROM emscripten/emsdk:3.1.51

WORKDIR /src

RUN apt-get update && apt-get install -y libdigest-sha3-perl

# pull sources
RUN wget https://github.com/sql-js/sql.js/archive/d58d741189660f64555a603fbebfe4fae6a121bd.zip \
  && unzip d58d741189660f64555a603fbebfe4fae6a121bd.zip

# build sql.js
RUN cd /src/sql.js-d58d741189660f64555a603fbebfe4fae6a121bd \
  && npm i \
  && MAKEFLAGS="-j8" npm run build
@lovasoa
Copy link
Member

lovasoa commented Jul 29, 2024

Thanks for raising this !

Can you open a pr where you rename the .bc to .a in https://github.com/sql-js/sql.js/blob/master/Makefile and update emscripten in https://github.com/sql-js/sql.js/blob/master/.devcontainer/Dockerfile#L27 ?

@cxcorp
Copy link
Contributor Author

cxcorp commented Jul 29, 2024

I've opened #589 which seems to compile and pass the repo's tests.

.a didn't work but .o worked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants