forked from weaselab/weaseljson
Only pass -pie when linking executables
Passing -pie globally made the driver link Scrt1.o into shared libraries, which fails with an undefined reference to main.
This commit is contained in:
+6
-2
@@ -51,12 +51,16 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||||||
add_compile_options("-Wno-maybe-uninitialized")
|
add_compile_options("-Wno-maybe-uninitialized")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(full_relro_flags "-pie;LINKER:-z,relro,-z,now,-z,noexecstack")
|
set(relro_flags "LINKER:-z,relro,-z,now,-z,noexecstack")
|
||||||
|
set(full_relro_flags "-pie;${relro_flags}")
|
||||||
cmake_push_check_state()
|
cmake_push_check_state()
|
||||||
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${full_relro_flags})
|
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${full_relro_flags})
|
||||||
check_cxx_source_compiles("int main(){}" HAS_FULL_RELRO FAIL_REGEX "warning:")
|
check_cxx_source_compiles("int main(){}" HAS_FULL_RELRO FAIL_REGEX "warning:")
|
||||||
if(HAS_FULL_RELRO)
|
if(HAS_FULL_RELRO)
|
||||||
add_link_options(${full_relro_flags})
|
# -pie only applies to executables; passing it when linking a shared library
|
||||||
|
# makes the driver pull in Scrt1.o, which requires main.
|
||||||
|
add_link_options("$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-pie>"
|
||||||
|
${relro_flags})
|
||||||
endif()
|
endif()
|
||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user