revm icon indicating copy to clipboard operation
revm copied to clipboard

[wasm] on windows fail to build cpp lib

Open rakita opened this issue 4 years ago • 3 comments

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"

rakita avatar Oct 30 '21 22:10 rakita

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

shekhirin avatar Nov 06 '21 13:11 shekhirin

This should no longer be a problem when compiling without default features and using the K256 features?

gakonst avatar Mar 01 '22 07:03 gakonst

Yep i think it is solved with k256. Would recomend using k256.

rakita avatar Mar 01 '22 09:03 rakita

solved by k256

rakita avatar Sep 07 '23 12:09 rakita