@@ -7,57 +7,65 @@ cmake_minimum_required(VERSION 3.20)
7
7
cmake_policy (SET CMP0072 OLD ) #not yet, would need to get pointers to all OpenGL functions
8
8
set (OpenGL_GL_PREFERENCE LEGACY )
9
9
#cmake_policy(SET CMP )
10
- option (NBL_BUILD_ANDROID "Build for Android?" OFF )
10
+ set (NBL_BUILD_ANDROID OFF )
11
11
12
- if (DEFINED CMAKE_TOOLCHAIN_FILE ) # TODO - validate paths due to CMake path-policy (errors when no path passed in)
13
- cmake_path (GET CMAKE_TOOLCHAIN_FILE FILENAME _NBL_CMAKE_TOOLCHAIN_FILENAME_ )
12
+ if (DEFINED CMAKE_TOOLCHAIN_FILE )
13
+
14
+ if (EXISTS "${CMAKE_TOOLCHAIN_FILE} " )
15
+ cmake_path (GET CMAKE_TOOLCHAIN_FILE FILENAME _NBL_CMAKE_TOOLCHAIN_FILENAME_ )
16
+ else ()
17
+ message (FATAL_ERROR "CMAKE_TOOLCHAIN_FILE as '${CMAKE_TOOLCHAIN_FILE} ' is invalid!" )
18
+ endif ()
14
19
15
20
if (${_NBL_CMAKE_TOOLCHAIN_FILENAME_} STREQUAL "android.toolchain.cmake" )
16
21
message (STATUS "Found Android toolchain! Validating..." )
17
22
18
- set (_NBL_SUPPORTED_NDK_ "android-ndk-r22b" ) # supported NDK version
19
- set (_NBL_SUPPORTED_ABI_ "x86_64" ) # supported ABI
20
-
21
- # quering ${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_}/${_NBL_SUPPORTED_NDK_}/build/cmake/android.toolchain.cmake
22
- cmake_path (GET CMAKE_TOOLCHAIN_FILE PARENT_PATH _NBL_TOOLCHAIN_NDK_CMAKE_DIRECTORY_ )
23
- cmake_path (GET _NBL_TOOLCHAIN_NDK_CMAKE_DIRECTORY_ PARENT_PATH _NBL_TOOLCHAIN_NDK_BUILD_DIRECTORY_ )
24
- cmake_path (GET _NBL_TOOLCHAIN_NDK_BUILD_DIRECTORY_ PARENT_PATH _NBL_TOOLCHAIN_NDK_ROOT_DIRECTORY_ )
25
- cmake_path (GET _NBL_TOOLCHAIN_NDK_ROOT_DIRECTORY_ PARENT_PATH _NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_ )
26
-
27
- string (LENGTH ${CMAKE_TOOLCHAIN_FILE} _NBL_CMAKE_TOOLCHAIN_FILE_LENGTH_ )
28
- string (LENGTH ${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_} _NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_LENGTH_ )
29
- math (EXPR _NBL_PARENT_NDK_TO_TOOLCHAIN_FILE_LENGTH_ "${_NBL_CMAKE_TOOLCHAIN_FILE_LENGTH_} - ${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_LENGTH_} " OUTPUT_FORMAT DECIMAL )
30
- string (SUBSTRING ${CMAKE_TOOLCHAIN_FILE} ${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_LENGTH_} ${_NBL_PARENT_NDK_TO_TOOLCHAIN_FILE_LENGTH_} _NBL_PARENT_NDK_TO_TOOLCHAIN_FILEPATH_ )
31
-
32
- if (${_NBL_PARENT_NDK_TO_TOOLCHAIN_FILEPATH_} STREQUAL "/${_NBL_SUPPORTED_NDK_} /build/cmake/android.toolchain.cmake" )
33
- message (STATUS "Found Android NDK '${_NBL_SUPPORTED_NDK_} ' is appropriate!" )
34
- else ()
35
- message (FATAL_ERROR "Found Android NDK version isn't appropriate. Use '${_NBL_SUPPORTED_NDK_} '!" )
36
- endif ()
23
+ set (_NBL_SUPPORTED_ABI_
24
+ "x86_64"
25
+ # "arm64-v8a" in future
26
+ )
37
27
38
- if (EXISTS " ${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_} /build-tools" )
39
- if ( DEFINED ANDROID_ABI )
40
- if ( ${ANDROID_ABI} STREQUAL ${ _NBL_SUPPORTED_ABI_} )
41
- message ( STATUS "Supported ' ${_NBL_SUPPORTED_ABI_} ' ABI!" )
42
-
43
- else ( )
44
- message ( FATAL_ERROR "Found ' ${ANDROID_ABI} ' isn't appropriate. Use ' ${_NBL_SUPPORTED_ABI_} '!" )
28
+ if (DEFINED ANDROID_ABI ) # see _NBL_SUPPORTED_ABI_
29
+ set ( FOUND 0 )
30
+ foreach ( CURRENT_ABI IN LISTS _NBL_SUPPORTED_ABI_ )
31
+ if ( " ${CURRENT_ABI} " STREQUAL ${ANDROID_ABI} )
32
+ message ( STATUS "Selecting found ${CURRENT_ABI} ABI!" )
33
+ set ( FOUND 1 )
34
+ break ( )
45
35
endif ()
36
+ endforeach ()
37
+
38
+ if (NOT FOUND )
39
+ message (FATAL_ERROR "Selected ${ANDROID_ABI} isn't appropriate. Supported ABIs: ${_NBL_SUPPORTED_ABI_} !" )
46
40
else ()
47
- message (STATUS "Could not find 'ANDROID_ABI', using supported ABI: '${_NBL_SUPPORTED_ABI_} '" )
48
- set (ANDROID_ABI ${_NBL_SUPPORTED_ABI_} CACHE INTERNAL "" FORCE )
41
+ unset (FOUND )
49
42
endif ()
43
+ else ()
44
+ message (FATAL_ERROR "ANDROID_ABI must be specified at the very beginning of execution!" )
45
+ endif ()
46
+
47
+ if (NOT DEFINED ANDROID_PLATFORM ) # android-28
48
+ message (FATAL_ERROR "ANDROID_PLATFORM must be specified at the very beginning of execution!" )
49
+ endif ()
50
+
51
+ include (${CMAKE_TOOLCHAIN_FILE} )
52
+
53
+ if (${ANDROID_NDK_MAJOR} LESS 22 )
54
+ message (FATAL_ERROR "Update your NDK to at least 22. We don't support ${ANDROID_NDK_REVISION} NDK version!" )
55
+ endif ()
50
56
51
- message (STATUS "'${_NBL_SUPPORTED_NDK_} ' located in Android SDK path. Building Nabla with Android toolchain!" )
57
+ # note that we assume NDK has been installed using Android Studio, so the existing paths should look as followning:
58
+ # ${ANDROID_SDK_ROOT_PATH}/ndk/${ANDROID_NDK_REVISION}/build/cmake/android.toolchain.cmake
52
59
53
- set (ANDROID_SDK_ROOT_PATH "${_NBL_EXPECTED_ANDROID_SDK_ROOT_DIRECTORY_} " )
54
- set (ANDROID_NDK_ROOT_PATH ${ANDROID_SDK_ROOT_PATH} /${_NBL_SUPPORTED_NDK_} )
55
-
56
- set (NBL_BUILD_ANDROID ON )
57
- set (_NBL_ANDROID_VALIDATED_ ON )
58
- else ()
59
- message (FATAL_ERROR "${_NBL_SUPPORTED_NDK_} must be placed in Android SDK path!" )
60
+ set (ANDROID_NDK_ROOT_PATH ${CMAKE_ANDROID_NDK} )
61
+ get_filename_component (ANDROID_SDK_ROOT_PATH "${ANDROID_NDK_ROOT_PATH} /../../" ABSOLUTE )
62
+
63
+ if (EXISTS "${ANDROID_SDK_ROOT_PATH} /build-tools" )
64
+ message (STATUS "Building Nabla with ${ANDROID_NDK_REVISION} NDK!" )
60
65
endif ()
66
+
67
+ set (NBL_BUILD_ANDROID ON )
68
+ set (_NBL_ANDROID_VALIDATED_ ON )
61
69
endif ()
62
70
63
71
# TODO - another toolchains in future
0 commit comments