1#!/bin/bash 2 3set -ex 4 5EPHEMERAL="\ 6 autoconf \ 7 rdfind \ 8 unzip \ 9 " 10 11apt-get install -y --no-remove $EPHEMERAL 12 13# Fetch the NDK and extract just the toolchain we want. 14ndk=android-ndk-r21d 15wget -O $ndk.zip https://dl.google.com/android/repository/$ndk-linux-x86_64.zip 16unzip -d / $ndk.zip "$ndk/toolchains/llvm/*" 17rm $ndk.zip 18# Since it was packed as a zip file, symlinks/hardlinks got turned into 19# duplicate files. Turn them into hardlinks to save on container space. 20rdfind -makehardlinks true -makeresultsfile false /android-ndk-r21d/ 21# Drop some large tools we won't use in this build. 22find /android-ndk-r21d/ -type f | egrep -i "clang-check|clang-tidy|lldb" | xargs rm -f 23 24sh .gitlab-ci/container/create-android-ndk-pc.sh /$ndk zlib.pc "" "-lz" "1.2.3" 25 26sh .gitlab-ci/container/create-android-cross-file.sh /$ndk x86_64-linux-android x86_64 x86_64 27sh .gitlab-ci/container/create-android-cross-file.sh /$ndk i686-linux-android x86 x86 28sh .gitlab-ci/container/create-android-cross-file.sh /$ndk aarch64-linux-android arm armv8 29sh .gitlab-ci/container/create-android-cross-file.sh /$ndk arm-linux-androideabi arm armv7hl armv7a-linux-androideabi 30 31# Not using build-libdrm.sh because we don't want its cleanup after building 32# each arch. Fetch and extract now. 33export LIBDRM_VERSION=libdrm-2.4.110 34wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.xz 35tar -xf $LIBDRM_VERSION.tar.xz && rm $LIBDRM_VERSION.tar.xz 36 37for arch in \ 38 x86_64-linux-android \ 39 i686-linux-android \ 40 aarch64-linux-android \ 41 arm-linux-androideabi ; do 42 43 cd $LIBDRM_VERSION 44 rm -rf build-$arch 45 meson build-$arch \ 46 --cross-file=/cross_file-$arch.txt \ 47 --libdir=lib/$arch \ 48 -Dlibkms=false \ 49 -Dnouveau=false \ 50 -Dvc4=false \ 51 -Detnaviv=false \ 52 -Dfreedreno=false \ 53 -Dintel=false \ 54 -Dcairo-tests=false \ 55 -Dvalgrind=false 56 ninja -C build-$arch install 57 cd .. 58done 59 60rm -rf $LIBDRM_VERSION 61 62export LIBELF_VERSION=libelf-0.8.13 63wget https://fossies.org/linux/misc/old/$LIBELF_VERSION.tar.gz 64 65# Not 100% sure who runs the mirror above so be extra careful 66if ! echo "4136d7b4c04df68b686570afa26988ac ${LIBELF_VERSION}.tar.gz" | md5sum -c -; then 67 echo "Checksum failed" 68 exit 1 69fi 70 71tar -xf ${LIBELF_VERSION}.tar.gz 72cd $LIBELF_VERSION 73 74# Work around a bug in the original configure not enabling __LIBELF64. 75autoreconf 76 77for arch in \ 78 x86_64-linux-android \ 79 i686-linux-android \ 80 aarch64-linux-android \ 81 arm-linux-androideabi ; do 82 83 ccarch=${arch} 84 if [ "${arch}" == 'arm-linux-androideabi' ] 85 then 86 ccarch=armv7a-linux-androideabi 87 fi 88 89 export CC=/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/${arch}-ar 90 export CC=/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/${ccarch}29-clang 91 export CXX=/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/${ccarch}29-clang++ 92 export LD=/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/${arch}-ld 93 export RANLIB=/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/${arch}-ranlib 94 95 # The configure script doesn't know about android, but doesn't really use the host anyway it 96 # seems 97 ./configure --host=x86_64-linux-gnu --disable-nls --disable-shared \ 98 --libdir=/usr/local/lib/${arch} 99 make install 100 make distclean 101done 102 103cd .. 104rm -rf $LIBELF_VERSION 105 106apt-get purge -y $EPHEMERAL 107