revm
revm copied to clipboard
[wasm] on windows fail to build cpp lib
secp256k1-sys v0.4.1 fails to build on windows system while on linux it passes.
It seems that cc lib that builds cpp inside rust requires ar to create static lib and can't find anything on windows. Maybe solution is to switch to clang and use llvm-ar but unsure how exactly to do that inside cc. Either way, build works on linux (still need to check if it runs) and that is good enough, for windows development we can omit this lib and do stuff without it and build the binary for npm on linux system.
full log:
error: failed to run custom build command for `secp256k1-sys v0.4.1`
Caused by:
process didn't exit successfully: `C:\workspace\revm\target\release\build\secp256k1-sys-c1641b479eb0e1f1\build-script-build` (exit code: 1)
--- stdout
TARGET = Some("wasm32-unknown-unknown")
OPT_LEVEL = Some("3")
HOST = Some("x86_64-pc-windows-msvc")
CC_wasm32-unknown-unknown = None
CC_wasm32_unknown_unknown = None
TARGET_CC = None
CC = None
CFLAGS_wasm32-unknown-unknown = None
CFLAGS_wasm32_unknown_unknown = None
TARGET_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
DEBUG = Some("false")
CC_wasm32-unknown-unknown = None
CC_wasm32_unknown_unknown = None
TARGET_CC = None
CC = None
CFLAGS_wasm32-unknown-unknown = None
CFLAGS_wasm32_unknown_unknown = None
TARGET_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
running: "clang" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=wasm32-unknown-unknown" "-I" "depend/secp256k1/" "-I" "depend/secp256k1/include" "-I" "depend/secp256k1/src" "-I" "wasm-sysroot" "-Wall" "-Wextra" "-DSECP256K1_BUILD=1" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-DECMULT_GEN_PREC_BITS=4" "-DUSE_NUM_NONE=1" "-DUSE_FIELD_INV_BUILTIN=1" "-DUSE_SCALAR_INV_BUILTIN=1" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-o" "C:\\workspace\\revm\\target\\wasm32-unknown-unknown\\release\\build\\secp256k1-sys-10cb3e96267214b5\\out\\depend/secp256k1/contrib/lax_der_parsing.o" "-c" "depend/secp256k1/contrib/lax_der_parsing.c"
exit code: 0
running: "clang" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=wasm32-unknown-unknown" "-I" "depend/secp256k1/" "-I" "depend/secp256k1/include" "-I" "depend/secp256k1/src" "-I" "wasm-sysroot" "-Wall" "-Wextra" "-DSECP256K1_BUILD=1" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-DECMULT_GEN_PREC_BITS=4" "-DUSE_NUM_NONE=1" "-DUSE_FIELD_INV_BUILTIN=1" "-DUSE_SCALAR_INV_BUILTIN=1" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-o" "C:\\workspace\\revm\\target\\wasm32-unknown-unknown\\release\\build\\secp256k1-sys-10cb3e96267214b5\\out\\depend/secp256k1/src/secp256k1.o" "-c" "depend/secp256k1/src/secp256k1.c"
cargo:warning=depend/secp256k1/src/secp256k1.c:7:9: warning: 'SECP256K1_BUILD' macro redefined [-Wmacro-redefined]
cargo:warning=#define SECP256K1_BUILD
cargo:warning= ^
cargo:warning=<command line>:1:9: note: previous definition is here
cargo:warning=#define SECP256K1_BUILD 1
cargo:warning= ^
cargo:warning=In file included from depend/secp256k1/src/secp256k1.c:12:
cargo:warning=In file included from depend/secp256k1/src/assumptions.h:12:
cargo:warning=In file included from depend/secp256k1/src/util.h:16:
cargo:warning=wasm-sysroot\stdio.h:4:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_INT_SIZE = sizeof(int);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:5:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_INT_ALIGN = alignof(int);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:7:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_UNSIGNED_INT_SIZE = sizeof(unsigned int);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:8:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_UNSIGNED_INT_ALIGN = alignof(unsigned int);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:10:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_SIZE_T_SIZE = sizeof(size_t);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:11:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_SIZE_T_ALIGN = alignof(size_t);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:13:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_UNSIGNED_CHAR_SIZE = sizeof(unsigned char);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:14:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_UNSIGNED_CHAR_ALIGN = alignof(unsigned char);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:16:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_PTR_SIZE = sizeof(void*);
cargo:warning= ^
cargo:warning=wasm-sysroot\stdio.h:17:28: warning: 'extern' variable has an initializer [-Wextern-initializer]
cargo:warning=extern const unsigned char WASM32_PTR_ALIGN = alignof(void*);
cargo:warning= ^
cargo:warning=In file included from depend/secp256k1/src/secp256k1.c:17:
cargo:warning=In file included from depend/secp256k1/src/ecmult_impl.h:16:
cargo:warning=In file included from depend/secp256k1/src/ecmult.h:12:
cargo:warning=depend/secp256k1/src/scratch.h:24:38: warning: unused function 'rustsecp256k1_v0_4_1_scratch_create' [-Wunused-function]
cargo:warning=static rustsecp256k1_v0_4_1_scratch* rustsecp256k1_v0_4_1_scratch_create(const rustsecp256k1_v0_4_1_callback* error_callback, size_t max_size);
cargo:warning= ^
cargo:warning=depend/secp256k1/src/scratch.h:26:13: warning: unused function 'rustsecp256k1_v0_4_1_scratch_destroy' [-Wunused-function]
cargo:warning=static void rustsecp256k1_v0_4_1_scratch_destroy(const rustsecp256k1_v0_4_1_callback* error_callback, rustsecp256k1_v0_4_1_scratch* scratch);
cargo:warning= ^
cargo:warning=In file included from depend/secp256k1/src/secp256k1.c:17:
cargo:warning=depend/secp256k1/src/ecmult_impl.h:1035:12: warning: unused function 'rustsecp256k1_v0_4_1_ecmult_multi_var' [-Wunused-function]
cargo:warning=static int rustsecp256k1_v0_4_1_ecmult_multi_var(const rustsecp256k1_v0_4_1_callback* error_callback, const rustsecp256k1_v0_4_1_ecmult_context *ctx, rustsecp256k1_v0_4_1_scratch *scratch, rustsecp256k1_v0_4_1_gej *r, const rustsecp256k1_v0_4_1_scalar *inp_g_sc, rustsecp256k1_v0_4_1_ecmult_multi_callback cb, void *cbdata, size_t n) {
cargo:warning= ^
cargo:warning=depend/secp256k1/src/ecmult_impl.h:621:12: warning: unused function 'rustsecp256k1_v0_4_1_ecmult_strauss_batch_single' [-Wunused-function]
cargo:warning=static int rustsecp256k1_v0_4_1_ecmult_strauss_batch_single(const rustsecp256k1_v0_4_1_callback* error_callback, const rustsecp256k1_v0_4_1_ecmult_context *actx, rustsecp256k1_v0_4_1_scratch *scratch, rustsecp256k1_v0_4_1_gej *r, const rustsecp256k1_v0_4_1_scalar *inp_g_sc, rustsecp256k1_v0_4_1_ecmult_multi_callback cb, void *cbdata, size_t n) {
cargo:warning= ^
cargo:warning=depend/secp256k1/src/ecmult_impl.h:863:15: warning: unused function 'rustsecp256k1_v0_4_1_pippenger_scratch_size' [-Wunused-function]
cargo:warning=static size_t rustsecp256k1_v0_4_1_pippenger_scratch_size(size_t n_points, int bucket_window) {
cargo:warning= ^
cargo:warning=depend/secp256k1/src/ecmult_impl.h:944:12: warning: unused function 'rustsecp256k1_v0_4_1_ecmult_pippenger_batch_single' [-Wunused-function]
cargo:warning=static int rustsecp256k1_v0_4_1_ecmult_pippenger_batch_single(const rustsecp256k1_v0_4_1_callback* error_callback, const rustsecp256k1_v0_4_1_ecmult_context *actx, rustsecp256k1_v0_4_1_scratch *scratch, rustsecp256k1_v0_4_1_gej *r, const rustsecp256k1_v0_4_1_scalar *inp_g_sc, rustsecp256k1_v0_4_1_ecmult_multi_callback cb, void *cbdata, size_t n) {
cargo:warning= ^
cargo:warning=17 warnings generated.
exit code: 0
AR_wasm32-unknown-unknown = None
AR_wasm32_unknown_unknown = None
TARGET_AR = None
AR = None
CROSS_COMPILE = None
running: "ar" "cq" "C:\\workspace\\revm\\target\\wasm32-unknown-unknown\\release\\build\\secp256k1-sys-10cb3e96267214b5\\out\\libsecp256k1.a" "C:\\workspace\\revm\\target\\wasm32-unknown-unknown\\release\\build\\secp256k1-sys-10cb3e96267214b5\\out\\depend/secp256k1/contrib/lax_der_parsing.o" "C:\\workspace\\revm\\target\\wasm32-unknown-unknown\\release\\build\\secp256k1-sys-10cb3e96267214b5\\out\\depend/secp256k1/src/secp256k1.o"
--- stderr
error occurred: Failed to find tool. Is `ar` installed? (see https://github.com/alexcrichton/cc-rs#compile-time-requirements for help)
Error: Compiling your crate to WebAssembly failed
Caused by: failed to execute `cargo build`: exited with exit code: 101
full command: "cargo" "build" "--lib" "--release" "--target" "wasm32-unknown-unknown"
Same for macOS
➜ revmjs git:(main) ✗ cargo build --target wasm32-unknown-unknown
Compiling cc v1.0.71
Compiling secp256k1-sys v0.4.1
The following warnings were emitted during compilation:
warning: error: unable to create target: 'No available targets are compatible with triple "wasm32-unknown-unknown"'
warning: 1 error generated.
error: failed to run custom build command for `secp256k1-sys v0.4.1`
Caused by:
process didn't exit successfully: `/Users/shekhirin/Projects/revm/target/debug/build/secp256k1-sys-887b40d3ebd9727a/build-script-build` (exit status: 1)
--- stdout
TARGET = Some("wasm32-unknown-unknown")
OPT_LEVEL = Some("0")
HOST = Some("x86_64-apple-darwin")
CC_wasm32-unknown-unknown = None
CC_wasm32_unknown_unknown = None
TARGET_CC = None
CC = None
CFLAGS_wasm32-unknown-unknown = None
CFLAGS_wasm32_unknown_unknown = None
TARGET_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
DEBUG = Some("true")
CC_wasm32-unknown-unknown = None
CC_wasm32_unknown_unknown = None
TARGET_CC = None
CC = None
CFLAGS_wasm32-unknown-unknown = None
CFLAGS_wasm32_unknown_unknown = None
TARGET_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
running: "clang" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "--target=wasm32-unknown-unknown" "-I" "depend/secp256k1/" "-I" "depend/secp256k1/include" "-I" "depend/secp256k1/src" "-I" "wasm-sysroot" "-Wall" "-Wextra" "-DSECP256K1_BUILD=1" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-DECMULT_GEN_PREC_BITS=4" "-DUSE_NUM_NONE=1" "-DUSE_FIELD_INV_BUILTIN=1" "-DUSE_SCALAR_INV_BUILTIN=1" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-o" "/Users/shekhirin/Projects/revm/target/wasm32-unknown-unknown/debug/build/secp256k1-sys-82148963f7296c77/out/depend/secp256k1/contrib/lax_der_parsing.o" "-c" "depend/secp256k1/contrib/lax_der_parsing.c"
cargo:warning=error: unable to create target: 'No available targets are compatible with triple "wasm32-unknown-unknown"'
cargo:warning=1 error generated.
exit status: 1
--- stderr
error occurred: Command "clang" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "--target=wasm32-unknown-unknown" "-I" "depend/secp256k1/" "-I" "depend/secp256k1/include" "-I" "depend/secp256k1/src" "-I" "wasm-sysroot" "-Wall" "-Wextra" "-DSECP256K1_BUILD=1" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-DECMULT_GEN_PREC_BITS=4" "-DUSE_NUM_NONE=1" "-DUSE_FIELD_INV_BUILTIN=1" "-DUSE_SCALAR_INV_BUILTIN=1" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-o" "/Users/shekhirin/Projects/revm/target/wasm32-unknown-unknown/debug/build/secp256k1-sys-82148963f7296c77/out/depend/secp256k1/contrib/lax_der_parsing.o" "-c" "depend/secp256k1/contrib/lax_der_parsing.c" with args "clang" did not execute successfully (status code exit status: 1).
➜ revmjs git:(main) ✗ clang --version
Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: x86_64-apple-darwin21.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
This should no longer be a problem when compiling without default features and using the K256 features?
Yep i think it is solved with k256.
Would recomend using k256.
solved by k256