jguhlin / minimap2-rs

Rust bindings to minimap2 library
Other
60 stars 13 forks source link

cross compiling to linux android #66

Open jianshu93 opened 1 month ago

jianshu93 commented 1 month ago

Hi @jguhlin,

I am not sure whether this is interesting to others but I want to report here. I was trying to import and compile many Rust software packages to Linux-based android device so that we can run them on phones for a mobile bioinformatic era (CPU for phones are now quite powerful, like SnapDragon 3 generation). For pure Rust based packages, I have no problems for example, my GSearch crate, sourmash crate, rust-mDBG crate and many others. However, when I was trying to compiling minimap2-rs, there are tons of problems:

install android studio first and deploy it for rust in .bash_profile like this:

android compiling and ld library

export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang" export CXX_aarch64_linux_android="/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang++" export CC_aarch64_linux_android="/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang" export AR_aarch64_linux_android="/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"

$ rustup target add aarch64-linux-android $ cargo build --target aarch64-linux-android --release

error: linking with /Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang failed: exit status: 1 | = note: LC_ALL="C" PATH="/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/jianshuzhao/Github/SPAdes-4.0.0-Darwin/bin:/Users/jianshuzhao/.cargo/bin:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin:/Users/jianshuzhao/perl5/bin:/usr/local/bin:/opt/homebrew/bin:/Users/jianshuzhao/bin:/opt/homebrew/opt/bzip2/bin:/Users/jianshuzhao/Github/mummer-4.0.0beta5/bin:/Users/jianshuzhao/go/bin:/Users/jianshuzhao/Github/hmmer-3.4/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/openjdk/bin:/opt/homebrew/Cellar/coreutils/9.1/bin:/opt/homebrew/opt/ruby/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:/opt/X11/bin:/Library/TeX/texbin:/usr/local/go/bin" VSLANG="1033" "/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang" "-Wl,--version-script=/var/folders/mr/8qybn91j5fgdbrcdmq7ckftw0000gn/T/rustcOO9CIw/list" "-Wl,--no-undefined-version" "/var/folders/mr/8qybn91j5fgdbrcdmq7ckftw0000gn/T/rustcOO9CIw/symbols.o" "/Users/jianshuzhao/Github/minimap2-rs-test/target/aarch64-linux-android/release/deps/minimap2_sys-48223b1ce1d5498d.minimap2_sys.49addbfa3dae579b-cgu.0.rcgu.o" "/Users/jianshuzhao/Github/minimap2-rs-test/target/aarch64-linux-android/release/deps/minimap2_sys-48223b1ce1d5498d.035gy82oxncw2556qjxih17mk.rcgu.o" "-Wl,--as-needed" "-Wl,-Bdynamic" "-lm" "-lpthread" "-Wl,-Bstatic" "-llibminimap" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libstd-e8850eccf2f3dd32.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libpanic_unwind-a094c6be714bf5e8.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libobject-bd105c046d7d3f4a.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libmemchr-b65977fbd4d13b26.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libaddr2line-c59b235c1428dacb.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libgimli-4dc541cf9acc0f28.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/librustc_demangle-fcbcb6953c2582a4.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libstd_detect-a5c6c9bf9652d1e7.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libhashbrown-402a49b850a42e97.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_alloc-19962e45d6dd8556.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libminiz_oxide-778d7232beb22b27.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libadler-ce6b56ec013571c3.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libunwind-7757d29c205c9e38.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libcfg_if-439f5a2fb94b85f2.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/liblibc-cbc1d2077079a2d7.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/liballoc-cbbe8b3cfeaabbd2.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_core-d80ded003c259869.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libcore-556f2758be89c720.rlib" "/Users/jianshuzhao/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-linux-android/lib/libcompiler_builtins-bb1d92eb991222e1.rlib" "-Wl,-Bdynamic" "-ldl" "-llog" "-lunwind" "-ldl" "-lm" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/Users/jianshuzhao/Github/minimap2-rs-test/target/aarch64-linux-android/release/build/minimap2-sys-47359202de654a64/out" "-o" "/Users/jianshuzhao/Github/minimap2-rs-test/target/aarch64-linux-android/release/deps/libminimap2_sys-48223b1ce1d5498d.so" "-Wl,--gc-sections" "-shared" "-Wl,-soname=libminimap2_sys-48223b1ce1d5498d.so" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-Wl,--strip-debug" "-nodefaultlibs" = note: ld.lld: error: unable to find library -lpthread clang: error: linker command failed with exit code 1 (use -v to see invocation)

The following warnings were emitted during compilation:

warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument]

I can see that android clang does not support -lpthread, which is only for linux. However the android libc (bionic) does support many pthread functions: In Android, all pthread functionality is directly available through the Bionic libc without requiring explicit linking. This means that while you can use pthread functions like pthread_create or pthread_mutex_init, you don't add -lpthread to your linker flags.

I am wondering whther it is possible to add a conditional compiling for android devices so that -phthread is not used but it is actually functioning.

I also want to hear how @lh3 thinks, https://github.com/jguhlin/minimap2-rs/issues/63#issuecomment-2269003167_

Thanks,

Jianshu

jguhlin commented 1 month ago

@jianshu93 I've created an android branch, can you try to compile it and run tests?

minimap2-sys compiles just fine, but the main crate is complaining about missing libz.so, but I believe it is in the NDK (I'm just using cross to compile).

Let me know how you get on.

jianshu93 commented 1 month ago

Hi @jguhlin,

I just tested, it was successful. Maybe we need some code cleaning for the new Rust v1.82? I attached the building and test:

warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: minimap2-sys@0.1.19+minimap2.2.28: clang: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument] warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7242:10 7242 ) -> u128; ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
 = note: `#[warn(improper_ctypes)]` on by default
warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7787:18 7787 __value: u128, ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7795:18 7795 __value: u128, ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7803:18 7803 __value: u128, ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7830:18 7830 __value: u128, ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
warning: extern block uses type u128, which is not FFI-safe --> minimap2-sys/src/bindings.rs:7840:18 7840 __value: u128, ^^^^ not FFI-safe
 = note: 128-bit integers don't currently have a known stable ABI
warning: minimap2-sys (lib) generated 6 warnings Compiling minimap2 v0.1.20+minimap2.2.28 (/Users/jianshuzhao/minimap2-rs-android) warning: unused variable: aligner --> src/lib.rs:1145:13 1145 let aligner = jh.join().unwrap(); ^^^^^^^ help: if this is intentional, prefix it with an underscore: _aligner
 = note: `#[warn(unused_variables)]` on by default

