diff options
author | Frederik Carlier <frederik.carlier@quamotion.mobi> | 2017-03-07 19:51:45 +0300 |
---|---|---|
committer | Frederik Carlier <frederik.carlier@quamotion.mobi> | 2017-03-07 19:51:45 +0300 |
commit | 99c9d871bfa5cde5d3f90702a36ac375007c26bf (patch) | |
tree | 2f518087b0defc1a7e70bfe713862c13db8638fd /cross | |
parent | 10f3d6fca610857266cfd9c83420c42257392ffe (diff) |
Support compiling for ARM Android
Diffstat (limited to 'cross')
-rw-r--r-- | cross/android/arm/toolchain.cmake | 38 | ||||
-rw-r--r-- | cross/android/arm/tryrun.cmake | 6 | ||||
-rwxr-xr-x | cross/build-android-rootfs.sh | 26 |
3 files changed, 61 insertions, 9 deletions
diff --git a/cross/android/arm/toolchain.cmake b/cross/android/arm/toolchain.cmake new file mode 100644 index 0000000000..1b09b8f99c --- /dev/null +++ b/cross/android/arm/toolchain.cmake @@ -0,0 +1,38 @@ +set(CROSS_NDK_TOOLCHAIN $ENV{ROOTFS_DIR}/..) +set(CROSS_ROOTFS ${CROSS_NDK_TOOLCHAIN}/sysroot) +set(CLR_CMAKE_PLATFORM_ANDROID "Android") + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR arm) + +## Specify the toolchain +set(TOOLCHAIN "arm-linux-androideabi") +set(CMAKE_PREFIX_PATH ${CROSS_NDK_TOOLCHAIN}) + +find_program(CMAKE_C_COMPILER ${TOOLCHAIN}-clang) +find_program(CMAKE_CXX_COMPILER ${TOOLCHAIN}-clang++) +find_program(CMAKE_ASM_COMPILER ${TOOLCHAIN}-clang) +find_program(CMAKE_OBJCOPY ${TOOLCHAIN}-objcopy) +find_program(CMAKE_OBJDUMP ${TOOLCHAIN}-objdump) + +add_compile_options(--sysroot=${CROSS_ROOTFS}) +add_compile_options(-fPIE) + +# Some libraries, like libcurl, check for the __ANDROID__ flag to include some required headers. +add_compile_options(-D__ANDROID__) + +set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B ${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}") +set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/lib/${TOOLCHAIN}") +set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} --sysroot=\"${CROSS_ROOTFS}\"") +set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -fPIE -pie") + +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE) + +set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOTFS}") +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/cross/android/arm/tryrun.cmake b/cross/android/arm/tryrun.cmake new file mode 100644 index 0000000000..f6d9159caa --- /dev/null +++ b/cross/android/arm/tryrun.cmake @@ -0,0 +1,6 @@ +SET( HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE + 0 + CACHE STRING "Result from TRY_RUN" FORCE) +SET( HAVE_CLOCK_MONOTONIC_EXITCODE + 0 + CACHE STRING "Result from TRY_RUN" FORCE) diff --git a/cross/build-android-rootfs.sh b/cross/build-android-rootfs.sh index bf20ee9fb7..c2e46adf52 100755 --- a/cross/build-android-rootfs.sh +++ b/cross/build-android-rootfs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +__NDK_Version=r14 usage() { @@ -12,7 +13,7 @@ usage() echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" echo. - echo "By default, the NDK will be downloaded into the cross/android-rootfs/android-ndk-r13b directory. If you already have an NDK installation," + echo "By default, the NDK will be downloaded into the cross/android-rootfs/android-ndk-$__NDK_Version directory. If you already have an NDK installation," echo "you can set the NDK_DIR environment variable to have this script use that installation of the NDK." exit 1 } @@ -20,6 +21,7 @@ usage() __ApiLevel=21 # The minimum platform for arm64 is API level 21 __BuildArch=arm64 __AndroidArch=aarch64 +__AndroidToolchain=aarch64-linux-android for i in "$@" do @@ -32,6 +34,12 @@ for i in "$@" arm64) __BuildArch=arm64 __AndroidArch=aarch64 + __AndroidToolchain=arm-linux-androideabi + ;; + arm) + __BuildArch=arm + __AndroidArch=arm + __AndroidToolchain=arm-linux-androideabi ;; *[0-9]) __ApiLevel=$i @@ -46,7 +54,7 @@ done __CrossDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" __Android_Cross_Dir="$__CrossDir/android-rootfs" -__NDK_Dir="$__Android_Cross_Dir/android-ndk-r13b" +__NDK_Dir="$__Android_Cross_Dir/android-ndk-$__NDK_Version" __libunwind_Dir="$__Android_Cross_Dir/libunwind" __ToolchainDir="$__Android_Cross_Dir/toolchain/$__BuildArch" @@ -67,8 +75,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -nv -nc --show-progress https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip -O $__Android_Cross_Dir/android-ndk-r13b-linux-x86_64.zip - unzip -q $__Android_Cross_Dir/android-ndk-r13b-linux-x86_64.zip -d $__Android_Cross_Dir + wget -nv -nc --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__Android_Cross_Dir/android-ndk-$__NDK_Version-linux-x86_64.zip + unzip -q $__Android_Cross_Dir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__Android_Cross_Dir fi # Create the RootFS for both arm64 as well as aarch @@ -83,10 +91,10 @@ rm -rf $__Android_Cross_Dir/tmp mkdir -p $__Android_Cross_Dir/deb/ mkdir -p $__Android_Cross_Dir/tmp/$arch/ -wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl-dev_7.52.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl-dev_7.52.1_$__AndroidArch.deb -wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl_7.52.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl_7.52.1_$__AndroidArch.deb -wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/krb5-dev_1.15_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/krb5-dev_1.15_$__AndroidArch.deb -wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/krb5_1.15_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/krb5_1.15_$__AndroidArch.deb +wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl-dev_7.53.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl-dev_7.52.1_$__AndroidArch.deb +wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libcurl_7.53.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libcurl_7.52.1_$__AndroidArch.deb +wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/krb5-dev_1.15.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/krb5-dev_1.15_$__AndroidArch.deb +wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/krb5_1.15.1_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/krb5_1.15_$__AndroidArch.deb wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/openssl-dev_1.0.2k_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/openssl-dev_1.0.2k_$__AndroidArch.deb wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/openssl_1.0.2k_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/openssl_1.0.2k_$__AndroidArch.deb @@ -105,4 +113,4 @@ cp -R $__Android_Cross_Dir/tmp/$__AndroidArch/data/data/com.termux/files/usr/* $ wget -nv -nc https://raw.githubusercontent.com/qnnnnez/android-ifaddrs/master/include/ifaddrs_single.h -O $__ToolchainDir/sysroot/usr/include/ifaddrs.h echo Now run: -echo CONFIG_DIR=\`realpath cross/android/arm64\` ROOTFS_DIR=\`realpath $__ToolchainDir/sysroot\` ./build-native.sh -debug -buildArch=arm64 -- verbose cross +echo CONFIG_DIR=\`realpath cross/android/$__BuildArch\` ROOTFS_DIR=\`realpath $__ToolchainDir/sysroot\` ./build-native.sh -debug -buildArch=$__BuildArch -- verbose cross |