WIP: Glib building with meson for Android

This commit is contained in:
devingryu 2022-03-06 00:04:21 +09:00 committed by derselbst
parent 80611111e9
commit c88ed31585

View file

@ -17,7 +17,7 @@ parameters:
- name: UseCache
displayName: Use Dependency Cache
type: boolean
default: true
default: false
values:
- true
- false
@ -36,15 +36,16 @@ variables:
FFI_VERSION: '3.4.2'
GETTEXT_VERSION: '0.21'
#need to switch to meson build system to use a more recent version
GLIB_VERSION: '2.58'
GLIB_EXTRAVERSION: '3'
GLIB_VERSION: '2.71'
GLIB_EXTRAVERSION: '2'
OBOE_VERSION: '1.5.0'
SNDFILE_VERSION: '1.0.31'
INSTPATCH_VERSION: '1.1.6'
VORBIS_VERSION: '1.3.7'
OGG_VERSION: '1.3.5'
OPUS_VERSION: '1.3.1'
FLAC_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'
@ -95,6 +96,7 @@ jobs:
ANDROID_ARCH: 'armv7a'
ANDROID_ABI_CMAKE: 'armeabi-v7a'
ANDROID_TARGET_ABI: "eabi"
ANDROID_ABI_MESON: 'arm'
# the --target to be used by autotools
AUTOTOOLS_TARGET: "$(ARCH)-linux-android$(ANDROID_TARGET_ABI)"
#AUTOTOOLS_TARGET: "$(ARCH)-none-linux-$(ANDROID_TARGET_ABI)"
@ -103,6 +105,7 @@ jobs:
ANDROID_ARCH: 'aarch64'
ANDROID_ABI_CMAKE: 'arm64-v8a'
ANDROID_TARGET_ABI:
ANDROID_ABI_MESON: 'aarch64'
AUTOTOOLS_TARGET: "$(ARCH)-none-linux-android"
#AUTOTOOLS_TARGET: "$(ARCH)-none-linux"
i686:
@ -110,6 +113,7 @@ jobs:
ANDROID_ARCH: 'i686'
ANDROID_ABI_CMAKE: 'x86'
ANDROID_TARGET_ABI:
ANDROID_ABI_MESON: 'x86'
AUTOTOOLS_TARGET: "$(ARCH)-pc-linux-android"
#AUTOTOOLS_TARGET: "$(ARCH)-pc-linux"
x86_64:
@ -117,6 +121,7 @@ jobs:
ANDROID_ARCH: 'x86_64'
ANDROID_ABI_CMAKE: 'x86_64'
ANDROID_TARGET_ABI:
ANDROID_ABI_MESON: 'x86_64'
AUTOTOOLS_TARGET: "$(ARCH)-pc-linux-android"
#AUTOTOOLS_TARGET: "$(ARCH)-pc-linux"
@ -159,7 +164,7 @@ jobs:
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/refs/tags/${FLAC_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
wget -O opus-${OPUS_VERSION}.tar.gz https://github.com/xiph/opus/archive/refs/tags/v${OPUS_VERSION}.tar.gz
@ -193,7 +198,7 @@ jobs:
- 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
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 python3-distutils
displayName: 'apt-get install'
condition: and(succeeded(), ne(variables.CACHE_RESTORED, 'true'))
@ -277,102 +282,6 @@ jobs:
workingDirectory: $(DEV)
condition: and(succeeded(), 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
@ -462,8 +371,69 @@ jobs:
popd
displayName: 'Compile glib'
workingDirectory: $(DEV)
enabled: 'false'
condition: and(succeeded(), ne(variables.CACHE_RESTORED, 'true'))
- script: |
set -ex
export PKGCFG=`which pkg-config`
pushd glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}
cat << EOF > cross_file.ini
[host_machine]
system = 'android'
cpu_family = '${ANDROID_ABI_MESON}'
cpu = '${ANDROID_ARCH}'
endian = 'little'
[binaries]
c = '${NDK_TOOLCHAIN}/bin/${CC}'
cpp = '${NDK_TOOLCHAIN}/bin/${CXX}'
ar = '${NDK_TOOLCHAIN}/bin/${AR}'
as = '${NDK_TOOLCHAIN}/bin/${AS}'
ld = '${NDK_TOOLCHAIN}/bin/${LD}'
strip = '${NDK_TOOLCHAIN}/bin/${STRIP}'
ranlib = '${NDK_TOOLCHAIN}/bin/${RANLIB}'
pkgconfig = '${PKGCFG}'
[properties]
prefix = '${PREFIX}'
c_args = '${CFLAGS}'
cpp_args = '${CXXFLAGS}'
sys_root = '${NDK_TOOLCHAIN}/sysroot'
pkg_config_libdir = '${PKG_CONFIG_LIBDIR}'
c_link_args = '${LDFLAGS}'
[project options]
libmount = 'disabled'
xattr = false
selinux = 'disabled'
nls = 'disabled'
glib_debug = 'disabled'
glib_assert = false
glib_checks = false
libelf = 'disabled'
EOF
cat cross_file.ini
env -i bash -c "export PATH && meson setup build --cross-file cross_file.ini --prefix=${PREFIX}"
ninja -C build
ninja -C build install
popd
displayName: 'Compile glib (meson)'
workingDirectory: $(DEV)
- script: |
pushd glib-${GLIB_VERSION}.${GLIB_EXTRAVERSION}
cat _builddir/meson-logs/meson-log.txt
popd
displayName: 'Meson LOG'
workingDirectory: $(DEV)
condition: failed()
enabled: 'false'
- template: cmake-android.yml
parameters:
sourceDir: 'libogg-$(OGG_VERSION)'