mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 19:00:54 -06:00
Android: Pass sysroot include directory explicitly
The NDK's `build/core/definitions.mk` file adds compiler flags:
-isystem $$(call host-path,$$(SYSROOT_INC)/usr/include)
This passes the system include directory explicitly even though it is
implied by `--sysroot=`. The explicit flag places the directory
earlier in the include path than the sysroot-default one would be.
Teach CMake to add this include directory at the end of the standard
include path for Android. Otherwise the toolchain's `include-fixed/`
directory may replace system headers with "fixed" copies that are not
from the same API version.
Closes: #16536
This commit is contained in:
@@ -149,4 +149,13 @@ macro(__android_compiler_common lang)
|
||||
if("x${lang}" STREQUAL "xCXX")
|
||||
__android_stl(CXX)
|
||||
endif()
|
||||
|
||||
# <ndk>/build/core/definitions.mk appends the sysroot's include directory
|
||||
# explicitly at the end of the command-line include path so that it
|
||||
# precedes the toolchain's builtin include directories. This is
|
||||
# necessary so that Android API-version-specific headers are preferred
|
||||
# over those in the toolchain's `include-fixed` directory (which cannot
|
||||
# possibly match all versions).
|
||||
list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES "${CMAKE_SYSROOT}/usr/include")
|
||||
list(REMOVE_ITEM CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include")
|
||||
endmacro()
|
||||
|
||||
Reference in New Issue
Block a user