Build glib for Android

Is there documentation anywhere on how to build glib for Android?

The android scripts in glib/.gitlab-ci seem somewhat useful, but they are also out of date, as they use make_standalone_toolchain.py, which is now obsolete.

Here’s my attempt at modifying android-setup-env.sh for NDK 23.1.7779620:

#!/bin/bash

set -e

arch=$1
api=$2
prefix_path=$(pwd)/android-$arch-$api

export NDK=/path/to/ndk/23.1.7779620

target_host=aarch64-linux-android
export CC=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang
export CXX=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang++
export AR=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
export AS=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-as
export RANLIB=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
export STRIP=${NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip

# Cross build libiconv when using API level <= 28.
# Newer Android has it in its libc already.
if [ "$api" -lt "28" ]; then
  wget --quiet http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
  echo "1233fe3ca09341b53354fd4bfe342a7589181145a1232c9919583a8c9979636855839049f3406f253a9d9829908816bb71fd6d34dd544ba290d6f04251376b1a  libiconv-1.15.tar.gz" | sha512sum -c
  tar xzf libiconv-1.15.tar.gz
  pushd libiconv-1.15
  ./configure --host="${target_host}" --prefix="${prefix_path}"  --libdir="${prefix_path}/lib64"
  make
  make install
  popd
  rm libiconv-1.15.tar.gz
  rm -r libiconv-1.15
fi

# Cross build libffi
wget --quiet https://github.com/libffi/libffi/releases/download/v3.3-rc0/libffi-3.3-rc0.tar.gz
echo "e6e695d32cd6eb7d65983f32986fccdfc786a593d2ea18af30ce741f58cfa1eb264b1a8d09df5084cb916001aea15187b005c2149a0620a44397a4453b6137d4  libffi-3.3-rc0.tar.gz" | sha512sum -c
tar xzf libffi-3.3-rc0.tar.gz
pushd libffi-3.3-rc0
./configure --host="${target_host}" --prefix="${prefix_path}" --libdir="${prefix_path}/lib64"
make
make install
popd
rm libffi-3.3-rc0.tar.gz
rm -r libffi-3.3-rc0

# Create a pkg-config wrapper that won't pick fedora libraries
mkdir -p "${prefix_path}/bin"
export PKG_CONFIG=$prefix_path/bin/pkg-config
cat > "${PKG_CONFIG}" <<- EOM
#!/bin/sh
SYSROOT=${prefix_path}
export PKG_CONFIG_DIR=
export PKG_CONFIG_LIBDIR=\${SYSROOT}/lib64/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=\${SYSROOT}
exec pkg-config "\$@"
EOM
chmod +x "${PKG_CONFIG}"

# Create a cross file that can be passed to meson
cat > "cross_file_android_${arch}_${api}.cross" <<- EOM
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'

[properties]
c_args = ['-I${prefix_path}/include']
c_link_args = ['-L${prefix_path}/lib64',
               '-fuse-ld=gold']
growing_stack = true

[binaries]
c = '${CC}'
cpp = '${CXX}'
ar = '${AR}'
as = '${AS}'
ranlib = '${RANLIB}'
strip = '${STRIP}'
pkgconfig = '${PKG_CONFIG}'
EOM

This script assumes NDK 23.1.7779620 is already downloaded, and instead of make_standalone_toolchain.py, it uses the preexisting toolchains.

I call the script with ./android-setup-env.sh arm64 30 (arch=arm64 and android api=30)

When I try and build a meson project using the cross file generated from this script, dependency('glib-2.0') can’t find glib.

Any ideas what I’m missing?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.