cpal icon indicating copy to clipboard operation
cpal copied to clipboard

Support for Cross-Compilation

Open lilianmoraru opened this issue 10 years ago • 4 comments

Currently cpal can't be cross-compiled for ARM(at least that's how I understand it). To compile alsa-sys for ARM I had to export 2 environment variables(after already having Rust and Cargo set to cross-compile), export PKG_CONFIG_PATH=$MY_ARM_SYSROOT/usr/lib/pkgconfig and export PKG_CONFIG_ALLOW_CROSS=1, after this I can compile alsa-sys, if I cd out into cpal and try to compile, I get this message:

src/alsa/mod.rs:1:1: 1:31 error: can't find crate for `alsa` [E0463]
src/alsa/mod.rs:1 extern crate alsa_sys as alsa;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
Could not compile `cpal`.

With --verbose:

       Fresh pkg-config v0.3.5
       Fresh lazy_static v0.1.15
       Fresh libc v0.1.10
       Fresh gcc v0.3.17
       Fresh winapi v0.2.4
   Compiling cpal v0.2.7 (file://$MY_HOME/Git/cpal)
     Running `rustc src/lib.rs --crate-name cpal --crate-type lib 
-C opt-level=3 
--out-dir $MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release 
--emit=dep-info,link --target arm-unknown-linux-gnueabi 
-C ar=arm-montavista-linux-gnueabi-ar 
-C linker=gcc-sysroot 
-L dependency=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release 
-L dependency=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps 
--extern libc=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/liblibc-144c435538abd757.rlib 
--extern ole32=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/libole32-5219fe2002394e46.rlib 
--extern winapi=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/libwinapi-21b078e9a1931364.rlib 
--extern lazy_static=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/liblazy_static-f3aa6dfcc7c157cc.rlib`
       Fresh ole32-sys v0.1.0
       Fresh ogg-sys v0.0.9
       Fresh vorbis-sys v0.0.8
       Fresh vorbisfile-sys v0.0.8
       Fresh vorbis v0.0.13
src/alsa/mod.rs:1:1: 1:31 error: can't find crate for `alsa` [E0463]
src/alsa/mod.rs:1 extern crate alsa_sys as alsa;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
Could not compile `cpal`.

Caused by:
  Process didn't exit successfully: `rustc src/lib.rs --crate-name cpal --crate-type lib 
-C opt-level=3 --out-dir $MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release 
--emit=dep-info,link --target arm-unknown-linux-gnueabi 
-C ar=arm-montavista-linux-gnueabi-ar -C linker=gcc-sysroot 
-L dependency=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release 
-L dependency=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps 
--extern libc=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/liblibc-144c435538abd757.rlib 
--extern ole32=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/libole32-5219fe2002394e46.rlib 
--extern winapi=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/libwinapi-21b078e9a1931364.rlib 
--extern lazy_static=$MY_HOME/Git/cpal/target/arm-unknown-linux-gnueabi/release/deps/liblazy_static-f3aa6dfcc7c157cc.rlib` (exit code: 101)

Observe that it doesn't seem to link alsa... Note that compiling any other Rust application that doesn't have bindings to C libraries works just fine.

lilianmoraru avatar Oct 05 '15 11:10 lilianmoraru

Cpal's Cargo.toml should be fixed to depend on alsa-sys for ARM as well: https://github.com/tomaka/cpal/blob/master/Cargo.toml

Unfortunately Cargo doesn't allow wildcards in the target names.

cc #43

tomaka avatar Oct 05 '15 11:10 tomaka

I was actually trying to compile rodio but it could not compile capl ... -> alsa-sys... :) I think I will make rodio link the locally compiled capl(I used paths = ["path/to/capl", "path/to/capl/alsa-sys"] in .cargo/config).

You definitely can't start guessing every target there is :)

lilianmoraru avatar Oct 05 '15 12:10 lilianmoraru

Hey, has anyone been able to compile cpal for ARM? If so how can I make it work? Do I have to make a custom build of ALSA or something? I'm trying to build cpal in termux by the way, incase I'm unaware that cpal can be compiled for ARM elsewhere?

toastmod avatar Feb 14 '20 15:02 toastmod

I am also trying to get this to compile for aarch64 ARM (Android) via Termux. The build only fails to compile jni, I dont think we can run this Java-binding due to our architecture, I take it this a dependency for oboe/Android? Can it be compiled without jni? if not, is it possible to include ARM binaries for us pre-compiled by yourselves?

THANK YOU!

nerd190 avatar Feb 24 '21 23:02 nerd190