| #!/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 |