Android: CMAKE_ANDROID_NDK_VERSION not defined with legacy NDK toolchain file
CMAKE_ANDROID_NDK_VERSION
is skipped when CMAKE_SYSTEM_VERSION
equals 1
https://gitlab.kitware.com/cmake/cmake/-/blob/v3.25.2/Modules/Platform/Android-Determine.cmake#L23
which will set the -fuse-ld=gold
, cause link error
https://gitlab.kitware.com/cmake/cmake/-/blob/v3.25.2/Modules/Compiler/Clang.cmake#L83
move CMAKE_ANDROID_NDK_VERSION
to the top might solve this
diff --git a/Modules/Platform/Android-Determine.cmake b/Modules/Platform/Android-Determine.cmake
index 715f68bb4e..824e790d1d 100644
--- a/Modules/Platform/Android-Determine.cmake
+++ b/Modules/Platform/Android-Determine.cmake
@@ -11,6 +11,44 @@ if(CMAKE_ANDROID_NDK)
include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Determine.cmake OPTIONAL)
endif()
+if(CMAKE_ANDROID_NDK AND EXISTS "${CMAKE_ANDROID_NDK}/source.properties")
+ # Android NDK revision
+ # Possible formats:
+ # * r16, build 1234: 16.0.1234
+ # * r16b, build 1234: 16.1.1234
+ # * r16 beta 1, build 1234: 16.0.1234-beta1
+ #
+ # Canary builds are not specially marked.
+ file(READ "${CMAKE_ANDROID_NDK}/source.properties" _ANDROID_NDK_SOURCE_PROPERTIES)
+
+ set(_ANDROID_NDK_REVISION_REGEX
+ "^Pkg\\.Desc = Android NDK\nPkg\\.Revision = ([0-9]+)\\.([0-9]+)\\.([0-9]+)(-beta([0-9]+))?")
+ if(NOT _ANDROID_NDK_SOURCE_PROPERTIES MATCHES "${_ANDROID_NDK_REVISION_REGEX}")
+ string(REPLACE "\n" "\n " _ANDROID_NDK_SOURCE_PROPERTIES "${_ANDROID_NDK_SOURCE_PROPERTIES}")
+ message(FATAL_ERROR
+ "Android: Failed to parse NDK revision from:\n"
+ " ${CMAKE_ANDROID_NDK}/source.properties\n"
+ "with content:\n"
+ " ${_ANDROID_NDK_SOURCE_PROPERTIES}")
+ endif()
+
+ set(_ANDROID_NDK_MAJOR "${CMAKE_MATCH_1}")
+ set(_ANDROID_NDK_MINOR "${CMAKE_MATCH_2}")
+ set(_ANDROID_NDK_BUILD "${CMAKE_MATCH_3}")
+ set(_ANDROID_NDK_BETA "${CMAKE_MATCH_5}")
+ if(_ANDROID_NDK_BETA STREQUAL "")
+ set(_ANDROID_NDK_BETA "0")
+ endif()
+ set(CMAKE_ANDROID_NDK_VERSION "${_ANDROID_NDK_MAJOR}.${_ANDROID_NDK_MINOR}")
+
+ unset(_ANDROID_NDK_SOURCE_PROPERTIES)
+ unset(_ANDROID_NDK_REVISION_REGEX)
+ unset(_ANDROID_NDK_MAJOR)
+ unset(_ANDROID_NDK_MINOR)
+ unset(_ANDROID_NDK_BUILD)
+ unset(_ANDROID_NDK_BETA)
+endif()
+
# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
# implemented in the CMake VS IDE generators. Avoid interfering with
# that functionality for now.
@@ -228,44 +266,6 @@ if(CMAKE_ANDROID_NDK)
include("${CMAKE_ANDROID_NDK}/build/cmake/abis.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_ABIS)
endif()
-if(CMAKE_ANDROID_NDK AND EXISTS "${CMAKE_ANDROID_NDK}/source.properties")
- # Android NDK revision
- # Possible formats:
- # * r16, build 1234: 16.0.1234
- # * r16b, build 1234: 16.1.1234
- # * r16 beta 1, build 1234: 16.0.1234-beta1
- #
- # Canary builds are not specially marked.
- file(READ "${CMAKE_ANDROID_NDK}/source.properties" _ANDROID_NDK_SOURCE_PROPERTIES)
-
- set(_ANDROID_NDK_REVISION_REGEX
- "^Pkg\\.Desc = Android NDK\nPkg\\.Revision = ([0-9]+)\\.([0-9]+)\\.([0-9]+)(-beta([0-9]+))?")
- if(NOT _ANDROID_NDK_SOURCE_PROPERTIES MATCHES "${_ANDROID_NDK_REVISION_REGEX}")
- string(REPLACE "\n" "\n " _ANDROID_NDK_SOURCE_PROPERTIES "${_ANDROID_NDK_SOURCE_PROPERTIES}")
- message(FATAL_ERROR
- "Android: Failed to parse NDK revision from:\n"
- " ${CMAKE_ANDROID_NDK}/source.properties\n"
- "with content:\n"
- " ${_ANDROID_NDK_SOURCE_PROPERTIES}")
- endif()
-
- set(_ANDROID_NDK_MAJOR "${CMAKE_MATCH_1}")
- set(_ANDROID_NDK_MINOR "${CMAKE_MATCH_2}")
- set(_ANDROID_NDK_BUILD "${CMAKE_MATCH_3}")
- set(_ANDROID_NDK_BETA "${CMAKE_MATCH_5}")
- if(_ANDROID_NDK_BETA STREQUAL "")
- set(_ANDROID_NDK_BETA "0")
- endif()
- set(CMAKE_ANDROID_NDK_VERSION "${_ANDROID_NDK_MAJOR}.${_ANDROID_NDK_MINOR}")
-
- unset(_ANDROID_NDK_SOURCE_PROPERTIES)
- unset(_ANDROID_NDK_REVISION_REGEX)
- unset(_ANDROID_NDK_MAJOR)
- unset(_ANDROID_NDK_MINOR)
- unset(_ANDROID_NDK_BUILD)
- unset(_ANDROID_NDK_BETA)
-endif()
-
if(CMAKE_ANDROID_NDK)
# Identify the host platform.
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
Or use ANDROID_NDK_REVISION
instead
diff --git a/Modules/Platform/Android-Determine.cmake b/Modules/Platform/Android-Determine.cmake
index 715f68bb4e..73baa13359 100644
--- a/Modules/Platform/Android-Determine.cmake
+++ b/Modules/Platform/Android-Determine.cmake
@@ -11,6 +11,10 @@ if(CMAKE_ANDROID_NDK)
include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Determine.cmake OPTIONAL)
endif()
+if(ANDROID_NDK_REVISION AND NOT CMAKE_ANDROID_NDK_VERSION)
+ set(CMAKE_ANDROID_NDK_VERSION "${ANDROID_NDK_REVISION}")
+endif()
+
# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
# implemented in the CMake VS IDE generators. Avoid interfering with
# that functionality for now.