open-quantum-safe / liboqs-rust

Rust bindings for liboqs
https://openquantumsafe.org/
Apache License 2.0
117 stars 47 forks source link

Compiling fails when encountering new compiler warnings #199

Closed bwesterb closed 1 year ago

bwesterb commented 1 year ago

Using

oqs = { version="0.7.2", default-features = false, features = ["kyber"] }

I get when building

   Compiling oqs-sys v0.7.2
error: failed to run custom build command for `oqs-sys v0.7.2`

Caused by:
  process didn't exit successfully: `/Users/bas/scm/rust-hpke/target/debug/build/oqs-sys-450355f50f2b9656/build-script-build` (exit status: 101)
  --- stdout
  CMAKE_TOOLCHAIN_FILE_x86_64-apple-darwin = None
  CMAKE_TOOLCHAIN_FILE_x86_64_apple_darwin = None
  HOST_CMAKE_TOOLCHAIN_FILE = None
  CMAKE_TOOLCHAIN_FILE = None
  CMAKE_GENERATOR_x86_64-apple-darwin = None
  CMAKE_GENERATOR_x86_64_apple_darwin = None
  HOST_CMAKE_GENERATOR = None
  CMAKE_GENERATOR = None
  CMAKE_PREFIX_PATH_x86_64-apple-darwin = None
  CMAKE_PREFIX_PATH_x86_64_apple_darwin = None
  HOST_CMAKE_PREFIX_PATH = None
  CMAKE_PREFIX_PATH = None
  CMAKE_x86_64-apple-darwin = None
  CMAKE_x86_64_apple_darwin = None
  HOST_CMAKE = None
  CMAKE = None
  running: "cmake" "/Users/bas/.cargo/registry/src/github.com-1ecc6299db9ec823/oqs-sys-0.7.2/liboqs" "-DCMAKE_OSX_ARCHITECTURES=x86_64" "-DOQS_BUILD_ONLY_LIB=Yes" "-DOQS_DIST_BUILD=Yes" "-DOQS_ENABLE_KEM_BIKE=No" "-DOQS_ENABLE_KEM_CLASSIC_MCELIECE=No" "-DOQS_ENABLE_KEM_FRODOKEM=No" "-DOQS_ENABLE_KEM_HQC=No" "-DOQS_ENABLE_KEM_KYBER=Yes" "-DOQS_ENABLE_KEM_NTRU=No" "-DOQS_ENABLE_KEM_NTRUPRIME=No" "-DOQS_ENABLE_KEM_SABER=No" "-DOQS_ENABLE_KEM_SIDH=No" "-DOQS_ENABLE_KEM_SIKE=No" "-DOQS_ENABLE_SIG_DILITHIUM=No" "-DOQS_ENABLE_SIG_FALCON=No" "-DOQS_ENABLE_SIG_PICNIC=No" "-DOQS_ENABLE_SIG_RAINBOW=No" "-DOQS_ENABLE_SIG_SPHINCS=No" "-DOQS_USE_OPENSSL=No" "-DCMAKE_INSTALL_PREFIX=/Users/bas/scm/rust-hpke/target/debug/build/oqs-sys-d30719a70bf74e8d/out" "-DCMAKE_C_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64 -arch x86_64" "-DCMAKE_C_COMPILER=/usr/bin/cc" "-DCMAKE_CXX_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64 -arch x86_64" "-DCMAKE_CXX_COMPILER=/usr/bin/c++" "-DCMAKE_ASM_FLAGS= -ffunction-sections -fdata-sections -fPIC -m64 -arch x86_64" "-DCMAKE_ASM_COMPILER=/usr/bin/cc" "-DCMAKE_BUILD_TYPE=Release"
  -- Configuring done (0.1s)
  -- Generating done (0.3s)
  -- Build files have been written to: /Users/bas/scm/rust-hpke/target/debug/build/oqs-sys-d30719a70bf74e8d/out/build
  running: "cmake" "--build" "." "--target" "oqs" "--config" "Release"
  [  0%] Built target xkcp_low_keccakp_1600_plain64
  [  1%] Built target xkcp_low_keccakp_1600_avx2
  [  1%] Building C object src/kem/kyber/CMakeFiles/kyber_1024_90s_avx2.dir/pqcrystals-kyber_kyber1024-90s_avx2/indcpa.c.o
  [  1%] Building C object src/common/CMakeFiles/common.dir/aes/aes.c.o
  [  2%] Built target xkcp_low_keccakp_1600times4_avx2
  [  3%] Built target xkcp_low_keccakp_1600times4_serial
  [  4%] Building C object src/kem/kyber/CMakeFiles/kyber_512_ref.dir/kem_kyber_512.c.o
  [  5%] Building ASM object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/basemul.S.o
  [  5%] Building C object src/kem/kyber/CMakeFiles/kyber_512_ref.dir/pqcrystals-kyber_kyber512_ref/cbd.c.o
  [  6%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/cbd.c.o
  [  7%] Building C object src/kem/kyber/CMakeFiles/kyber_768_ref.dir/kem_kyber_768.c.o
  [  8%] Building ASM object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/basemul.S.o
  [  9%] Building C object src/common/CMakeFiles/common.dir/aes/aes_c.c.o
  [  9%] Building C object src/kem/kyber/CMakeFiles/kyber_1024_90s_avx2.dir/pqcrystals-kyber_kyber1024-90s_avx2/kem.c.o
  [ 10%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/cbd.c.o
  [ 10%] Building C object src/common/CMakeFiles/common.dir/aes/aes128_ni.c.o
  [ 11%] Building C object src/common/CMakeFiles/common.dir/aes/aes256_ni.c.o
  [ 11%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/consts.c.o
  [ 12%] Building C object src/kem/kyber/CMakeFiles/kyber_1024_90s_avx2.dir/pqcrystals-kyber_kyber1024-90s_avx2/poly.c.o
  [ 12%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/consts.c.o
  [ 13%] Building C object src/kem/kyber/CMakeFiles/kyber_1024_90s_avx2.dir/pqcrystals-kyber_kyber1024-90s_avx2/rejsample.c.o
  [ 14%] Building ASM object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/fq.S.o
  [ 15%] Building C object src/common/CMakeFiles/common.dir/sha2/sha2.c.o
  [ 16%] Building ASM object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/fq.S.o
  [ 16%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/indcpa.c.o
  [ 16%] Building C object src/common/CMakeFiles/common.dir/sha2/sha2_c.c.o
  [ 16%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/indcpa.c.o
  [ 17%] Building ASM object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/invntt.S.o
  [ 18%] Building C object src/common/CMakeFiles/common.dir/sha3/xkcp_sha3.c.o
  [ 19%] Building ASM object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/invntt.S.o
  [ 19%] Building C object src/common/CMakeFiles/common.dir/sha3/xkcp_sha3x4.c.o
  [ 20%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/kem.c.o
  [ 21%] Building C object src/common/CMakeFiles/common.dir/common.c.o
  [ 27%] Built target kyber_1024_90s_avx2
  [ 28%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/kem.c.o
  [ 28%] Building ASM object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/ntt.S.o
  [ 29%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/poly.c.o
  [ 30%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/polyvec.c.o
  [ 30%] Building ASM object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/ntt.S.o
  [ 31%] Building C object src/common/CMakeFiles/common.dir/pqclean_shims/nistseedexpander.c.o
  [ 31%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/rejsample.c.o
  [ 31%] Building C object src/common/CMakeFiles/common.dir/pqclean_shims/fips202.c.o
  [ 32%] Building ASM object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/shuffle.S.o
  [ 33%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/poly.c.o
  [ 34%] Building C object src/common/CMakeFiles/common.dir/pqclean_shims/fips202x4.c.o
  [ 35%] Building C object src/common/CMakeFiles/common.dir/rand/rand.c.o
  [ 36%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/polyvec.c.o
  [ 36%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/symmetric-shake.c.o
  [ 36%] Building C object src/common/CMakeFiles/common.dir/rand/rand_nist.c.o
  [ 36%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/rejsample.c.o
  [ 37%] Building C object src/kem/kyber/CMakeFiles/kyber_768_avx2.dir/pqcrystals-kyber_kyber768_avx2/verify.c.o
  [ 38%] Building ASM object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/shuffle.S.o
  [ 38%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/symmetric-shake.c.o
  [ 39%] Building C object src/kem/kyber/CMakeFiles/kyber_512_avx2.dir/pqcrystals-kyber_kyber512_avx2/verify.c.o
  [ 39%] Built target kyber_768_avx2
  [ 39%] Built target kyber_512_avx2
  [ 39%] Built target common

  --- stderr
  /Users/bas/.cargo/registry/src/github.com-1ecc6299db9ec823/oqs-sys-0.7.2/liboqs/src/kem/kyber/kem_kyber_512.c:9:31: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
  OQS_KEM *OQS_KEM_kyber_512_new() {
                                ^
                                 void
  1 error generated.
  make[3]: *** [src/kem/kyber/CMakeFiles/kyber_512_ref.dir/kem_kyber_512.c.o] Error 1
  make[3]: *** Waiting for unfinished jobs....
  /Users/bas/.cargo/registry/src/github.com-1ecc6299db9ec823/oqs-sys-0.7.2/liboqs/src/kem/kyber/kem_kyber_768.c:9:31: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
  OQS_KEM *OQS_KEM_kyber_768_new() {
                                ^
                                 void
  1 error generated.
  make[3]: *** [src/kem/kyber/CMakeFiles/kyber_768_ref.dir/kem_kyber_768.c.o] Error 1
  make[2]: *** [src/kem/kyber/CMakeFiles/kyber_768_ref.dir/all] Error 2
  make[2]: *** Waiting for unfinished jobs....
  make[2]: *** [src/kem/kyber/CMakeFiles/kyber_512_ref.dir/all] Error 2
  make[1]: *** [src/CMakeFiles/oqs.dir/rule] Error 2
  make: *** [oqs] Error 2
  thread 'main' panicked at '
  command did not execute successfully, got: exit status: 2

  build script failed, must exit now', /Users/bas/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.50/src/lib.rs:1098:5
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Rust version:

stable-x86_64-apple-darwin (default)
rustc 1.67.1 (d5a82bbd2 2023-02-07)
bwesterb commented 1 year ago

Fixed in main.

thomwiggers commented 1 year ago

This is kind of a problem with how liboqs ends up getting packaged, with all compiler errors turned on. I've opened https://github.com/open-quantum-safe/liboqs/issues/1432 to discuss this upstream.

thomwiggers commented 1 year ago

In the mean time, I need to consider if I want to set -Wno-error in build.rs...

cjpatton commented 1 year ago

I've encountered a similar problem even after checking out main (508a13c0) I'm using rust 1.69 on macOS (Apple Silicon).

oqs-sys = { git = "https://github.com/open-quantum-safe/liboqs-rust.git", branch = "main" }
oqs = { git = "https://github.com/open-quantum-safe/liboqs-rust.git", branch = "main", default-features = false, features = ["kyber", "std"] }
... snipped ...

  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_192s_simple_clean.dir/pqclean_sphincs-shake256-192s-simple_clean/utils.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256f_robust_clean.dir/pqclean_sphincs-shake256-256f-robust_clean/wots.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256f_simple_clean.dir/pqclean_sphincs-shake256-256f-simple_clean/utils.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256s_robust_clean.dir/pqclean_sphincs-shake256-256s-robust_clean/sign.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256f_simple_clean.dir/pqclean_sphincs-shake256-256f-simple_clean/wots.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256s_robust_clean.dir/pqclean_sphincs-shake256-256s-robust_clean/thash_shake256_robust.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_192s_simple_clean.dir/pqclean_sphincs-shake256-192s-simple_clean/wots.c.o
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256s_robust_clean.dir/pqclean_sphincs-shake256-256s-robust_clean/utils.c.o
  [100%] Built target sphincs_shake256_192s_robust_clean
  [100%] Building C object src/sig/sphincs/CMakeFiles/sphincs_shake256_256s_robust_clean.dir/pqclean_sphincs-shake256-256s-robust_clean/wots.c.o
  [100%] Built target sphincs_shake256_256f_robust_clean
  [100%] Built target sphincs_shake256_256f_simple_clean
  [100%] Built target sphincs_shake256_192s_simple_clean
  [100%] Built target sphincs_shake256_256s_robust_clean
  [100%] Building C object src/CMakeFiles/oqs.dir/kem/kem.c.o
  [100%] Building C object src/CMakeFiles/oqs.dir/sig/sig.c.o
  [100%] Linking C static library ../lib/liboqs.a
  [100%] Built target oqs
  cargo:root=/Users/christopherpatton/cf-repos/CRYPTO/rustls_pq/target/debug/build/oqs-sys-ec6822a9eb5cd43c/out
  cargo:rustc-link-lib=static=oqs
  cargo:rustc-link-search=native=/Users/christopherpatton/cf-repos/CRYPTO/rustls_pq/target/debug/build/oqs-sys-ec6822a9eb5cd43c/out/build/lib

  --- stderr
  CMake Warning:
    Manually-specified variables were not used by the project:

      CMAKE_CXX_COMPILER
      CMAKE_CXX_FLAGS

  /Users/christopherpatton/cf-repos/CRYPTO/rustls_pq/target/debug/build/oqs-sys-ec6822a9eb5cd43c/out/build/include/oqs/common.h:14:10: fatal error: 'stdlib.h' file not found
  thread 'main' panicked at 'Unable to generate bindings: ClangDiagnostic("/Users/christopherpatton/cf-repos/CRYPTO/rustls_pq/target/debug/build/oqs-sys-ec6822a9eb5cd43c/out/build/include/oqs/common.h:14:10: fatal error: 'stdlib.h' file not found\n")', /Users/christopherpatton/.cargo/git/checkouts/liboqs-rust-4f844d0c84f6a965/508a13c/oqs-sys/build.rs:33:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thomwiggers commented 1 year ago

/Users/christopherpatton/cf-repos/CRYPTO/rustls_pq/target/debug/build/oqs-sys-ec6822a9eb5cd43c/out/build/include/oqs/common.h:14:10: fatal error: 'stdlib.h' file not found

stdlib.h not found sounds a bit more significant...

thomwiggers commented 1 year ago

I'm afraid I will not have time to do anything for the next couple of days at least...

cjpatton commented 1 year ago

No worries!

cjpatton commented 1 year ago

I managed to resolve my specific issue by using homebrew's clang instead of Apple's (brew install llvm). It would be great to cut a release: I can get main to compile but not 0.7.2.

Lekensteyn commented 1 year ago

I managed to resolve my specific issue by using homebrew's clang instead of Apple's (brew install llvm). It would be great to cut a release: I can get main to compile but not 0.7.2.

That's odd. Like Thom said, something seems really wrong if stdlib.h cannot be found. Is it possible that you have not installed XCode Command Line Tools after upgrading your system? Normally xcode-select --install should work.

cjpatton commented 1 year ago

I tried deleting the xcode stuff and reinstalling, no dice. There is likely something going on with my environment that has nothing to do with liboqs :) In fact, the other day I ended up building clang version 12.0.0 from source and installing it, it's possible that has messed things up a bit. I am hopeless with macOS.

thomwiggers commented 1 year ago

Should be fixed by release 0.8.0