unum-cloud / usearch

Fast Open-Source Search & Clustering engine × for Vectors & 🔜 Strings × in C++, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolfram 🔍
https://unum-cloud.github.io/usearch/
Apache License 2.0
1.92k stars 109 forks source link

Usearch in Rust fails to compile for Android #443

Closed laurenspriem closed 1 week ago

laurenspriem commented 2 weeks ago

Describe the bug

I'm trying to compile some rust code that uses the usearch crate to the Android target, but compiling usearch to Android is giving errors. For more context, I'm trying to use the Rust bindings in combination with flutter_rust_bridge to bring usearch to Flutter.

Here are the full error logs:

error: failed to run custom build command for `usearch v2.12.0`

Caused by:
  process didn't exit successfully: `/home/laurens/dev/learn_rust/usearch_android_mre/target/release/build/usearch-f807330225ac66b6/build-script-build` (exit status: 101)
  --- stdout
  cargo:CXXBRIDGE_PREFIX=usearch
  cargo:CXXBRIDGE_DIR0=/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/include
  cargo:CXXBRIDGE_DIR1=/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/crate
  TARGET = Some("armv7-linux-androideabi")
  OPT_LEVEL = Some("3")
  HOST = Some("x86_64-unknown-linux-gnu")
  cargo:rerun-if-env-changed=CXX_armv7-linux-androideabi
  CXX_armv7-linux-androideabi = Some("/home/laurens/Android/Sdk/ndk/26.0.10792818/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  cargo:rerun-if-env-changed=CXXFLAGS_armv7-linux-androideabi
  CXXFLAGS_armv7-linux-androideabi = Some("--target=armv7a-linux-androideabi21")
  cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:52:9: warning: 'SIMSIMD_DYNAMIC_DISPATCH' macro redefined [-Wmacro-redefined]
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 0
  cargo:warning=        ^
  cargo:warning=<command line>:5:9: note: previous definition is here
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 1
  cargo:warning=        ^
  cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:588:25: error: use of undeclared identifier 'aligned_alloc'
  cargo:warning=        return (pointer)aligned_alloc(alignment, length_bytes);
  cargo:warning=                        ^
  cargo:warning=1 warning and 1 error generated.
  cargo:warning=Failed to compile with all SIMD backends...cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:52:9: warning: 'SIMSIMD_DYNAMIC_DISPATCH' macro redefined [-Wmacro-redefined]
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 0
  cargo:warning=        ^
  cargo:warning=<command line>:5:9: note: previous definition is here
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 1
  cargo:warning=        ^
  cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:588:25: error: use of undeclared identifier 'aligned_alloc'
  cargo:warning=        return (pointer)aligned_alloc(alignment, length_bytes);
  cargo:warning=                        ^
  cargo:warning=1 warning and 1 error generated.
  cargo:warning=Failed to compile after disabling SIMSIMD_TARGET_NEON, trying next configuration...
  cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:52:9: warning: 'SIMSIMD_DYNAMIC_DISPATCH' macro redefined [-Wmacro-redefined]
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 0
  cargo:warning=        ^
  cargo:warning=<command line>:5:9: note: previous definition is here
  cargo:warning=#define SIMSIMD_DYNAMIC_DISPATCH 1
  cargo:warning=        ^
  cargo:warning=In file included from /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc:1:
  cargo:warning=In file included from rust/lib.hpp:10:
  cargo:warning=In file included from include/usearch/index_dense.hpp:16:
  cargo:warning=include/usearch/index_plugins.hpp:588:25: error: use of undeclared identifier 'aligned_alloc'
  cargo:warning=        return (pointer)aligned_alloc(alignment, length_bytes);
  cargo:warning=                        ^
  cargo:warning=1 warning and 1 error generated.
  cargo:warning=Failed to compile after disabling SIMSIMD_TARGET_SVE, trying next configuration...

  --- stderr

  CXX include path:
    /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/include
    /home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/crate
  thread 'main' panicked at /home/laurens/.cargo/registry/src/index.crates.io-6f17d22bba15001f/usearch-2.12.0/build.rs:89:12:
  called `Result::unwrap()` on an `Err` value: Error { kind: ToolExecError, message: "Command \"/home/laurens/Android/Sdk/ndk/26.0.10792818/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++\" \"-O3\" \"-DANDROID\" \"-ffunction-sections\" \"-fdata-sections\" \"-fPIC\" \"--target=armv7-linux-androideabi\" \"-I\" \"/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/include\" \"-I\" \"/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/crate\" \"-I\" \"include\" \"-I\" \"rust\" \"-I\" \"fp16/include\" \"-I\" \"simsimd/include\" \"--target=armv7a-linux-androideabi21\" \"-Wno-unknown-pragmas\" \"-std=c++17\" \"-O3\" \"-ffast-math\" \"-fdiagnostics-color=always\" \"-g1\" \"-DUSEARCH_USE_OPENMP=0\" \"-DUSEARCH_USE_FP16LIB=0\" \"-DUSEARCH_USE_SIMSIMD=1\" \"-DSIMSIMD_DYNAMIC_DISPATCH=1\" \"-DSIMSIMD_NATIVE_F16=0\" \"-DSIMSIMD_TARGET_NEON=0\" \"-DSIMSIMD_TARGET_SVE=0\" \"-o\" \"/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/7fed01e8e2471f05-lib.rs.o\" \"-c\" \"/home/laurens/dev/learn_rust/usearch_android_mre/target/armv7-linux-androideabi/release/build/usearch-c1d06054759bde79/out/cxxbridge/sources/usearch/rust/lib.rs.cc\" with args clang++ did not execute successfully (status code exit status: 1)." }
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Steps to reproduce

Run cargo build --target=armv7-linux-androideabi --release in any rust project that uses usearch. I've created this repo as an mre.

Expected behavior

The code actually compiles without errors.

USearch version

v2.12.0

Operating System

Ubuntu 22.04

Hardware architecture

x86

Which interface are you using?

Other bindings

Contact Details

laurens@priem.email

Are you open to being tagged as a contributor?

Is there an existing issue for this?

Code of Conduct