mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
Android: ensure PIE behavior is consistent regardless CMP0083 policy
In commit c4b4d8b3a6 (POSITION_INDEPENDENT_CODE: Manage link flags for
executables, 2018-10-02, v3.14.0-rc1~395^2) we accidentally removed our
Android-specific logic for PIE under the CMP0083 OLD behavior. Restore
it and also implement Android-specific logic for CMP0083 NEW behavior.
Fixes: #19393
This commit is contained in:
@@ -28,6 +28,12 @@ This policy was introduced in CMake version 3.14. Use the
|
||||
Unlike most policies, CMake version |release| does not warn when this policy is
|
||||
not set and simply uses ``OLD`` behavior.
|
||||
|
||||
.. Note::
|
||||
|
||||
Android platform has a special handling of ``PIE`` so it is not required
|
||||
to use the :module:`CheckPIESupported` module to ensure flags are passed to
|
||||
the linker.
|
||||
|
||||
.. include:: DEPRECATED.txt
|
||||
|
||||
Examples
|
||||
|
||||
@@ -12,6 +12,26 @@ if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
cmake_policy(GET CMP0083 _CMP0083)
|
||||
if(_CMP0083 STREQUAL NEW)
|
||||
# PIE Flags are managed by compiler configuration files
|
||||
if(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 16)
|
||||
# ensure PIE flags are passed to the linker
|
||||
set(CMAKE_C_LINK_PIE_SUPPORTED YES CACHE INTERNAL "PIE (C)")
|
||||
set(CMAKE_CXX_LINK_PIE_SUPPORTED YES CACHE INTERNAL "PIE (CXX)")
|
||||
if(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 21)
|
||||
# no PIE executable are no longer supported
|
||||
set(CMAKE_C_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (C)")
|
||||
set(CMAKE_CXX_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (CXX)")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
if(CMAKE_POSITION_INDEPENDENT_CODE)
|
||||
string(APPEND _ANDROID_ABI_INIT_EXE_LDFLAGS " -fPIE -pie")
|
||||
endif()
|
||||
endif()
|
||||
unset(_CMP0083)
|
||||
|
||||
string(APPEND _ANDROID_ABI_INIT_EXE_LDFLAGS " -Wl,--gc-sections")
|
||||
|
||||
if(NOT _ANDROID_ABI_INIT_EXE_LDFLAGS_NO_nocopyreloc)
|
||||
|
||||
Reference in New Issue
Block a user