From 83c41879acc79ff4aa47c3d1c5ec3a90182905b6 Mon Sep 17 00:00:00 2001 From: Matthias Goldhoorn Date: Mon, 23 Mar 2015 12:45:27 +0100 Subject: [PATCH 1/4] Remove stack smashing protector for Clang compilers for ruby-builds --- modules/RockRuby.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/RockRuby.cmake b/modules/RockRuby.cmake index 1bfdf60..a04352d 100644 --- a/modules/RockRuby.cmake +++ b/modules/RockRuby.cmake @@ -271,6 +271,11 @@ ELSEIF(NOT RUBY_EXTENSIONS_AVAILABLE) OUTPUT_VARIABLE RUBY_CFLAGS) STRING(REPLACE "\n" "" RUBY_CFLAGS ${RUBY_CFLAGS}) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + #Clang can't handle this option (04.2014) remove this flag therefore + STRING(REPLACE "-fstack-protector-strong" "" RUBY_CFLAGS ${RUBY_CFLAGS}) + endif() + function(ROCK_RUBY_EXTENSION target) INCLUDE_DIRECTORIES(${RUBY_INCLUDE_PATH}) list(GET ${RUBY_INCLUDE_PATH} 0 rubylib_path) From a039f771dd25ab8e655401010ac8e186544663ea Mon Sep 17 00:00:00 2001 From: Matthias Goldhoorn Date: Mon, 23 Mar 2015 12:56:30 +0100 Subject: [PATCH 2/4] Remove -z noexecstack for on clang compilers --- modules/RockRuby.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/RockRuby.cmake b/modules/RockRuby.cmake index a04352d..5ce2f0f 100644 --- a/modules/RockRuby.cmake +++ b/modules/RockRuby.cmake @@ -287,12 +287,12 @@ ELSEIF(NOT RUBY_EXTENSIONS_AVAILABLE) target_link_libraries(${target} ${RUBY_LIBRARY}) STRING(REGEX MATCH "arm.*" ARCH ${CMAKE_SYSTEM_PROCESSOR}) - IF(NOT APPLE) - IF("${ARCH}" STREQUAL "") + IF("${ARCH}" STREQUAL "") + if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set_target_properties(${target} PROPERTIES LINK_FLAGS "-z noexecstack") - ENDIF("${ARCH}" STREQUAL "") - ENDIF(NOT APPLE) + endif() + ENDIF("${ARCH}" STREQUAL "") SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "") endfunction() From 3225b2d79a3f38a82de902df820531dc3b1e555a Mon Sep 17 00:00:00 2001 From: Matthias Goldhoorn Date: Wed, 25 Mar 2015 14:54:22 +0100 Subject: [PATCH 3/4] Make compiler checks a bit less lazy Disable smash-protection only if clang does NOT support it set noexecstack the correct way for clang --- modules/RockRuby.cmake | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/RockRuby.cmake b/modules/RockRuby.cmake index 5ce2f0f..3f2fe85 100644 --- a/modules/RockRuby.cmake +++ b/modules/RockRuby.cmake @@ -271,9 +271,12 @@ ELSEIF(NOT RUBY_EXTENSIONS_AVAILABLE) OUTPUT_VARIABLE RUBY_CFLAGS) STRING(REPLACE "\n" "" RUBY_CFLAGS ${RUBY_CFLAGS}) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - #Clang can't handle this option (04.2014) remove this flag therefore - STRING(REPLACE "-fstack-protector-strong" "" RUBY_CFLAGS ${RUBY_CFLAGS}) + if("${RUBY_CFLAGS}" MATCHES "-fstack-protector-strong") + include(CheckCXXCompilerFlag) + CHECK_CXX_COMPILER_FLAG("-fstack-protector-strong" COMPILER_SUPPORTS_SMASH_PROTECTION) + if(NOT COMPILER_SUPPORTS_SMASH_PROTECTION) + STRING(REPLACE "-fstack-protector-strong" "" RUBY_CFLAGS ${RUBY_CFLAGS}) + endif() endif() function(ROCK_RUBY_EXTENSION target) @@ -288,10 +291,8 @@ ELSEIF(NOT RUBY_EXTENSIONS_AVAILABLE) STRING(REGEX MATCH "arm.*" ARCH ${CMAKE_SYSTEM_PROCESSOR}) IF("${ARCH}" STREQUAL "") - if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_target_properties(${target} PROPERTIES - LINK_FLAGS "-z noexecstack") - endif() + set_target_properties(${target} PROPERTIES + LINK_FLAGS "-Wl,-z,noexecstack") ENDIF("${ARCH}" STREQUAL "") SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "") endfunction() From 6120dc76cb381829f93e0947cf21e0cbbd26184c Mon Sep 17 00:00:00 2001 From: Matthias Goldhoorn Date: Fri, 17 Apr 2015 11:41:31 +0200 Subject: [PATCH 4/4] Check for noexexstack the right way instead diabling it hard on arm --- modules/RockRuby.cmake | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/RockRuby.cmake b/modules/RockRuby.cmake index 3f2fe85..5fdfbfa 100644 --- a/modules/RockRuby.cmake +++ b/modules/RockRuby.cmake @@ -288,12 +288,13 @@ ELSEIF(NOT RUBY_EXTENSIONS_AVAILABLE) SET_SOURCE_FILES_PROPERTIES(${ARGN} PROPERTIES COMPILE_FLAGS "${RUBY_CFLAGS}") rock_library_common(${target} MODULE ${ARGN}) target_link_libraries(${target} ${RUBY_LIBRARY}) + + include(CheckCXXCompilerFlag) + CHECK_CXX_COMPILER_FLAG("-Wl,-z,noexecstack" COMPILER_SUPPORTS_NOEXEXSTACK) + if(COMPILER_SUPPORTS_NOEXEXSTACK) + set_target_properties(${target} PROPERTIES LINK_FLAGS "-Wl,-z,noexecstack") + endif() - STRING(REGEX MATCH "arm.*" ARCH ${CMAKE_SYSTEM_PROCESSOR}) - IF("${ARCH}" STREQUAL "") - set_target_properties(${target} PROPERTIES - LINK_FLAGS "-Wl,-z,noexecstack") - ENDIF("${ARCH}" STREQUAL "") SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "") endfunction()