Is aubio cross-compilable for iPhone/Android/ARM? [closed]

二次信任 提交于 2019-12-06 04:17:36

问题


Anyone know of:

  1. A build of the Aubio library for iPhone/ARM processor?

  2. An intro-to-cross-compiling resource so I can try it myself?


回答1:


Try using the latest git:

$ git clone git://git.aubio.org/git/aubio
$ cd aubio/
$ ./waf configure build --with-target-platform ios



回答2:


I've succeeded in cross-compiling it without errors. I haven't tested the library itself, but the example executables seem to work, so that's a good sign!

The script I've put together (largely thanks to the invaluable information in this link) should work for a lot of other projects using Autotools (like Aubio's dependencies).

Note that both libsndfile and libsamplerate need a patch to cross-compile successfully, which I'm sure is ugly, but it works.

To use it, modify the script according to your system (should be pretty straightforward, I hope), download all the dependencies (listed in the build xxxxx lines at the end, your versions may vary) in the same directory as the script and run the script without arguments. At the end, everything should be inside the $SYS_ROOT directory.

Okay, the main dish is below :

#!/bin/bash

# Taken and improved from :
# http://cmumobileapps.com/2011/08/31/compiling-open-source-libraries-with-android-ndk-part-2

# The designation for the host, usually "linux-x86" for standard linuxes, and
# "darwin-x86" for OSX.
HOST="linux-x86"

# The target architecture. Here we're compiling for ARM using GCC 4.7 and
# platform version 14.
TARGET_ARCH="arm"
TARGET_HOST="arm-eabi"
TARGET_TOOLCHAIN="arm-linux-androideabi"
TARGET_GCC_VERSION="4.7"
TARGET_NDK_VERSION="14"

# Add the toolchain to the path to be able to use the ARM compiler.
export PATH="$ANDROID_NDK/toolchains/$TARGET_TOOLCHAIN-$TARGET_GCC_VERSION/prebuilt/$HOST/bin:$PATH"

# Where to find the platform-specific files?
export PLATFORM="$ANDROID_NDK/platforms/android-$TARGET_NDK_VERSION/arch-$TARGET_ARCH/"

# Where to copy the platform-specific files?
# Will be used later as the target system root for cross-compilation.
export SYS_ROOT="`pwd`/sysroot/"

# Executable names for the compilation toolchain
export CC="$TARGET_TOOLCHAIN-gcc --sysroot=$SYS_ROOT"
export CXX="$TARGET_TOOLCHAIN-g++ --sysroot=$SYS_ROOT"
export CPP="$TARGET_TOOLCHAIN-cpp --sysroot=$SYS_ROOT"
export LD="$TARGET_TOOLCHAIN-ld"
export AR="$TARGET_TOOLCHAIN-ar"
export RANLIB="$TARGET_TOOLCHAIN-ranlib"
export STRIP="$TARGET_TOOLCHAIN-strip"

# Add the STLPort library to the search path (needed for C++ files)
export CXXFLAGS="-I$ANDROID_NDK/sources/cxx-stl/stlport/stlport/"
export LDFLAGS="-L$ANDROID_NDK/sources/cxx-stl/stlport/libs/armeabi/ -lstlport_static"

# Where to install the cross-compiled packages?
# When running `make install`, all the files (executables, libraries,
# documentation,...) will be in this directory.
export INSTALL_DIR="$SYS_ROOT/usr/"

# Where will pkg-config look for information about installed packages?
export PKG_CONFIG_LIBDIR="$SYS_ROOT/usr/lib/pkgconfig/"

#################
# Configuration #
#################

# If the sysroot doesn't exist, create it and copy all the files from the NDK
# distribution.
if [[ ! -e "$SYS_ROOT" ]]; then
  echo "Creating sysroot [$SYS_ROOT]"
  cp -Rf "$PLATFORM" "$SYS_ROOT" || exit 2
fi

# If it doesn't exist, create the installation directory.
if [[ ! -e "$INSTALL_DIR" ]]; then
  echo "Creating installation directory [$INSTALL_DIR]"
  mkdir -p $INSTALL_DIR || exit 3
fi

###############
# Compilation #
###############

build() {
  # Change directory to the package directory (in argument)
  echo "Building $1"
  pushd $1

  # Clean things up (optional)
  make clean 1>/dev/null 2>&1

  # Configure the package
  ./configure --host=$TARGET_HOST LIBS="-lc -lgcc" --prefix=$INSTALL_DIR || exit 1

  # Compile
  make || exit 1

  # Install in $INSTALL_DIR
  make install || exit 1

  # Return to the original directory
  popd
}

# Build all things
build libogg-1.3.0
build libvorbis-1.3.3
build flac-1.2.1
build libsndfile-1.0.25-patch
build libsamplerate-0.1.8-patch
build fftw-3.3.3
build aubio-0.3.2

libsndfile patch

--- libsndfile-1.0.25/programs/sndfile-play.c   2012-12-31 17:03:34.289908113 +0100
+++ libsndfile-1.0.25-patch/programs/sndfile-play.c 2012-12-31 17:04:05.326412364 +0100
@@ -55,7 +55,7 @@
 #if defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__)
    #include    <fcntl.h>
    #include    <sys/ioctl.h>
-   #include    <sys/soundcard.h>
+   #include    <linux/soundcard.h>

 #elif (defined (__MACH__) && defined (__APPLE__))
    #include <Carbon.h>
--- libsndfile-1.0.25/src/sndfile.c 2012-12-31 17:03:34.343241171 +0100
+++ libsndfile-1.0.25-patch/src/sndfile.c   2013-01-01 18:53:37.436544846 +0100
@@ -309,7 +309,7 @@
 {  SF_PRIVATE  *psf ;

    /* Ultimate sanity check. */
-   assert (sizeof (sf_count_t) == 8) ;
+   /* assert (sizeof (sf_count_t) == 8) ; */

    if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
    {   sf_errno = SFE_MALLOC_FAILED ;

libsamplerate patch

--- libsamplerate-0.1.8/examples/audio_out.c    2011-07-13 01:57:31.000000000 +0200
+++ libsamplerate-0.1.8-patch/examples/audio_out.c  2013-01-01 17:24:58.257526888 +0100
@@ -44,7 +44,7 @@

 #include <fcntl.h>
 #include <sys/ioctl.h>
-#include <sys/soundcard.h>
+#include <linux/soundcard.h>

 #define    LINUX_MAGIC     MAKE_MAGIC ('L', 'i', 'n', 'u', 'x', 'O', 'S', 'S')



回答3:


Here is a build script that worked for me:

#! /bin/sh

"""
build the toold chain home with:
build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=../android-9-toolchain
"""

NDK_HOME=~/dev/SDKs/android-9-toolchain
set -x
set -e
export CC=$NDK_HOME/bin/arm-linux-androideabi-gcc
export CFLAGS=-I$NDK_HOME/include
export LDFLAGS="-L$NDK_HOME/lib"
export AR=$NDK_HOME/bin/arm-linux-androideabi-ar

./waf distclean
./waf configure --with-target-platform android --disable-jack
./waf build --verbose
./waf install --destdir dist-android

it will default to toolchain / gcc version 4.6, I changed this to 4.9 as that is the latest I have. it should pull down the libraries it needs to finish compiling

the main part of the script was kindly provided by Paul Brossier author of Aubio



来源:https://stackoverflow.com/questions/6791762/is-aubio-cross-compilable-for-iphone-android-arm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!