| #!/bin/bash | |
| ############################################################################### | |
| # BRLTTY - A background process providing access to the console screen (when in | |
| # text mode) for a blind person using a refreshable braille display. | |
| # | |
| # Copyright (C) 1995-2023 by The BRLTTY Developers. | |
| # | |
| # BRLTTY comes with ABSOLUTELY NO WARRANTY. | |
| # | |
| # This is free software, placed 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. Please see the file LICENSE-LGPL for details. | |
| # | |
| # Web Page: http://brltty.app/ | |
| # | |
| # This software is maintained by Dave Mielke <dave@mielke.cc>. | |
| ############################################################################### | |
| . "`dirname "${0}"`/brltty-prologue.sh" | |
| ndkRootVariable=ANDROID_NDK | |
| showProgramUsagePurpose() { | |
| cat <<END_OF_PROGRAM_USAGE_PURPOSE | |
| Configure a BRLTTY build for the Android platform. | |
| END_OF_PROGRAM_USAGE_PURPOSE | |
| } | |
| showProgramUsageNotes() { | |
| cat <<END_OF_PROGRAM_USAGE_NOTES | |
| All of the options are passed through, unmodified, as additional options to the configure script. | |
| The ${ndkRootVariable} environment variable must point to the root directory for the Android NDK (native development kit). | |
| END_OF_PROGRAM_USAGE_NOTES | |
| } | |
| defaultToplevelABI="armeabi-v7a" | |
| addProgramOption a string.ABI toplevelABI "the top-level's ABI" "${defaultToplevelABI}" | |
| addProgramOption n flag noToplevelConfigure "don't configure the top-level" | |
| addProgramOption o flag overwriteBuildProperties "overwrite existing ABI build properties" | |
| parseProgramArguments "${@}" | |
| set -e | |
| sourceRoot="${programDirectory}" | |
| buildRoot="${initialDirectory}" | |
| androidRoot="${buildRoot}/Android" | |
| ndkRoot="${androidRoot}/NDK" | |
| [ -d "${ndkRoot}" ] || { | |
| [ -n "${!ndkRootVariable}" ] || { | |
| semanticError "Android NDK directory not defined: ${ndkRoot}" | |
| } | |
| [ -f "${!ndkRootVariable}/ndk-build" ] || { | |
| semanticError "not an Android NDK: ${!ndkRootVariable}" | |
| } | |
| logNote "creating symbolic link: ${ndkRoot} -> ${!ndkRootVariable}" | |
| ln -s "${!ndkRootVariable}" "${ndkRoot}" || exit "${?}" | |
| } | |
| architecturesRoot="${androidRoot}/ABI" | |
| androidPlatform=android-21 | |
| prepareArchitecture() { | |
| local architecture="${1}" | |
| local system="${2}" | |
| local abi="${3}" | |
| local cFlags="${4}" | |
| local ldFlags="${5}" | |
| local abiRoot="${architecturesRoot}/${abi}" | |
| mkdir -p -- "${abiRoot}" | |
| local toolchainRoot="${abiRoot}/ToolChain" | |
| ( set -e | |
| cd "${abiRoot}" | |
| local propertiesFile="build.properties" | |
| if [ -f "${propertiesFile}" ] | |
| then | |
| if "${overwriteBuildProperties}" | |
| then | |
| logWarning "overwriting ABI build properties: ${abi}" | |
| else | |
| logNote "ABI build properties already exist: ${abi}" | |
| return 0 | |
| fi | |
| else | |
| logNote "creating ABI build properties: ${abi}" | |
| fi | |
| : >"${propertiesFile}" | |
| set -- SOURCE "${sourceRoot}" NDK "${ndkRoot}" PLATFORM "${androidPlatform}" ARCH "${architecture}" ABI "${abi}" SYSTEM "${system}" TOOLCHAIN "${toolchainRoot}" CFLAGS "${cFlags}" LDFLAGS "${ldFlags}" | |
| while [ "${#}" -gt 0 ] | |
| do | |
| local variable="${1}" | |
| local value="${2}" | |
| shift 2 | |
| echo >>"${propertiesFile}" "BRLTTY_ANDROID_${variable}=${value}" | |
| done | |
| ) | |
| } | |
| logMessage task "preparing ABI build trees" | |
| prepareArchitecture arm arm-linux-androideabi armeabi-v7a "-mthumb" "-Wl,--fix-cortex-a8" | |
| prepareArchitecture arm64 aarch64-linux-android arm64-v8a | |
| prepareArchitecture x86 i686-linux-android x86 | |
| prepareArchitecture x86_64 x86_64-linux-android x86_64 | |
| "${noToplevelConfigure}" || { | |
| [ -n "${toplevelABI}" ] || toplevelABI="${defaultToplevelABI}" | |
| logMessage task "configuring top-level for ${toplevelABI}" | |
| "${sourceRoot}/cfg-android-abi" -f "${toplevelABI}" | |
| } | |
| exit 0 |