2018-06-26 19:18:29 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
#
|
|
|
|
# Copyright 2018 Collabora ltd.
|
|
|
|
#
|
|
|
|
# This library is free software; you can redistribute it and/or
|
|
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
|
|
# License as published by the Free Software Foundation; either
|
|
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This library is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# Lesser General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
|
|
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
# Author: Xavier Claessens <xavier.claessens@collabora.com>
|
|
|
|
#
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
arch=$1
|
|
|
|
api=$2
|
|
|
|
toolchain_path=$(pwd)/android-toolchain-$arch-$api
|
|
|
|
prefix_path=$(pwd)/android-$arch-$api
|
|
|
|
|
|
|
|
# Create standalone toolchains
|
|
|
|
$ANDROID_NDK_PATH/build/tools/make_standalone_toolchain.py --arch $arch --api $api --install-dir $toolchain_path
|
|
|
|
|
|
|
|
target_host=aarch64-linux-android
|
|
|
|
export AR=$target_host-ar
|
|
|
|
export AS=$target_host-clang
|
|
|
|
export CC=$target_host-clang
|
|
|
|
export CXX=$target_host-clang++
|
|
|
|
export LD=$target_host-ld
|
|
|
|
export STRIP=$target_host-strip
|
|
|
|
export PATH=$PATH:$toolchain_path/bin
|
|
|
|
|
|
|
|
# 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}.txt <<- EOM
|
|
|
|
[host_machine]
|
|
|
|
system = 'android'
|
|
|
|
cpu_family = 'arm64'
|
|
|
|
cpu = 'arm64'
|
|
|
|
endian = 'little'
|
|
|
|
|
|
|
|
[properties]
|
|
|
|
c_args = ['-I${prefix_path}/include']
|
|
|
|
c_link_args = ['-L${prefix_path}/lib64',
|
|
|
|
'-fuse-ld=gold']
|
|
|
|
|
|
|
|
[binaries]
|
|
|
|
c = '${toolchain_path}/bin/${CC}'
|
|
|
|
cpp = '${toolchain_path}/bin/${CXX}'
|
|
|
|
ar = '${toolchain_path}/bin/${AR}'
|
2019-11-04 11:24:15 +01:00
|
|
|
ld = '${toolchain_path}/bin/${LD}'
|
2018-06-26 19:18:29 +02:00
|
|
|
strip = '${toolchain_path}/bin/${STRIP}'
|
|
|
|
pkgconfig = '${PKG_CONFIG}'
|
|
|
|
EOM
|