diff --git a/build/cmake/android.toolchain.cmake b/build/cmake/android.toolchain.cmake index 119e66b2..9a1dae2f 100644 --- a/build/cmake/android.toolchain.cmake +++ b/build/cmake/android.toolchain.cmake @@ -167,8 +167,7 @@ elseif(ANDROID_TOOLCHAIN STREQUAL gcc) endif() include(${CMAKE_ANDROID_NDK}/build/cmake/adjust_api_level.cmake) -adjust_api_level(${ANDROID_PLATFORM} CMAKE_SYSTEM_VERSION) -message(STATUS "CMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}") +adjust_api_level("${ANDROID_PLATFORM}" CMAKE_SYSTEM_VERSION) if(NOT DEFINED CMAKE_ANDROID_STL_TYPE AND DEFINED ANDROID_STL) set(CMAKE_ANDROID_STL_TYPE ${ANDROID_STL}) diff --git a/tests/build/cmake_toolchain_defaults/__init__.py b/tests/build/cmake_toolchain_defaults/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/build/cmake_toolchain_defaults/project/CMakeLists.txt b/tests/build/cmake_toolchain_defaults/project/CMakeLists.txt new file mode 100644 index 00000000..350b9bfd --- /dev/null +++ b/tests/build/cmake_toolchain_defaults/project/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.6) +project(ToolchainDefaultsTest CXX) + +add_library(foo SHARED foo.cpp) diff --git a/tests/build/cmake_toolchain_defaults/project/foo.cpp b/tests/build/cmake_toolchain_defaults/project/foo.cpp new file mode 100644 index 00000000..83e17815 --- /dev/null +++ b/tests/build/cmake_toolchain_defaults/project/foo.cpp @@ -0,0 +1,8 @@ +#if !defined(__ARM_ARCH_7A__) +#error ABI did not default to armeabi-v7a +#endif + +// Update this whenever we raise the minimum API level in the NDK. +#if __ANDROID_API__ != 19 +#error API level did not default to 19 +#endif diff --git a/tests/build/cmake_toolchain_defaults/test.py b/tests/build/cmake_toolchain_defaults/test.py new file mode 100644 index 00000000..f48a2a74 --- /dev/null +++ b/tests/build/cmake_toolchain_defaults/test.py @@ -0,0 +1,51 @@ +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +"""Check that the default CMake toolchain behavior works.""" +from pathlib import Path +import subprocess + +from ndk.cmake import find_cmake, find_ninja +from ndk.test.spec import BuildConfiguration, CMakeToolchainFile + + +def run_test(ndk_path: str, config: BuildConfiguration) -> tuple[bool, str]: + """Check that the default CMake toolchain behavior works. + + All our regular CMake tests pass the API level and ABI explicitly. This + test checks that the defaults (armeabi-v7a, minimum supported API level) + work. + """ + cmake = find_cmake() + ninja = find_ninja() + toolchain_path = Path(ndk_path) / 'build/cmake/android.toolchain.cmake' + project_path = 'project' + if config.toolchain_file is CMakeToolchainFile.Legacy: + toolchain_mode = 'ON' + else: + toolchain_mode = 'OFF' + cmake_cmd = [ + str(cmake), + f'-DCMAKE_TOOLCHAIN_FILE={toolchain_path}', + f'-DCMAKE_MAKE_PROGRAM={ninja}', + f'-DANDROID_USE_LEGACY_TOOLCHAIN_FILE={toolchain_mode}', + '-GNinja', + ] + result = subprocess.run(cmake_cmd, + check=False, + cwd=project_path, + capture_output=True, + text=True) + return result.returncode == 0, result.stdout diff --git a/tests/build/cmake_toolchain_defaults/test_config.py b/tests/build/cmake_toolchain_defaults/test_config.py new file mode 100644 index 00000000..aa58ee59 --- /dev/null +++ b/tests/build/cmake_toolchain_defaults/test_config.py @@ -0,0 +1,10 @@ +from typing import Optional + +from ndk.abis import LP32_ABIS +from ndk.test.types import Test + + +def build_unsupported(test: Test) -> Optional[str]: + if test.config.abi in LP32_ABIS: + return test.config.abi + return None