cpal
cpal copied to clipboard
Support for Cross-Compilation
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.
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
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 :)
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?
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!