Skip to content

Commit

Permalink
Fix default behavior for API level clamping.
Browse files Browse the repository at this point in the history
When not specified this was evaluating to an empty string, so CMake
was receiving only one argument...

Test: added a test
Bug: android/ndk#1560
Change-Id: I1340a7b0afd271568c5f8aadbc4ca345479e95fa
  • Loading branch information
DanAlbert committed Sep 14, 2021
1 parent f3eb0df commit eaaf499
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 2 deletions.
3 changes: 1 addition & 2 deletions build/cmake/android.toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand Down
Empty file.
4 changes: 4 additions & 0 deletions tests/build/cmake_toolchain_defaults/project/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.6)
project(ToolchainDefaultsTest CXX)

add_library(foo SHARED foo.cpp)
8 changes: 8 additions & 0 deletions tests/build/cmake_toolchain_defaults/project/foo.cpp
Original file line number Diff line number Diff line change
@@ -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
51 changes: 51 additions & 0 deletions tests/build/cmake_toolchain_defaults/test.py
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions tests/build/cmake_toolchain_defaults/test_config.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit eaaf499

Please sign in to comment.