mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-11-10 06:51:54 +00:00
Rewrite Android CI Pipeline (#875)
This commit is contained in:
parent
532c3e066f
commit
90a6c52e1c
4 changed files with 679 additions and 1 deletions
614
.azure/azure-pipelines-android.yml
Normal file
614
.azure/azure-pipelines-android.yml
Normal file
|
@ -0,0 +1,614 @@
|
||||||
|
parameters:
|
||||||
|
- name: UseCache
|
||||||
|
displayName: Use Dependency Cache
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
values:
|
||||||
|
- true
|
||||||
|
- false
|
||||||
|
|
||||||
|
schedules:
|
||||||
|
- cron: "0 0 * * 1"
|
||||||
|
displayName: 'Weekly Monday Midnight build without caching'
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
always: true
|
||||||
|
|
||||||
|
variables:
|
||||||
|
ICONV_VERSION: '1.16'
|
||||||
|
# Use recent master libffi, because 3.3 is broken: checking host system type... Invalid configuration `arm-none-linux-eabi': machine `arm-none-linux' not recognized
|
||||||
|
FFI_VERSION: 'dd5bd03075149d7cf8441875c1a344e8beb57dde'
|
||||||
|
GETTEXT_VERSION: '0.21'
|
||||||
|
#need to switch to meson build system to use a more recent version
|
||||||
|
GLIB_VERSION: '2.58'
|
||||||
|
GLIB_EXTRAVERSION: '3'
|
||||||
|
OBOE_VERSION: '1.5.0'
|
||||||
|
SNDFILE_VERSION: '1.0.31'
|
||||||
|
INSTPATCH_VERSION: '1.1.6'
|
||||||
|
VORBIS_VERSION: '1.3.7'
|
||||||
|
OGG_VERSION: '1.3.4'
|
||||||
|
# flac 1.3.3 is completely broken: pkgconfig is incorrectly installed, compilation failure, etc.; use recent master instead
|
||||||
|
FLAC_VERSION: '27c615706cedd252a206dd77e3910dfa395dcc49'
|
||||||
|
|
||||||
|
# Android NDK sources and standalone toolchain is put here
|
||||||
|
DEV: '$(System.DefaultWorkingDirectory)/android-build-root'
|
||||||
|
|
||||||
|
# This is a symlink pointing to the real Android NDK
|
||||||
|
# Must be the same as $ANDROID_NDK_HOME see:
|
||||||
|
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md
|
||||||
|
NDK: '/usr/local/lib/android/sdk/ndk-bundle'
|
||||||
|
|
||||||
|
# All the built binaries, libs and their headers will be installed here
|
||||||
|
PREFIX: '$(DEV)/opt/android'
|
||||||
|
|
||||||
|
# The path of standalone NDK toolchain
|
||||||
|
# Refer to https://developer.android.com/ndk/guides/standalone_toolchain.html
|
||||||
|
NDK_TOOLCHAIN: '$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/'
|
||||||
|
|
||||||
|
# Don't mix up .pc files from your host and build target
|
||||||
|
PKG_CONFIG_PATH: '$(PREFIX)/lib/pkgconfig'
|
||||||
|
# setting PKG_CONFIG_PATH alone does not seem to be enough to avoid mixing up with the host, also set PKG_CONFIG_LIBDIR
|
||||||
|
PKG_CONFIG_LIBDIR: '$(PKG_CONFIG_PATH)'
|
||||||
|
|
||||||
|
# Set Android target API level
|
||||||
|
# when compiling with clang use at least 28 as this makes sure that android provides the posix_spawn functions, so the compilation of gettext will (should) work out of the box
|
||||||
|
# it's probably a bug of gettext, if posix_spawn is not available it replaces it with its own implementation. Autotools of gettext set HAVE_POSIX_SPAWN==0 (which is correct) but for some reason REPLACE_POSIX_SPAWN==0 (which is wrong, as it should be 1).
|
||||||
|
#
|
||||||
|
# NOTE: API 24 is required because it provides fseeko() and ftello() required by libflac
|
||||||
|
ANDROID_API: '24'
|
||||||
|
|
||||||
|
# Tell configure what flags Android requires.
|
||||||
|
# Turn Wimplicit-function-declaration into errors. Else autotools will be fooled when checking for available functions (that in fact are NOT available) and compilation will fail later on.
|
||||||
|
# Also disable clangs integrated assembler, as the hand written assembly of libffi is not recognized by it, cf. https://crbug.com/801303
|
||||||
|
CFLAGS: "-fPIE -fPIC -I$(PREFIX)/include --sysroot=$(NDK_TOOLCHAIN)/sysroot -I$(NDK_TOOLCHAIN)/sysroot/usr/include -Werror=implicit-function-declaration -fno-integrated-as"
|
||||||
|
CXXFLAGS: $(CFLAGS)
|
||||||
|
CPPFLAGS: $(CXXFLAGS)
|
||||||
|
|
||||||
|
ARTIFACT_NAME: 'fluidsynth-android$(ANDROID_API)'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- job: Android
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
ARM:
|
||||||
|
ARCH: 'arm'
|
||||||
|
ANDROID_ARCH: 'armv7a'
|
||||||
|
ANDROID_ABI_CMAKE: 'armeabi-v7a'
|
||||||
|
ANDROID_TARGET_ABI: "eabi"
|
||||||
|
# the --target to be used by autotools
|
||||||
|
#AUTOTOOLS_TARGET: "$(ARCH)-linux-android$(ANDROID_TARGET_ABI)"
|
||||||
|
AUTOTOOLS_TARGET: "$(ARCH)-none-linux-$(ANDROID_TARGET_ABI)"
|
||||||
|
AARCH64:
|
||||||
|
ARCH: 'aarch64'
|
||||||
|
ANDROID_ARCH: 'aarch64'
|
||||||
|
ANDROID_ABI_CMAKE: 'arm64-v8a'
|
||||||
|
ANDROID_TARGET_ABI:
|
||||||
|
#AUTOTOOLS_TARGET: "$(ARCH)-none-linux-android"
|
||||||
|
AUTOTOOLS_TARGET: "$(ARCH)-none-linux"
|
||||||
|
i686:
|
||||||
|
ARCH: 'i686'
|
||||||
|
ANDROID_ARCH: 'i686'
|
||||||
|
ANDROID_ABI_CMAKE: 'x86'
|
||||||
|
ANDROID_TARGET_ABI:
|
||||||
|
#AUTOTOOLS_TARGET: "$(ARCH)-pc-linux-android"
|
||||||
|
AUTOTOOLS_TARGET: "$(ARCH)-pc-linux"
|
||||||
|
x86_64:
|
||||||
|
ARCH: 'x86_64'
|
||||||
|
ANDROID_ARCH: 'x86_64'
|
||||||
|
ANDROID_ABI_CMAKE: 'x86_64'
|
||||||
|
ANDROID_TARGET_ABI:
|
||||||
|
#AUTOTOOLS_TARGET: "$(ARCH)-pc-linux-android"
|
||||||
|
AUTOTOOLS_TARGET: "$(ARCH)-pc-linux"
|
||||||
|
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-20.04'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p $(DEV)
|
||||||
|
displayName: 'mkdir $(DEV)'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz
|
||||||
|
tar zxf libiconv-${ICONV_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget -O libffi-${FFI_VERSION}.tar.gz https://github.com/libffi/libffi/archive/${FFI_VERSION}.tar.gz
|
||||||
|
tar zxf libffi-${FFI_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-${GETTEXT_VERSION}.tar.gz
|
||||||
|
tar zxf gettext-${GETTEXT_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget http://ftp.gnome.org/pub/gnome/sources/glib/${GLIB_VERSION}/glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}.tar.xz
|
||||||
|
tar xf glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}.tar.xz
|
||||||
|
|
||||||
|
wget -O oboe-${OBOE_VERSION}.tar.gz https://github.com/google/oboe/archive/${OBOE_VERSION}.tar.gz
|
||||||
|
tar zxf oboe-${OBOE_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget https://github.com/libsndfile/libsndfile/releases/download/${SNDFILE_VERSION}/libsndfile-${SNDFILE_VERSION}.tar.bz2
|
||||||
|
tar jxf libsndfile-${SNDFILE_VERSION}.tar.bz2
|
||||||
|
|
||||||
|
wget -O libinstpatch-${INSTPATCH_VERSION}.tar.gz https://github.com/swami/libinstpatch/archive/refs/tags/v${INSTPATCH_VERSION}.tar.gz
|
||||||
|
tar zxf libinstpatch-${INSTPATCH_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget https://github.com/xiph/vorbis/releases/download/v${VORBIS_VERSION}/libvorbis-${VORBIS_VERSION}.tar.gz
|
||||||
|
tar zxf libvorbis-${VORBIS_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget https://github.com/xiph/ogg/releases/download/v${OGG_VERSION}/libogg-${OGG_VERSION}.tar.gz
|
||||||
|
tar zxf libogg-${OGG_VERSION}.tar.gz
|
||||||
|
|
||||||
|
wget -O flac-${FLAC_VERSION}.tar.gz https://github.com/xiph/flac/archive/${FLAC_VERSION}.tar.gz
|
||||||
|
tar xf flac-${FLAC_VERSION}.tar.gz
|
||||||
|
|
||||||
|
displayName: 'Download Dependencies'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: '$(ARCH) | $(DEV)/*.tar.gz | cacheVersion1'
|
||||||
|
path: '$(PREFIX)'
|
||||||
|
cacheHitVar: 'CACHE_RESTORED'
|
||||||
|
displayName: 'Cache fluidsynth dependency libraries'
|
||||||
|
condition: and(not(in(variables['Build.Reason'], 'Schedule')), ${{ parameters.useCache }})
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
sudo apt remove --purge --auto-remove cmake
|
||||||
|
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
|
||||||
|
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
|
||||||
|
displayName: 'Use recent CMake Version'
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
enabled: 'false'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
displayName: 'Update apt'
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
sudo -E apt-get -yq --no-install-suggests --no-install-recommends install gettext cmake zlib1g-dev autogen automake autoconf libtool pkg-config autotools-dev build-essential meson ninja-build
|
||||||
|
displayName: 'apt-get install'
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# The cross-compile toolchain we use
|
||||||
|
export ANDROID_TARGET=${ARCH}-linux-android${ANDROID_TARGET_ABI}
|
||||||
|
echo "##vso[task.setvariable variable=ANDROID_TARGET]$ANDROID_TARGET"
|
||||||
|
|
||||||
|
export ANDROID_TARGET_API=${ANDROID_ARCH}-linux-android${ANDROID_TARGET_ABI}${ANDROID_API}
|
||||||
|
echo "##vso[task.setvariable variable=ANDROID_TARGET_API]$ANDROID_TARGET_API"
|
||||||
|
|
||||||
|
# Add the standalone toolchain to the search path.
|
||||||
|
export PATH=$PATH:${PREFIX}/bin:${PREFIX}/lib:${PREFIX}/include:${NDK_TOOLCHAIN}/bin
|
||||||
|
echo "##vso[task.setvariable variable=PATH]$PATH"
|
||||||
|
|
||||||
|
LIBPATH0=$(PREFIX)/lib
|
||||||
|
LIBPATH1=$(NDK_TOOLCHAIN)/sysroot/usr/lib
|
||||||
|
LIBPATH2=$(NDK_TOOLCHAIN)/sysroot/usr/lib/$(ARCH)-linux-android$(ANDROID_TARGET_ABI)/$(ANDROID_API)
|
||||||
|
LIBPATH3=$(NDK_TOOLCHAIN)/sysroot/usr/lib/$(ARCH)-linux-android$(ANDROID_TARGET_ABI)
|
||||||
|
|
||||||
|
export LDFLAGS="-pie -Wl,-rpath-link=${LIBPATH1} -L${LIBPATH1} -Wl,-rpath-link=${LIBPATH2} -L${LIBPATH2} -Wl,-rpath-link=${LIBPATH3} -L${LIBPATH3} -Wl,-rpath-link=${LIBPATH0} -L${LIBPATH0}"
|
||||||
|
echo "##vso[task.setvariable variable=LDFLAGS]$LDFLAGS"
|
||||||
|
|
||||||
|
# Tell configure what tools to use.
|
||||||
|
export AR=${ANDROID_TARGET}-ar
|
||||||
|
echo "##vso[task.setvariable variable=AR]$AR"
|
||||||
|
export AS=${ANDROID_TARGET_API}-clang
|
||||||
|
echo "##vso[task.setvariable variable=AS]$AS"
|
||||||
|
export CC=${ANDROID_TARGET_API}-clang
|
||||||
|
echo "##vso[task.setvariable variable=CC]$CC"
|
||||||
|
export CXX=${ANDROID_TARGET_API}-clang++
|
||||||
|
echo "##vso[task.setvariable variable=CXX]$CXX"
|
||||||
|
export LD=ld.lld
|
||||||
|
echo "##vso[task.setvariable variable=LD]$LD"
|
||||||
|
export STRIP=${ANDROID_TARGET}-strip
|
||||||
|
echo "##vso[task.setvariable variable=STRIP]$STRIP"
|
||||||
|
export RANLIB=${ANDROID_TARGET}-ranlib
|
||||||
|
echo "##vso[task.setvariable variable=RANLIB]$RANLIB"
|
||||||
|
|
||||||
|
displayName: 'Set environment variables'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
pushd libiconv-${ICONV_VERSION}
|
||||||
|
./configure \
|
||||||
|
--host=${AUTOTOOLS_TARGET} \
|
||||||
|
--prefix=${PREFIX} \
|
||||||
|
--disable-rpath \
|
||||||
|
--disable-static \
|
||||||
|
--enable-shared \
|
||||||
|
--with-pic \
|
||||||
|
--disable-maintainer-mode \
|
||||||
|
--disable-silent-rules \
|
||||||
|
--disable-gtk-doc \
|
||||||
|
--disable-introspection \
|
||||||
|
--disable-nls
|
||||||
|
make -j$((`nproc`+1))
|
||||||
|
make install
|
||||||
|
popd
|
||||||
|
|
||||||
|
displayName: 'Compile libiconv'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
pushd libffi-${FFI_VERSION}
|
||||||
|
NOCONFIGURE=true autoreconf -v -i
|
||||||
|
# install headers into the conventional ${PREFIX}/include rather than ${PREFIX}/lib/libffi-3.2.1/include.
|
||||||
|
#sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' -i include/Makefile.in
|
||||||
|
#sed -e '/^includedir/ s/=.*$/=@includedir@/' -e 's/^Cflags: -I${includedir}/Cflags:/' -i libffi.pc.in
|
||||||
|
./configure --host=${AUTOTOOLS_TARGET} --prefix=${PREFIX} --enable-shared --disable-static
|
||||||
|
make -j$((`nproc`+1))
|
||||||
|
make install
|
||||||
|
popd
|
||||||
|
displayName: 'Compile libffi'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
export PKGCFG=`which pkg-config`
|
||||||
|
pushd glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}
|
||||||
|
|
||||||
|
cat << EOF > cross-file.txt
|
||||||
|
[host_machine]
|
||||||
|
system = 'android'
|
||||||
|
cpu_family = 'arm'
|
||||||
|
cpu = 'arm'
|
||||||
|
endian = 'little'
|
||||||
|
|
||||||
|
[binaries]
|
||||||
|
c = '${CC}'
|
||||||
|
cpp = '${CXX}'
|
||||||
|
ar = '${AR}'
|
||||||
|
ld = '${LD}'
|
||||||
|
strip = '${STRIP}'
|
||||||
|
pkgconfig = '${PKGCFG}'
|
||||||
|
|
||||||
|
[built-in options]
|
||||||
|
c_std = 'c11'
|
||||||
|
c_args = ['-fPIC','-I/home/git/work/ndk/builddir/out/include']
|
||||||
|
cpp_args = ['-fPIC','-I/home/git/work/ndk/builddir/out/include']
|
||||||
|
c_link_args = ['-fPIE','-L/home/git/work/ndk/builddir/out/lib']
|
||||||
|
|
||||||
|
pkg_config_path = '${PKG_CONFIG_PATH}'
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat << EOF > native-file.txt
|
||||||
|
[host_machine]
|
||||||
|
system = 'linux'
|
||||||
|
cpu_family = 'x86_64'
|
||||||
|
cpu = 'x86_64'
|
||||||
|
endian = 'little'
|
||||||
|
|
||||||
|
[properties]
|
||||||
|
|
||||||
|
[binaries]
|
||||||
|
c = ['false']
|
||||||
|
cpp = ['false']
|
||||||
|
objc = ['false']
|
||||||
|
objcpp = ['false']
|
||||||
|
ar = ['false']
|
||||||
|
pkgconfig = ['false']
|
||||||
|
cmake = ['false']
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat native-file.txt
|
||||||
|
cat cross-file.txt
|
||||||
|
|
||||||
|
unset AR
|
||||||
|
unset AS
|
||||||
|
unset CC
|
||||||
|
unset CFLAGS
|
||||||
|
unset CPPFLAGS
|
||||||
|
unset CPP
|
||||||
|
unset CXXFLAGS
|
||||||
|
unset CXX
|
||||||
|
unset LDFLAGS
|
||||||
|
unset LD
|
||||||
|
unset STRIP
|
||||||
|
|
||||||
|
meson \
|
||||||
|
--cross-file cross-file.txt \
|
||||||
|
--native-file native-file.txt \
|
||||||
|
--prefix=${PREFIX} \
|
||||||
|
--libdir=lib \
|
||||||
|
-Ddebug=false \
|
||||||
|
--default-library=both \
|
||||||
|
-Doptimization=s \
|
||||||
|
--backend=ninja \
|
||||||
|
--wrap-mode=nodownload \
|
||||||
|
-Dinternal_pcre=true \
|
||||||
|
-Dlibmount=false \
|
||||||
|
-Ddtrace=false \
|
||||||
|
-Diconv=auto \
|
||||||
|
-Dxattr=false \
|
||||||
|
-Dgtk_doc=false \
|
||||||
|
_builddir \
|
||||||
|
.
|
||||||
|
ninja
|
||||||
|
popd
|
||||||
|
displayName: 'Compile glib (meson)'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
enabled: 'false'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
pushd glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}
|
||||||
|
cat _builddir/meson-logs/meson-log.txt
|
||||||
|
popd
|
||||||
|
displayName: 'Meson LOG'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: failed()
|
||||||
|
enabled: 'false'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
pushd gettext-${GETTEXT_VERSION}
|
||||||
|
./configure \
|
||||||
|
--host=${AUTOTOOLS_TARGET} \
|
||||||
|
--prefix=${PREFIX} \
|
||||||
|
--disable-rpath \
|
||||||
|
--disable-libasprintf \
|
||||||
|
--disable-java \
|
||||||
|
--disable-native-java \
|
||||||
|
--disable-openmp \
|
||||||
|
--disable-curses \
|
||||||
|
--disable-static \
|
||||||
|
--enable-shared \
|
||||||
|
--with-pic \
|
||||||
|
--disable-maintainer-mode \
|
||||||
|
--disable-silent-rules \
|
||||||
|
--disable-gtk-doc \
|
||||||
|
--disable-introspection
|
||||||
|
make -j$((`nproc`+1))
|
||||||
|
make install
|
||||||
|
popd
|
||||||
|
displayName: 'Compile gettext'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
pushd glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}
|
||||||
|
cat << EOF > android.cache
|
||||||
|
glib_cv_long_long_format=ll
|
||||||
|
glib_cv_stack_grows=no
|
||||||
|
glib_cv_sane_realloc=yes
|
||||||
|
glib_cv_have_strlcpy=no
|
||||||
|
glib_cv_va_val_copy=yes
|
||||||
|
glib_cv_rtldglobal_broken=no
|
||||||
|
glib_cv_uscore=no
|
||||||
|
glib_cv_monotonic_clock=no
|
||||||
|
ac_cv_func_nonposix_getpwuid_r=no
|
||||||
|
ac_cv_func_posix_getpwuid_r=no
|
||||||
|
ac_cv_func_posix_getgrgid_r=no
|
||||||
|
glib_cv_use_pid_surrogate=yes
|
||||||
|
ac_cv_func_printf_unix98=no
|
||||||
|
ac_cv_func_vsnprintf_c99=yes
|
||||||
|
ac_cv_func_realloc_0_nonnull=yes
|
||||||
|
ac_cv_func_realloc_works=yes
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Unfortunately, libffi is not linked against libgobject when compiling for aarch64, leading to the following error:
|
||||||
|
#
|
||||||
|
# /bin/bash ../libtool --tag=CC --mode=link aarch64-linux-android23-clang -Wall -Wstrict-prototypes -Wno-bad-function-cast -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format=2 -Werror=missing-include-dirs -fPIE -fPIC -I/home/vsts/work/1/s/android-build-root/opt/android/include --sysroot=/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot -I/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/include -Werror=implicit-function-declaration -fno-integrated-as -fno-strict-aliasing -pie -Wl,-rpath-link=-I/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/usr/lib -L/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/usr/lib -L/home/vsts/work/1/s/android-build-root/opt/android/lib -L/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//lib -o gobject-query gobject-query.o ./libgobject-2.0.la ../glib/libglib-2.0.la -lintl -liconv
|
||||||
|
# libtool: link: aarch64-linux-android23-clang -Wall -Wstrict-prototypes -Wno-bad-function-cast -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format=2 -Werror=missing-include-dirs -fPIE -fPIC -I/home/vsts/work/1/s/android-build-root/opt/android/include --sysroot=/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot -I/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/include -Werror=implicit-function-declaration -fno-integrated-as -fno-strict-aliasing -pie -Wl,-rpath-link=-I/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/usr/lib -o .libs/gobject-query gobject-query.o -L/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//sysroot/usr/lib -L/home/vsts/work/1/s/android-build-root/opt/android/lib -L/usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//lib ./.libs/libgobject-2.0.so ../glib/.libs/libglib-2.0.so /home/vsts/work/1/s/android-build-root/opt/android/lib/libintl.so /home/vsts/work/1/s/android-build-root/opt/android/lib/libiconv.so -pthread -L/home/vsts/work/1/s/android-build-root/opt/android/lib
|
||||||
|
# /usr/local/lib/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64//bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: warning: libffi.so, needed by ./.libs/libgobject-2.0.so, not found (try using -rpath or -rpath-link)
|
||||||
|
# ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint32@LIBFFI_BASE_8.0'
|
||||||
|
# ./.libs/libgobject-2.0.so: undefined reference to `ffi_prep_cif@LIBFFI_BASE_8.0'
|
||||||
|
#
|
||||||
|
# So, just add it to LDFLAGS to make sure it's always linked.
|
||||||
|
# libz.so is also missing...
|
||||||
|
#FFILIB=`pkg-config --libs libffi`
|
||||||
|
#echo ${FFILIB}
|
||||||
|
#export LDFLAGS="${LDFLAGS} ${FFILIB} -lz"
|
||||||
|
#unset FFILIB
|
||||||
|
|
||||||
|
chmod a-x android.cache
|
||||||
|
NOCONFIGURE=true ./autogen.sh
|
||||||
|
./configure \
|
||||||
|
--host=${ANDROID_TARGET} \
|
||||||
|
--prefix=${PREFIX} \
|
||||||
|
--disable-dependency-tracking \
|
||||||
|
--cache-file=android.cache \
|
||||||
|
--enable-included-printf \
|
||||||
|
--with-pcre=no \
|
||||||
|
--enable-libmount=no \
|
||||||
|
--enable-xattr=no \
|
||||||
|
--with-libiconv=gnu \
|
||||||
|
--disable-static \
|
||||||
|
--enable-shared \
|
||||||
|
--with-pic \
|
||||||
|
--disable-maintainer-mode \
|
||||||
|
--disable-silent-rules
|
||||||
|
make -j$((`nproc`+1))
|
||||||
|
make install
|
||||||
|
popd
|
||||||
|
displayName: 'Compile glib'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'libogg-$(OGG_VERSION)'
|
||||||
|
cmakeArgs: '-DINSTALL_DOCS=0'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
ls -la libogg-${OGG_VERSION}/build/CMakeFiles/
|
||||||
|
cat libogg-${OGG_VERSION}/build/CMakeFiles/CMakeError.log
|
||||||
|
true
|
||||||
|
displayName: 'Print OGG Cmake Error Log'
|
||||||
|
condition: always()
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'libvorbis-$(VORBIS_VERSION)'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
ls -la libvorbis-${VORBIS_VERSION}/build/CMakeFiles/
|
||||||
|
cat libvorbis-${VORBIS_VERSION}/build/CMakeFiles/CMakeError.log
|
||||||
|
true
|
||||||
|
displayName: 'Print Vorbis Cmake Error Log'
|
||||||
|
condition: always()
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
|
||||||
|
# flac uses c99 macros, but doesnt specify a standard, so we need to do it explicitly.
|
||||||
|
# On i686, they invoke yasm with -fstack-protector-strong flag... turn off asm optimizations.
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'flac-$(FLAC_VERSION)'
|
||||||
|
cmakeArgs: '-DCMAKE_C_STANDARD=99 -DCMAKE_C_STANDARD_REQUIRED=1 -DWITH_ASM=0 -DBUILD_CXXLIBS=0 -DBUILD_PROGRAMS=0 -DBUILD_EXAMPLES=0 -DBUILD_DOCS=0 -DINSTALL_MANPAGES=0'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
ls -la flac-${FLAC_VERSION}/build/CMakeFiles/
|
||||||
|
cat flac-${FLAC_VERSION}/build/CMakeFiles/CMakeError.log
|
||||||
|
true
|
||||||
|
displayName: 'Print FLAC Cmake Error Log'
|
||||||
|
condition: always()
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'libsndfile-$(SNDFILE_VERSION)'
|
||||||
|
cmakeArgs: '-DBUILD_PROGRAMS=0 -DBUILD_EXAMPLES=0'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
ls -la libsndfile-${SNDFILE_VERSION}/build/CMakeFiles/
|
||||||
|
cat libsndfile-${SNDFILE_VERSION}/build/CMakeFiles/CMakeError.log
|
||||||
|
true
|
||||||
|
displayName: 'Print libsndfile Cmake Error Log'
|
||||||
|
condition: always()
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'oboe-$(OBOE_VERSION)'
|
||||||
|
installCommand: 'cp liboboe.* ${PREFIX}/lib/ && cp -ur ../include/oboe ${PREFIX}/include'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# create a custom pkgconfig file for oboe to allow fluidsynth to find it
|
||||||
|
cat << EOF > ${PKG_CONFIG_PATH}/oboe-1.0.pc
|
||||||
|
prefix=${PREFIX}
|
||||||
|
exec_prefix=\${prefix}
|
||||||
|
libdir=\${prefix}/lib
|
||||||
|
includedir=\${prefix}/include
|
||||||
|
|
||||||
|
Name: Oboe
|
||||||
|
Description: Oboe library
|
||||||
|
Version: ${OBOE_VERSION}
|
||||||
|
Libs: -L\${libdir} -loboe -landroid -llog
|
||||||
|
Cflags: -I\${includedir}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat ${PKG_CONFIG_PATH}/oboe-1.0.pc
|
||||||
|
|
||||||
|
displayName: 'Create fake oboe.pc'
|
||||||
|
workingDirectory: $(DEV)
|
||||||
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
sourceDir: 'libinstpatch-$(INSTPATCH_VERSION)'
|
||||||
|
|
||||||
|
# finally, compile fluidsynth
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
workDir: '$(System.DefaultWorkingDirectory)'
|
||||||
|
sourceDir: '.'
|
||||||
|
condition: succeeded()
|
||||||
|
cmakeArgs: '-Denable-opensles=1 -Denable-floats=1 -Denable-oboe=1 -Denable-dbus=0 -Denable-oss=0'
|
||||||
|
installCommand: ''
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -x
|
||||||
|
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(PREFIX)/lib:$(NDK_TOOLCHAIN)/sysroot/usr/lib/$(ARCH)-linux-android$(ANDROID_TARGET_ABI)/$(ANDROID_API)
|
||||||
|
pushd build
|
||||||
|
make -j$((`nproc`+1)) check
|
||||||
|
ldd test/test_sample_cache
|
||||||
|
popd
|
||||||
|
displayName: 'Execute fluidsynth unit test'
|
||||||
|
condition: and(succeeded(), in(variables['ARCH'], 'x86_64', 'i686'))
|
||||||
|
enabled: 'false'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
pushd build
|
||||||
|
make install
|
||||||
|
popd
|
||||||
|
displayName: 'Install fluidsynth'
|
||||||
|
|
||||||
|
- template: cmake-android.yml
|
||||||
|
parameters:
|
||||||
|
workDir: '$(System.DefaultWorkingDirectory)/doc/android/fluidsynth-assetloader/'
|
||||||
|
sourceDir: '.'
|
||||||
|
condition: succeeded()
|
||||||
|
installCommand: 'cp *.so ${PREFIX}/lib/'
|
||||||
|
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
ls -Rg $(PREFIX)
|
||||||
|
displayName: 'Show cross-compiled files in $(PREFIX)'
|
||||||
|
condition: always()
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p $(Build.ArtifactStagingDirectory)/$(ARCH)
|
||||||
|
cd $(Build.ArtifactStagingDirectory)/$(ARCH)
|
||||||
|
cp -a $(PREFIX)/lib/* .
|
||||||
|
ls -Rg .
|
||||||
|
rm -rf *.dll *.alias gettext/ libtextstyle.* *.a *.la
|
||||||
|
displayName: 'Collecting artifacts'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
ls libFLAC.so
|
||||||
|
ls libcharset.so
|
||||||
|
ls libffi.so
|
||||||
|
ls libfluidsynth-assetloader.so
|
||||||
|
ls libfluidsynth.so
|
||||||
|
ls libgio-2.0.so
|
||||||
|
ls libglib-2.0.so
|
||||||
|
ls libgmodule-2.0.so
|
||||||
|
ls libgobject-2.0.so
|
||||||
|
ls libgthread-2.0.so
|
||||||
|
ls libiconv.so
|
||||||
|
ls libinstpatch-1.0.so
|
||||||
|
ls libintl.so
|
||||||
|
ls liboboe.so
|
||||||
|
ls libogg.so
|
||||||
|
ls libsndfile.so
|
||||||
|
ls libvorbis.so
|
||||||
|
ls libvorbisenc.so
|
||||||
|
ls libvorbisfile.so
|
||||||
|
displayName: 'Verify all libs exist'
|
||||||
|
workingDirectory: '$(PREFIX)/lib'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Publishing Artefacts for Android API$(ANDROID_API) $(ARCH)'
|
||||||
|
inputs:
|
||||||
|
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
||||||
|
ArtifactName: '$(ARTIFACT_NAME)'
|
||||||
|
publishLocation: 'Container'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
# as very last step before creating the pipeline cache, remove fluidsynth
|
||||||
|
pushd build
|
||||||
|
make uninstall
|
||||||
|
popd
|
||||||
|
displayName: 'Uninstall fluidsynth'
|
57
.azure/cmake-android.yml
Normal file
57
.azure/cmake-android.yml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- name: cmakeArgs
|
||||||
|
type: string
|
||||||
|
default: ''
|
||||||
|
- name: sourceDir
|
||||||
|
type: string
|
||||||
|
default: ''
|
||||||
|
- name: workDir
|
||||||
|
type: string
|
||||||
|
default: $(DEV)
|
||||||
|
- name: condition
|
||||||
|
type: string
|
||||||
|
default: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
- name: installCommand
|
||||||
|
type: string
|
||||||
|
default: 'make install'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
pushd ${{ parameters.sourceDir }}
|
||||||
|
mkdir -p build
|
||||||
|
pushd build
|
||||||
|
|
||||||
|
# Invoke cmake in the most correctest way I've could find while try and erroring:
|
||||||
|
#
|
||||||
|
# The biggest pain point is that CMake does not seem to respect our existing cross compilation CFLAGS and LDFLAGS.
|
||||||
|
# Hence we are passing them manually, once via Android flags and once for "Required" flags. The latter is necessary
|
||||||
|
# to let cmake correctly probe for any existing header, function, library, etc.
|
||||||
|
# Watch out: Sometimes the flags are passed as ;-limited list!
|
||||||
|
cmake -G "Unix Makefiles" \
|
||||||
|
-DCMAKE_MAKE_PROGRAM=make \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${NDK}/build/cmake/android.toolchain.cmake \
|
||||||
|
-DANDROID_NATIVE_API_LEVEL=${ANDROID_API} \
|
||||||
|
-DANDROID_ABI=${ANDROID_ABI_CMAKE} \
|
||||||
|
-DANDROID_TOOLCHAIN=${CC} \
|
||||||
|
-DANDROID_NDK=${NDK} \
|
||||||
|
-DANDROID_COMPILER_FLAGS="${CFLAGS// /;}" \
|
||||||
|
-DANDROID_LINKER_FLAGS="${LDFLAGS// /;}" \
|
||||||
|
-DANDROID_STL="c++_shared" \
|
||||||
|
-DCMAKE_REQUIRED_FLAGS="${CFLAGS}" \
|
||||||
|
-DCMAKE_REQUIRED_LINK_OPTIONS="${LDFLAGS// /;}" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${PREFIX} \
|
||||||
|
-DCMAKE_STAGING_PREFIX=${PREFIX} \
|
||||||
|
-DCMAKE_VERBOSE_MAKEFILE=1 \
|
||||||
|
-DBUILD_SHARED_LIBS=1 \
|
||||||
|
-DLIB_SUFFIX="" \
|
||||||
|
${{ parameters.cmakeArgs }} ..
|
||||||
|
make -j$((`nproc`+1))
|
||||||
|
${{ parameters.installCommand }}
|
||||||
|
popd
|
||||||
|
popd
|
||||||
|
displayName: 'Compile ${{ parameters.sourceDir }}'
|
||||||
|
workingDirectory: ${{ parameters.workDir }}
|
||||||
|
condition: ${{ parameters.condition }}
|
|
@ -30,6 +30,7 @@ jobs:
|
||||||
working_directory: doc/android
|
working_directory: doc/android
|
||||||
command: |
|
command: |
|
||||||
export TERM=dumb
|
export TERM=dumb
|
||||||
|
export VERBOSE=1
|
||||||
echo Starting `nproc` parallel jobs
|
echo Starting `nproc` parallel jobs
|
||||||
make -f Makefile.android prepare
|
make -f Makefile.android prepare
|
||||||
- run:
|
- run:
|
||||||
|
@ -52,6 +53,11 @@ jobs:
|
||||||
working_directory: doc/android
|
working_directory: doc/android
|
||||||
command: |
|
command: |
|
||||||
ls -R
|
ls -R
|
||||||
|
mv ./external/cerbero/build/logs dist/
|
||||||
|
cp ./external/cerbero/build/sources/android_armv7/glib-2.62.6/_builddir/meson*.txt dist/armeabi-v7a/
|
||||||
|
cp ./external/cerbero/build/sources/android_arm64/glib-2.62.6/_builddir/meson*.txt dist/arm64-v8a/
|
||||||
|
cp ./external/cerbero/build/sources/android_x86/glib-2.62.6/_builddir/meson*.txt dist/x86/
|
||||||
|
cp ./external/cerbero/build/sources/android_x86_64/glib-2.62.6/_builddir/meson*.txt dist/x86_64/
|
||||||
- run:
|
- run:
|
||||||
name: Zip FluidSynth Android Distribution
|
name: Zip FluidSynth Android Distribution
|
||||||
working_directory: doc/android
|
working_directory: doc/android
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
| <img src="https://www.microsoft.com/windows/favicon.ico" height="25" alt=""> **Windows** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.Win?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=3&branchName=master) |
|
| <img src="https://www.microsoft.com/windows/favicon.ico" height="25" alt=""> **Windows** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.Win?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=3&branchName=master) |
|
||||||
| <img src="https://www.microsoft.com/windows/favicon.ico" height="25" alt=""> **Windows (vcpkg)** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.vcpkg?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=6&branchName=master) |
|
| <img src="https://www.microsoft.com/windows/favicon.ico" height="25" alt=""> **Windows (vcpkg)** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.vcpkg?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=6&branchName=master) |
|
||||||
| <img src="https://www.apple.com/favicon.ico" height="30" alt=""> **MacOSX** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.macOS?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=5&branchName=master) |
|
| <img src="https://www.apple.com/favicon.ico" height="30" alt=""> **MacOSX** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.macOS?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=5&branchName=master) |
|
||||||
| <img src="https://www.android.com/favicon.ico" height="30" alt=""> **Android** | [![CircleCI](https://circleci.com/gh/FluidSynth/fluidsynth/tree/master.svg?style=shield)](https://circleci.com/gh/FluidSynth/fluidsynth) |
|
| <img src="https://www.android.com/favicon.ico" height="30" alt=""> **Android** | [![Build Status](https://dev.azure.com/tommbrt/tommbrt/_apis/build/status/FluidSynth.fluidsynth.Android?branchName=master)](https://dev.azure.com/tommbrt/tommbrt/_build/latest?definitionId=4&branchName=master) |
|
||||||
|
| <img src="https://www.android.com/favicon.ico" height="30" alt=""> **Android** (legacy Cerbero) | [![CircleCI](https://circleci.com/gh/FluidSynth/fluidsynth/tree/master.svg?style=shield)](https://circleci.com/gh/FluidSynth/fluidsynth) |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue