Skip to content

Commit 145706f

Browse files
committed
WIP: Update android toolchain to NDK r21d
Use (legacy) ANDROID_HOME and ANDROID_NDK_HOME environment variables, as provided by Azure Pipelines.
1 parent 577f98b commit 145706f

File tree

1 file changed

+65
-48
lines changed

1 file changed

+65
-48
lines changed

android-toolchain-ndk-r19c.cmake renamed to android-toolchain-ndk-r21d.cmake

Lines changed: 65 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ endif()
3636
set(supported_ndks
3737
ndk-r19c
3838
ndk-r20 # compiler bugs pending, to be fixed in ndk-r21
39+
ndk-r21d
3940
)
40-
set(ANDROID_TOOLCHAIN_VERSION "ndk-r19c" CACHE STRING
41+
set(ANDROID_TOOLCHAIN_VERSION "ndk-r21d" CACHE STRING
4142
"Version of the Android NDK toolchain to be used"
4243
)
4344
if(NOT ANDROID_TOOLCHAIN_VERSION IN_LIST supported_ndks)
@@ -97,12 +98,24 @@ if(CMAKE_BUILD_TYPE MATCHES Rel)
9798
endif()
9899
endif()
99100

101+
# Cf. https://developer.android.com/studio/command-line/variables
102+
if(NOT DEFINED ANDROID_SDK_ROOT AND NOT "$ENV{ANDROID_HOME}" STREQUAL "")
103+
message(STATUS "Using ANDROID_SDK_ROOT=ANDROID_HOME=$ENV{ANDROID_HOME}")
104+
set(ANDROID_SDK_ROOT "$ENV{ANDROID_HOME}")
105+
endif()
100106
if(NOT DEFINED ANDROID_SDK_ROOT AND NOT "$ENV{ANDROID_SDK_ROOT}" STREQUAL "")
107+
message(STATUS "Using ANDROID_SDK_ROOT=$ENV{ANDROID_SDK_ROOT}")
101108
set(ANDROID_SDK_ROOT "$ENV{ANDROID_SDK_ROOT}")
102109
endif()
110+
if(NOT DEFINED ANDROID_NDK_ROOT AND NOT "$ENV{ANDROID_NDK_HOME}" STREQUAL "")
111+
message(STATUS "Using ANDROID_NDK_ROOT=ANDROID_NDK_HOME=$ENV{ANDROID_NDK_HOME}")
112+
set(ANDROID_NDK_ROOT "$ENV{ANDROID_NDK_HOME}")
113+
endif()
103114
if(NOT DEFINED ANDROID_NDK_ROOT AND NOT "$ENV{ANDROID_NDK_ROOT}" STREQUAL "")
115+
message(STATUS "Using ANDROID_NDK_ROOT=$ENV{ANDROID_NDK_ROOT}")
104116
set(ANDROID_NDK_ROOT "$ENV{ANDROID_NDK_ROOT}")
105117
endif()
118+
106119
if(NOT "$ENV{ANDROID_PLATFORM}" STREQUAL "")
107120
foreach(abi ${supported_abis})
108121
set(system_platform_${abi} "$ENV{ANDROID_PLATFORM}")
@@ -112,39 +125,41 @@ elseif(DEFINED ANDROID_PLATFORM)
112125
set(system_platform_${abi} "${ANDROID_PLATFORM}")
113126
endforeach()
114127
endif()
128+
115129
if(NOT DEFINED ANDROID_COMPILE_SDK AND NOT "$ENV{ANDROID_COMPILE_SDK}" STREQUAL "")
116130
set(ANDROID_COMPILE_SDK "$ENV{ANDROID_COMPILE_SDK}")
117131
else()
118-
set(ANDROID_COMPILE_SDK android-28)
132+
set(ANDROID_COMPILE_SDK android-29)
119133
endif()
120134

121-
if(ANDROID_SDK_ROOT AND ANDROID_NDK_ROOT)
122-
set(sdk_host "") # external SDK and NDK
123-
elseif(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
124-
set(sdk_host "darwin")
125-
elseif(UNIX AND NOT APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
135+
if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
136+
message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR must be x86_64")
137+
elseif(APPLE)
138+
set(sdk_host "mac")
139+
elseif(UNIX)
126140
set(sdk_host "linux")
127-
elseif(NOT ANDROID_SDK_ROOT)
128-
message(FATAL_ERROR "ANDROID_SDK_ROOT must be set to an external SDK")
129-
elseif(NOT ANDROID_NDK_ROOT)
130-
message(FATAL_ERROR "ANDROID_NDK_ROOT must be set to an external NDK")
141+
else()
142+
set(sdk_host "windows")
131143
endif()
144+
string(REPLACE "mac" "darwin" ndk_host "${sdk_host}")
132145

133146
set(android_toolchain_dependencies )
134147

135148

136149
if(NOT ANDROID_SDK_ROOT)
137-
# Download SDK tools, platform, platform tools, and build tools.
138-
set(sdk_tools_version "4333796")
139-
set(sdk_tools_darwin_${sdk_tools_version}_hash SHA256=ecb29358bc0f13d7c2fa0f9290135a5b608e38434aad9bf7067d0252c160853e)
140-
set(sdk_tools_linux_${sdk_tools_version}_hash SHA256=92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9)
141-
set(build_tools_version "28.0.2")
150+
# Download command line tools, platform tools, platform, and build tools.
151+
set(sdk_tools_version "6609375")
152+
set(sdk_tools_mac_${sdk_tools_version}_hash SHA256=2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55)
153+
set(sdk_tools_linux_${sdk_tools_version}_hash SHA256=89f308315e041c93a37a79e0627c47f21d5c5edbe5e80ea8dc0aac8a649e0e92)
154+
set(build_tools_version "29.0.2")
142155
string(CONCAT sdk_setup_sh [[
143156
# Generated by ]] "${CMAKE_CURRENT_LIST_FILE}\n" [[
144-
echo y | ./tools/bin/sdkmanager --install "platforms;]] "${ANDROID_COMPILE_SDK}" [["
145-
echo y | ./tools/bin/sdkmanager --install "platform-tools"
146-
echo y | ./tools/bin/sdkmanager --install "build-tools;]] "${build_tools_version}" [["
147-
yes | ./tools/bin/sdkmanager --licenses
157+
set -x
158+
echo y | ./cmdline-tools/tools/bin/sdkmanager --update
159+
echo y | ./cmdline-tools/tools/bin/sdkmanager --install "platforms;]] "${ANDROID_COMPILE_SDK}" [["
160+
echo y | ./cmdline-tools/tools/bin/sdkmanager --install "platform-tools"
161+
echo y | ./cmdline-tools/tools/bin/sdkmanager --install "build-tools;]] "${build_tools_version}" [["
162+
yes | ./cmdline-tools/tools/bin/sdkmanager --licenses
148163
]]
149164
)
150165
set(ANDROID_SDK_INSTALL_ROOT "${PROJECT_BINARY_DIR}/source" CACHE STRING
@@ -158,14 +173,14 @@ yes | ./tools/bin/sdkmanager --licenses
158173
SOURCE_WRITE
159174
sdk_setup.sh sdk_setup_sh
160175
SOURCE
161-
DOWNLOAD_NAME android-sdk-tools-${sdk_host}-${sdk_tools_version}.zip
162-
URL https://dl.google.com/android/repository/sdk-tools-${sdk_host}-${sdk_tools_version}.zip
176+
DOWNLOAD_NAME android-commandlinetools-${sdk_host}-${sdk_tools_version}_latest.zip
177+
URL https://dl.google.com/android/repository/commandlinetools-${sdk_host}-${sdk_tools_version}_latest.zip
163178
URL_HASH ${sdk_tools_${sdk_host}_${sdk_tools_version}_hash}
164179
DOWNLOAD_NO_EXTRACT 1 # We extract manually from within the source directory.
165180
PATCH_COMMAND
166-
"${CMAKE_COMMAND}" -E make_directory "${ANDROID_SDK_ROOT}"
181+
"${CMAKE_COMMAND}" -E make_directory "${ANDROID_SDK_ROOT}/cmdline-tools"
167182
COMMAND
168-
"${CMAKE_COMMAND}" -E chdir "${ANDROID_SDK_ROOT}"
183+
"${CMAKE_COMMAND}" -E chdir "${ANDROID_SDK_ROOT}/cmdline-tools"
169184
"${CMAKE_COMMAND}" -E tar xzf "<DOWNLOADED_FILE>"
170185
COMMAND
171186
"${CMAKE_COMMAND}" -E chdir "${ANDROID_SDK_ROOT}"
@@ -182,6 +197,8 @@ if(NOT ANDROID_NDK_ROOT)
182197
set(ndk_r19c_linux_hash SHA1=fd94d0be6017c6acbd193eb95e09cf4b6f61b834)
183198
set(ndk_r20_darwin_hash SHA1=96d5f1c50452596912d1982439c514194b5751e6)
184199
set(ndk_r20_linux_hash SHA1=8665fc84a1b1f0d6ab3b5fdd1e30200cc7b9adff)
200+
set(ndk_r21d_darwin_hash SHA1=ef06c9f9d7efd6f243eb3c05ac440562ae29ae12)
201+
set(ndk_r21d_linux_hash SHA1=bcf4023eb8cb6976a4c7cff0a8a8f145f162bf4d)
185202
set(ANDROID_NDK_INSTALL_ROOT "${PROJECT_BINARY_DIR}/source" CACHE STRING
186203
"The directory where to install the downloaded NDK (i.e. the basedir of ANDROID_NDK_ROOT)"
187204
)
@@ -191,8 +208,8 @@ if(NOT ANDROID_NDK_ROOT)
191208
VERSION ${version}
192209

193210
SOURCE
194-
URL https://dl.google.com/android/repository/android-ndk-${version}-${sdk_host}-x86_64.zip
195-
URL_HASH ${ndk_${version}_${sdk_host}_hash}
211+
URL https://dl.google.com/android/repository/android-ndk-${version}-${ndk_host}-x86_64.zip
212+
URL_HASH ${ndk_${version}_${ndk_host}_hash}
196213
DOWNLOAD_NO_EXTRACT 1 # We extract manually from within the source directory.
197214
PATCH_COMMAND
198215
"${CMAKE_COMMAND}" -E chdir "${ANDROID_NDK_INSTALL_ROOT}"
@@ -298,7 +315,7 @@ if(NOT ANDROID_NDK_ROOT)
298315
SOURCE
299316
android-libcxx-${ANDROID_NDK_VERSION}
300317

301-
USING ANDROID_NDK_ROOT abi sdk_host system_platform_${abi}
318+
USING ANDROID_NDK_ROOT abi ndk_host system_platform_${abi}
302319
BUILD [[
303320
CONFIGURE_COMMAND ""
304321
BUILD_COMMAND
@@ -309,7 +326,7 @@ if(NOT ANDROID_NDK_ROOT)
309326
"APP_PLATFORM=${system_platform_${abi}}"
310327
"APP_MODULES=c++_shared c++_static"
311328
"BIONIC_PATH=<SOURCE_DIR>/bionic"
312-
"NDK_UNIFIED_SYSROOT_PATH=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/sysroot"
329+
"NDK_UNIFIED_SYSROOT_PATH=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/sysroot"
313330
"NDK_PLATFORMS_ROOT=${ANDROID_NDK_ROOT}/platforms"
314331
"NDK_TOOLCHAINS_ROOT=<SOURCE_DIR>/toolchains"
315332
"NDK_PROJECT_PATH=null"
@@ -361,7 +378,7 @@ foreach(abi ${enabled_abis})
361378
sb_install_dir(install_dir ${system_name})
362379

363380
if(NOT DEFINED ${system_name}_ENV_PATH)
364-
set(${system_name}_ENV_PATH "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin:${toolchain_dir}/bin:$ENV{PATH}" PARENT_SCOPE)
381+
set(${system_name}_ENV_PATH "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin:${toolchain_dir}/bin:$ENV{PATH}" PARENT_SCOPE)
365382
endif()
366383

367384
if(NOT DEFINED ${system_name}_INSTALL_PREFIX)
@@ -404,8 +421,8 @@ set(CMAKE_FIND_ROOT_PATH "]] "${${system_name}_FIND_ROOT_PATH}" [[")
404421
list(APPEND CMAKE_FIND_ROOT_PATH "${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-]] ${system_arch_${abi}} [[")
405422
set(CMAKE_SYSTEM_LIBRARY_PATH "/usr/lib/${SYSTEM_NAME}")
406423

407-
set(SUPERBUILD_CC "]] "${ANDROID_NDK_ROOT}" [[/toolchains/llvm/prebuilt/]] "${sdk_host}" [[-x86_64/bin/${SYSTEM_NAME}${ANDROID_NATIVE_API_LEVEL}-clang")
408-
set(SUPERBUILD_CXX "]] "${ANDROID_NDK_ROOT}" [[/toolchains/llvm/prebuilt/]] "${sdk_host}" [[-x86_64/bin/${SYSTEM_NAME}${ANDROID_NATIVE_API_LEVEL}-clang++")
424+
set(SUPERBUILD_CC "]] "${ANDROID_NDK_ROOT}" [[/toolchains/llvm/prebuilt/]] "${ndk_host}" [[-x86_64/bin/${SYSTEM_NAME}${ANDROID_NATIVE_API_LEVEL}-clang")
425+
set(SUPERBUILD_CXX "]] "${ANDROID_NDK_ROOT}" [[/toolchains/llvm/prebuilt/]] "${ndk_host}" [[-x86_64/bin/${SYSTEM_NAME}${ANDROID_NATIVE_API_LEVEL}-clang++")
409426
# ANDROID_LINKER_FLAGS defines flags for ABI specific linking requirements.
410427
# Last not least, this includes the unwinding particularities of 32-bit ARM,
411428
# https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#Unwinding
@@ -451,7 +468,7 @@ set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable verbose output from Makefile b
451468
USING
452469
md5
453470
install_dir
454-
sdk_host
471+
ndk_host
455472
system_name
456473
${system_name}_INSTALL_PREFIX
457474
ANDROID_NDK_ROOT
@@ -483,67 +500,67 @@ set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable verbose output from Makefile b
483500
$<$<STREQUAL:@system_name@,armv7a-linux-androideabi>:# Add tools with same prefix as compiler
484501
COMMAND
485502
"${CMAKE_COMMAND}" -E copy_if_different
486-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-ar"
503+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-ar"
487504
"${INSTALL_DIR}/bin/${system_name}-ar"
488505
COMMAND
489506
"${CMAKE_COMMAND}" -E copy_if_different
490-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-as"
507+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-as"
491508
"${INSTALL_DIR}/bin/${system_name}-as"
492509
COMMAND
493510
"${CMAKE_COMMAND}" -E copy_if_different
494-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-c++filt"
511+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-c++filt"
495512
"${INSTALL_DIR}/bin/${system_name}-c++filt"
496513
COMMAND
497514
"${CMAKE_COMMAND}" -E copy_if_different
498-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-dwp"
515+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-dwp"
499516
"${INSTALL_DIR}/bin/${system_name}-dwp"
500517
COMMAND
501518
"${CMAKE_COMMAND}" -E copy_if_different
502-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-elfedit"
519+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-elfedit"
503520
"${INSTALL_DIR}/bin/${system_name}-gprof"
504521
COMMAND
505522
"${CMAKE_COMMAND}" -E copy_if_different
506-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-ld"
523+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-ld"
507524
"${INSTALL_DIR}/bin/${system_name}-ld"
508525
COMMAND
509526
"${CMAKE_COMMAND}" -E copy_if_different
510-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-ld.bfd"
527+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-ld.bfd"
511528
"${INSTALL_DIR}/bin/${system_name}-ld.bfd"
512529
COMMAND
513530
"${CMAKE_COMMAND}" -E copy_if_different
514-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-ld.gold"
531+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-ld.gold"
515532
"${INSTALL_DIR}/bin/${system_name}-ld.gold"
516533
COMMAND
517534
"${CMAKE_COMMAND}" -E copy_if_different
518-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-nm"
535+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-nm"
519536
"${INSTALL_DIR}/bin/${system_name}-nm"
520537
COMMAND
521538
"${CMAKE_COMMAND}" -E copy_if_different
522-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-objcopy"
539+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-objcopy"
523540
"${INSTALL_DIR}/bin/${system_name}-objcopy"
524541
COMMAND
525542
"${CMAKE_COMMAND}" -E copy_if_different
526-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-objdump"
543+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-objdump"
527544
"${INSTALL_DIR}/bin/${system_name}-objdump"
528545
COMMAND
529546
"${CMAKE_COMMAND}" -E copy_if_different
530-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-ranlib"
547+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-ranlib"
531548
"${INSTALL_DIR}/bin/${system_name}-ranlib"
532549
COMMAND
533550
"${CMAKE_COMMAND}" -E copy_if_different
534-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-readelf"
551+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-readelf"
535552
"${INSTALL_DIR}/bin/${system_name}-readelf"
536553
COMMAND
537554
"${CMAKE_COMMAND}" -E copy_if_different
538-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-size"
555+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-size"
539556
"${INSTALL_DIR}/bin/${system_name}-size"
540557
COMMAND
541558
"${CMAKE_COMMAND}" -E copy_if_different
542-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-strings"
559+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-strings"
543560
"${INSTALL_DIR}/bin/${system_name}-strings"
544561
COMMAND
545562
"${CMAKE_COMMAND}" -E copy_if_different
546-
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${sdk_host}-x86_64/bin/arm-linux-androideabi-strip"
563+
"${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ndk_host}-x86_64/bin/arm-linux-androideabi-strip"
547564
"${INSTALL_DIR}/bin/${system_name}-strip"
548565
>
549566
]]

0 commit comments

Comments
 (0)