123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/bin/bash -e
- # NOTE: this code is mostly copied from minetest_android_deps
- # <https://github.com/minetest/minetest_android_deps>
- png_ver=1.6.40
- jpeg_ver=3.0.1
- download () {
- get_tar_archive libpng "https://download.sourceforge.net/libpng/libpng-${png_ver}.tar.gz"
- get_tar_archive libjpeg "https://download.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${jpeg_ver}.tar.gz"
- }
- build () {
- # Build libjpg and libpng first because Irrlicht needs them
- mkdir -p libpng
- pushd libpng
- $srcdir/libpng/configure --host=$CROSS_PREFIX
- make && make DESTDIR=$PWD install
- popd
- mkdir -p libjpeg
- pushd libjpeg
- cmake $srcdir/libjpeg "${CMAKE_FLAGS[@]}" -DENABLE_SHARED=OFF
- make && make DESTDIR=$PWD install
- popd
- local libpng=$PWD/libpng/usr/local/lib/libpng.a
- local libjpeg=$(echo $PWD/libjpeg/opt/libjpeg-turbo/lib*/libjpeg.a)
- cmake $srcdir/irrlicht "${CMAKE_FLAGS[@]}" \
- -DBUILD_SHARED_LIBS=OFF \
- -DPNG_LIBRARY=$libpng \
- -DPNG_PNG_INCLUDE_DIR=$(dirname "$libpng")/../include \
- -DJPEG_LIBRARY=$libjpeg \
- -DJPEG_INCLUDE_DIR=$(dirname "$libjpeg")/../include
- make
- cp -p lib/Android/libIrrlichtMt.a $libpng $libjpeg $pkgdir/
- cp -a $srcdir/irrlicht/include $pkgdir/include
- cp -a $srcdir/irrlicht/media/Shaders $pkgdir/Shaders
- }
- get_tar_archive () {
- # $1: folder to extract to, $2: URL
- local filename="${2##*/}"
- [ -d "$1" ] && return 0
- wget -c "$2" -O "$filename"
- mkdir -p "$1"
- tar -xaf "$filename" -C "$1" --strip-components=1
- rm "$filename"
- }
- _setup_toolchain () {
- local toolchain=$(echo "$ANDROID_NDK"/toolchains/llvm/prebuilt/*)
- if [ ! -d "$toolchain" ]; then
- echo "Android NDK path not specified or incorrect"; return 1
- fi
- export PATH="$toolchain/bin:$ANDROID_NDK:$PATH"
- unset CFLAGS CPPFLAGS CXXFLAGS
- TARGET_ABI="$1"
- API=21
- if [ "$TARGET_ABI" == armeabi-v7a ]; then
- CROSS_PREFIX=armv7a-linux-androideabi
- CFLAGS="-mthumb"
- CXXFLAGS="-mthumb"
- elif [ "$TARGET_ABI" == arm64-v8a ]; then
- CROSS_PREFIX=aarch64-linux-android
- elif [ "$TARGET_ABI" == x86 ]; then
- CROSS_PREFIX=i686-linux-android
- CFLAGS="-mssse3 -mfpmath=sse"
- CXXFLAGS="-mssse3 -mfpmath=sse"
- elif [ "$TARGET_ABI" == x86_64 ]; then
- CROSS_PREFIX=x86_64-linux-android
- else
- echo "Invalid ABI given"; return 1
- fi
- export CC=$CROSS_PREFIX$API-clang
- export CXX=$CROSS_PREFIX$API-clang++
- export AR=llvm-ar
- export RANLIB=llvm-ranlib
- export CFLAGS="-fPIC ${CFLAGS}"
- export CXXFLAGS="-fPIC ${CXXFLAGS}"
- CMAKE_FLAGS=(
- "-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake"
- "-DANDROID_ABI=$TARGET_ABI" "-DANDROID_NATIVE_API_LEVEL=$API"
- "-DCMAKE_BUILD_TYPE=Release"
- )
- # make sure pkg-config doesn't interfere
- export PKG_CONFIG=/bin/false
- export MAKEFLAGS="-j$(nproc)"
- }
- _run_build () {
- local abi=$1
- irrdir=$PWD
- mkdir -p $RUNNER_TEMP/src
- cd $RUNNER_TEMP/src
- srcdir=$PWD
- [ -d irrlicht ] || ln -s $irrdir irrlicht
- download
- builddir=$RUNNER_TEMP/build/irrlicht-$abi
- pkgdir=$RUNNER_TEMP/pkg/$abi/Irrlicht
- rm -rf "$pkgdir"
- mkdir -p "$builddir" "$pkgdir"
- cd "$builddir"
- build
- }
- if [ $# -lt 1 ]; then
- echo "Usage: ci-build-android.sh <ABI>"
- exit 1
- fi
- _setup_toolchain $1
- _run_build $1
|