From af1ed052976182af12c296aeba4e44f9fbdc1d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Sat, 17 Apr 2021 10:33:34 +0200 Subject: [PATCH] Pass linker flags to Mono build on Android correctly (#51403) We were setting `_MonoLDFLAGS` in mono.proj but never passed the values down into CMake. --- src/libraries/Native/Unix/configure.cmake | 2 +- src/mono/CMakeLists.txt | 3 +++ src/mono/mono.proj | 11 ----------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/libraries/Native/Unix/configure.cmake b/src/libraries/Native/Unix/configure.cmake index 674375cdd9e..c430c64f7fe 100644 --- a/src/libraries/Native/Unix/configure.cmake +++ b/src/libraries/Native/Unix/configure.cmake @@ -60,7 +60,7 @@ endif() # Older CMake versions (3.8) do not assign the result of their tests, causing unused-value errors # which are not distinguished from the test failing. So no error for that one. # For clang-5.0 avoid errors like "unused variable 'err' [-Werror,-Wunused-variable]". -set(CMAKE_REQUIRED_FLAGS "-Werror -Wno-error=unused-value -Wno-error=unused-variable") +set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror -Wno-error=unused-value -Wno-error=unused-variable") # Apple platforms like macOS/iOS allow targeting older operating system versions with a single SDK, # the mere presence of a symbol in the SDK doesn't tell us whether the deployment target really supports it. diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt index d1ff67be101..1437fc59feb 100644 --- a/src/mono/CMakeLists.txt +++ b/src/mono/CMakeLists.txt @@ -213,6 +213,9 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") set(HOST_LINUX 1) add_definitions(-D_GNU_SOURCE -D_REENTRANT) add_definitions(-D_THREAD_SAFE) + add_compile_options(-Wl,-z,now) + add_compile_options(-Wl,-z,relro) + add_compile_options(-Wl,-z,noexecstack) # The normal check fails because it uses --isystem /sysroot/usr/include set(HAVE_USR_INCLUDE_MALLOC_H 1) set(HOST_ANDROID 1) diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 6b105d8755e..c41d29595c8 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -249,7 +249,6 @@ <_MonoCMakeArgs Include="-DCMAKE_OSX_DEPLOYMENT_TARGET=$(macOSVersionMin)" /> <_MonoCFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> - <_MonoLDFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> <_MonoBuildEnv Condition="'$(BuildArchitecture)' == 'arm64'" Include="arch -arch arm64" /> @@ -264,7 +263,6 @@ <_MonoCXXFlags Condition="'$(TargetArchitecture)' == 'arm64'" Include="-target arm64-apple-ios14.2-macabi" /> <_MonoCXXFlags Condition="'$(TargetArchitecture)' == 'x64'" Include="-target x86_64-apple-ios13.5-macabi" /> <_MonoCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> - <_MonoLDFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> <_MonoBuildEnv Condition="'$(BuildArchitecture)' == 'arm64'" Include="arch -arch arm64" /> @@ -378,15 +376,6 @@ <_MonoCXXFLAGS Condition="'$(Platform)' == 'arm64' or '$(Platform)' == 'arm'" Include="-DSK_RELEASE" /> <_MonoCXXFLAGS Condition="'$(Platform)' == 'arm64' or '$(Platform)' == 'arm'" Include="-DNDEBUG" /> <_MonoCXXFLAGS Condition="'$(Platform)' == 'arm64' or '$(Platform)' == 'arm'" Include="-UDEBUG" /> - - <_MonoLDFLAGS Include="-z now" /> - <_MonoLDFLAGS Include="-z relro" /> - <_MonoLDFLAGS Include="-z noexecstack" /> - <_MonoLDFLAGS Include="-ldl" /> - <_MonoLDFLAGS Include="-lm" /> - <_MonoLDFLAGS Include="-llog" /> - <_MonoLDFLAGS Include="-lc" /> - <_MonoLDFLAGS Include="-lgcc" /> -- GitLab