polylabel-rs
polylabel-rs copied to clipboard
Put libc FFI behind feature flag
trafficstars
I depend on polylabel-rs from geoarrow-rs. While making updates to compile the geoarrow Python bindings for emscripten (for use in pyodide), I discovered that this crate can't compile for wasm32-unknown-emscripten.
Would you be able to separate out the FFI parts?
I see that libc is marked as optional = true but it still fails to compile with emcc:
pip install -U maturin pyodide-build
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
PYODIDE_EMSCRIPTEN_VERSION=$(pyodide config get emscripten_version)
./emsdk install ${PYODIDE_EMSCRIPTEN_VERSION}
./emsdk activate ${PYODIDE_EMSCRIPTEN_VERSION}
source emsdk_env.sh
RUSTUP_TOOLCHAIN=nightly cargo build --target wasm32-unknown-emscripten --no-default-features
Compiling polylabel v3.2.0 (/Users/kyle/github/urschrei/polylabel-rs)
error: linking with `emcc` failed: exit status: 1
|
= note: LC_ALL="C" PATH="/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/self-contained:/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/self-contained:/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/self-contained:/Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk:/Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk/upstream/emscripten:/Users/kyle/.pyenv/versions/3.11.8/bin:/opt/homebrew/Cellar/pyenv/2.3.36/libexec:/opt/homebrew/Cellar/pyenv/2.3.36/plugins/python-build/bin:/Users/kyle/local/micromamba/condabin:/Users/kyle/.pyenv/shims:/Users/kyle/.volta/bin:/Users/kyle/.pixi/bin:/Users/kyle/.local/bin:/Users/kyle/local/bin:/Users/kyle/local/miniconda/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Applications/quarto/bin:/Users/kyle/.cargo/bin:/Applications/iTerm.app/Contents/Resources/utilities:/opt/homebrew/opt/fzf/bin" VSLANG="1033" "emcc" "-s" "EXPORTED_FUNCTIONS=[]" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.3updejbntm9f1bllqn3417s95.rcgu.o" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.1kmycypubvsmlqpbfjkdqkmd3.rcgu.o" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libthiserror-4eb2ab3c336e3e20.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeo-f83f85fd5723ec26.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libfloat_next_after-d95b07f4974d6882.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libearcutr-8e20e222af4d53a1.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libitertools-beaceeb44a8c77b8.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libeither-467f114016b61c07.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libspade-81620635b86ab2ea.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libhashbrown-1ed1e51727433999.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libahash-744e4d13e3ede82d.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libonce_cell-d67ba89f4896de2e.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libcfg_if-51f29bf84becf9e5.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libzerocopy-b8d0bd450a6dc848.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liballocator_api2-934e9558dfb16a38.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeographiclib_rs-f4f163eaf006d06d.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liblibm-e90809c30a64b5e2.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/librobust-391a24fd2777e3db.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeo_types-79b0f057cf7967b4.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/librstar-cd4106b8263e5a6e.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libheapless-ab43586a410286d9.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libhash32-0de5b43fb8ad52f6.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libbyteorder-a107ce58b4f2da55.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libsmallvec-5003b6a2bb18a7cc.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libapprox-c3c1971ab039e689.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libnum_traits-217438d57356f072.rlib" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liblog-77cb2c38971b59ba.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-f71fa3f6a49bb3ab.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-f15382e092366651.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-1b2f74b68af910d9.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libstd_detect-f4c36649d621e7bc.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-316bb5c859b53a0e.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-801db24d35730e1d.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libminiz_oxide-1360b702a2f00a84.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libadler-3ec5ad6a74285da2.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-85a3af1fb20dba45.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-1039b6db9d3832c9.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-d7d2fad8088b6c38.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-449c1dc0c6df355b.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-0cd14f51a1ead17a.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-d474966f72a3fd37.rlib" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-42a4f2a021b8827a.rlib" "-l" "c" "-B/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/gcc-ld" "-B/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/gcc-ld" "-B/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/gcc-ld" "--target=wasm32-unknown-emscripten" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained" "-o" "/Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.wasm" "-O0" "-g" "-sABORTING_MALLOC=0"
= note: wasm-ld: error: /Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libstandalonewasm.a(__main_void.o): undefined symbol: main
emcc: error: '/Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk/upstream/bin/wasm-ld -o /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.wasm /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.3updejbntm9f1bllqn3417s95.rcgu.o /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/polylabel.1kmycypubvsmlqpbfjkdqkmd3.rcgu.o /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libthiserror-4eb2ab3c336e3e20.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeo-f83f85fd5723ec26.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libfloat_next_after-d95b07f4974d6882.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libearcutr-8e20e222af4d53a1.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libitertools-beaceeb44a8c77b8.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libeither-467f114016b61c07.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libspade-81620635b86ab2ea.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libhashbrown-1ed1e51727433999.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libahash-744e4d13e3ede82d.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libonce_cell-d67ba89f4896de2e.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libcfg_if-51f29bf84becf9e5.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libzerocopy-b8d0bd450a6dc848.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liballocator_api2-934e9558dfb16a38.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeographiclib_rs-f4f163eaf006d06d.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liblibm-e90809c30a64b5e2.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/librobust-391a24fd2777e3db.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libgeo_types-79b0f057cf7967b4.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/librstar-cd4106b8263e5a6e.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libheapless-ab43586a410286d9.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libhash32-0de5b43fb8ad52f6.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libbyteorder-a107ce58b4f2da55.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libsmallvec-5003b6a2bb18a7cc.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libapprox-c3c1971ab039e689.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/libnum_traits-217438d57356f072.rlib /Users/kyle/github/urschrei/polylabel-rs/target/wasm32-unknown-emscripten/debug/deps/liblog-77cb2c38971b59ba.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-f71fa3f6a49bb3ab.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-f15382e092366651.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-1b2f74b68af910d9.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libstd_detect-f4c36649d621e7bc.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-316bb5c859b53a0e.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-801db24d35730e1d.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libminiz_oxide-1360b702a2f00a84.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libadler-3ec5ad6a74285da2.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-85a3af1fb20dba45.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-1039b6db9d3832c9.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-d7d2fad8088b6c38.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-449c1dc0c6df355b.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-0cd14f51a1ead17a.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-d474966f72a3fd37.rlib /Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-42a4f2a021b8827a.rlib -lc-debug -L/Users/kyle/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained -L/Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten /Users/kyle/github/geoarrow/geoarrow-rs/python/core/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/crt1.o -lGL -lal -lhtml5 -lstandalonewasm -lstubs-debug -lc-debug -ldlmalloc -lcompiler_rt -lc++ -lc++abi-debug -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/42/5jr6891d4ds4xysz7q0rsghw0000gn/T/tmpfrnnygarlibemscripten_js_symbols.so --export-if-defined=__get_exception_message --export-if-defined=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=stackSave --export=stackRestore --export=stackAlloc --export=__errno_location --export=__cxa_is_pointer_type --export=__cxa_can_catch --export=__cxa_increment_exception_refcount --export=__cxa_decrement_exception_refcount --export=setThrew --export=__cxa_free_exception --export=__get_exception_message --export=free --export-table -z stack-size=65536 --initial-memory=16777216 --max-memory=16777216 --stack-first --table-base=1' failed (returned 1)