warning: unused variable: jh0 --> src/lib.rs:1174:13 | 1174 | let jh0 = thread::spawn(move || { | ^^^ help: if this is intentional, prefix it with an underscore: _jh0

warning: unused variable: jh1 --> src/lib.rs:1182:13 | 1182 | let jh1 = thread::spawn(move || { | ^^^ help: if this is intentional, prefix it with an underscore: _jh1

warning: unused variable: results --> src/lib.rs:1220:13 | 1220 | let results = sequences | ^^^^^^^ help: if this is intentional, prefix it with an underscore: _results

warning: unused variable: x --> src/lib.rs:1240:13 | 1240 | let x: IdxOpt = Default::default(); | ^ help: if this is intentional, prefix it with an underscore: _x

warning: unused variable: x --> src/lib.rs:1245:13 | 1245 | let x: mm_mapopt_t = Default::default(); | ^ help: if this is intentional, prefix it with an underscore: _x

warning: unused variable: y --> src/lib.rs:1246:13 | 1246 | let y: MapOpt = Default::default(); | ^ help: if this is intentional, prefix it with an underscore: _y

warning: unused variable: aligner --> src/lib.rs:1259:13 | 1259 | let aligner = Aligner { | ^^^^^^^ help: if this is intentional, prefix it with an underscore: _aligner

warning: unused variable: result --> src/lib.rs:1271:13 | 1271 | let result = Aligner::builder(); | ^^^^^^ help: if this is intentional, prefix it with an underscore: _result

warning: unused variable: result --> src/lib.rs:1276:13 | 1276 | let result = Aligner::builder().preset(Preset::LrHq); | ^^^^^^ help: if this is intentional, prefix it with an underscore: _result

warning: unused variable: result --> src/lib.rs:1281:13 | 1281 | let result = Aligner::builder() | ^^^^^^ help: if this is intentional, prefix it with an underscore: _result

warning: value assigned to aligner is never read --> src/lib.rs:1308:9 1308 aligner = aligner ^^^^^^^
 = help: maybe it is overwritten before being read?
 = note: `#[warn(unused_assignments)]` on by default
warning: variable does not need to be mutable --> src/lib.rs:1346:13 1346 let mut aligner = aligner.with_cigar(); ----^^^^^^^
help: remove this mut
 = note: `#[warn(unused_mut)]` on by default

warning: unused variable: observed --> src/lib.rs:1486:13 | 1486 | let observed = mappings.pop().unwrap(); | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: _observed

warning: unused variable: aligner --> src/lib.rs:1751:13 | 1751 | let aligner = Aligner { | ^^^^^^^ help: if this is intentional, prefix it with an underscore: _aligner

warning: minimap2 (lib test) generated 15 warnings (run cargo fix --lib -p minimap2 --tests to apply 1 suggestion) Finished test profile [unoptimized + debuginfo] target(s) in 4.12s Running unittests src/lib.rs (target/debug/deps/minimap2-c3d14460ee9a74ce)

running 23 tests test tests::aligner_builder ... ok test tests::aligner_builder_preset ... ok test tests::aligner_builder_preset_with_threads ... ok test tests::aligner_build_manually ... ok test tests::does_it_work ... ok test tests::create_index_file_missing ... ok test tests::mapopt ... ok test tests::idxopt ... ok test tests::test_builder ... ok test tests::test_send ... ok test tests::test_strand_struct ... ok test tests::test_struct_config ... ok test tests::test_threadlocalbuffer ... ok test tests::create_index ... ok test tests::test_mappy_output_no_md ... ok test tests::test_mappy_output ... ok test tests::test_aligner_config_and_mapping ... ok test tests::test_with_seq ... ok test tests::test_aligner_struct ... ok test tests::shared_aligner ... ok test tests::test_mapping ... ok test tests::rayon ... ok test tests::aligner_between_threads ... ok

test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s

Doc-tests minimap2

running 23 tests test src/lib.rs - (line 22) - compile ... ok test src/lib.rs - Aligner::cdna (line 474) ... ok test src/lib.rs - Aligner::asm10 (line 385) ... ok test src/lib.rs - Aligner::ava_ont (line 447) ... ok test src/lib.rs - Aligner::asm (line 368) ... ok test src/lib.rs - Aligner (line 289) ... ok test src/lib.rs - Aligner::asm20 (line 393) ... ok test src/lib.rs - Aligner::ava_pb (line 438) ... ok test src/lib.rs - Aligner::asm5 (line 377) ... ok test src/lib.rs - Aligner::map10k (line 465) ... ok test src/lib.rs - (line 38) - compile ... ok test src/lib.rs - Aligner::map_hifi (line 420) ... ok test src/lib.rs - Aligner::splice (line 350) ... ok test src/lib.rs - Aligner::map_pb (line 411) ... ok test src/lib.rs - Aligner::splice_hq (line 359) ... ok test src/lib.rs - Aligner::with_index (line 562) ... ok test src/lib.rs - Aligner::sr (line 402) ... ok test src/lib.rs - Aligner::short (line 456) ... ok test src/lib.rs - Aligner::map_ont (line 429) ... ok test src/lib.rs - Aligner::with_index_threads (line 535) ... ok test src/lib.rs - Aligner::with_cigar (line 500) ... ok test src/lib.rs - Aligner::with_seq_and_id (line 666) ... ok test src/lib.rs - Aligner::with_seq (line 648) ... ok

test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.42s

Thanks so much! let me know how I can use it when adding to crate.io (e.g., a feature?)

Thanks,

Jianshu

jianshu93 commented 1 month ago

Hi @jguhlin,

Check this for compiling with easy: https://github.com/BrainiumLLC/cargo-mobile

I still manually setup android studio toolchain path but this may be more convenient.

Thanks,

Jianshu

jguhlin commented 1 month ago

@jianshu93 For now use the branch. Later it won't need a feature (probably). I don't want to merge this until I can get the tests to run using cross.

jianshu93 commented 1 month ago

Hi @jguhlin,

I forget to mention, you also need to configure the cargo configure file under ~/.cargo/config.toml:

[target.aarch64-linux-android] linker = "/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android35-clang" ar = "/Users/jianshuzhao/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"

Tell the linker to use android studio provided clang. Not sure how this can be integrated.

jianshu93 commented 1 month ago

Also, the test module, binary is for android, we cannot run the binary to test right. I ran cargo test --target aarch64-linux-android, it told me that the binary cannot be executed: Finished test profile [unoptimized + debuginfo] target(s) in 3.24s Running unittests src/lib.rs (target/aarch64-linux-android/debug/deps/minimap2-69620e4f80f97be4) /Users/jianshuzhao/Github/minimap2-rs-android/target/aarch64-linux-android/debug/deps/minimap2-69620e4f80f97be4: /Users/jianshuzhao/Github/minimap2-rs-android/target/aarch64-linux-android/debug/deps/minimap2-69620e4f80f97be4: cannot execute binary file error: test failed, to rerun pass --lib

Caused by: process didn't exit successfully: /Users/jianshuzhao/Github/minimap2-rs-android/target/aarch64-linux-android/debug/deps/minimap2-69620e4f80f97be4 (exit status: 126) note: test exited abnormally; to see the full output pass --nocapture to the harness.

Thanks,

Jianshu

jguhlin commented 1 month ago

@jianshu93

I've opened up a discussion on cross here: https://github.com/cross-rs/cross/discussions/1537

For not being able to run the binary, is it the same architecture? aarch64 and the machine you are running on? That's probably the error you are receiving. You could run qemu-aarch64 to emulate aarch64.

I'm using these commands to test:

cross test --target aarch64-unknown-linux-musl 
cross test --target x86_64-unknown-linux-musl
cross test --target aarch64-linux-android
cross test --target x86_64-linux-android
cross test --target armv7-linux-androideabi

The first two work, the rest do not. Hopefully someone will have some insight and we can merge into the main branch

It looks like cross does come with the NDK, so it should compile and run, but is having an issue finding the correct zlib.

jianshu93 commented 1 month ago

I am having an aarch64 macOS, not sure we can simulate a aarch64-Linux-android. I'm not succesful running the cross test:

Jianshus-MBP-2:minimap2-rs-android jianshuzhao$ cross test --target aarch64-linux-android [cross] warning: using newer rustc 1.82.0-nightly (8b3870784 2024-08-07) for the target. Current active rustc on the host is rustc 1.82.0-nightly (176e54520 2024-08-04).

Update with rustup update Trying to pull ghcr.io/cross-rs/aarch64-linux-android:0.2.5... Error: choosing an image from manifest list docker://ghcr.io/cross-rs/aarch64-linux-android:0.2.5: no image found in image index for architecture "arm64", variant "v8", OS "linux"

Jianshu

jguhlin commented 3 weeks ago

@jianshu93 Haven't had any luck figuring out a workaround with cross, but I've merged this branch into main for now. If it does work when you deploy it let me know and I'll make a note of it.