@@ -68,10 +68,19 @@ macro(set_c_cxx_flag FLAG)
6868 set_c_flag (${FLAG} ${ARGN} )
6969 set_cxx_flag (${FLAG} ${ARGN} )
7070endmacro ()
71+
72+ macro (set_kind_linker_flag KIND FLAG )
73+ if (KIND STREQUAL "exe" )
74+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG} " )
75+ set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAG} " )
76+ else ()
77+ set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAG} " )
78+ endif ()
79+ endmacro ()
80+
7181macro (set_linker_flag FLAG )
72- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG} " )
73- set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAG} " )
74- set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAG} " )
82+ set_kind_linker_flag ("exe" FLAG )
83+ set_kind_linker_flag ("shared" FLAG )
7584endmacro ()
7685
7786function (try_flag LIST FLAG )
@@ -142,6 +151,16 @@ macro(try_linker_flag PROP FLAG)
142151 endif ()
143152endmacro ()
144153
154+ macro (try_kind_linker_flag KIND PROP FLAG )
155+ # Check it with the C compiler
156+ set (CMAKE_REQUIRED_FLAGS ${FLAG} )
157+ check_C_compiler_flag (${FLAG} FLAG_${PROP} )
158+ set (CMAKE_REQUIRED_FLAGS "" )
159+ if (FLAG_${PROP} )
160+ set_kind_linker_flag (${KIND} ${FLAG} ${ARGN} )
161+ endif ()
162+ endmacro ()
163+
145164if (BE_VERBOSE)
146165 set (WARNMODE "no-error=" )
147166else ()
@@ -335,9 +354,15 @@ else()
335354 try_c_cxx_flag (WSTACK_PROTECTOR "-Wstack-protector" )
336355
337356 if (NOT NACL OR (NACL AND GAME_PIE))
338- try_c_cxx_flag (FPIE "-fPIE" )
357+ if (BUILD_GAME_NATIVE_DLL AND (BUILD_CGAME OR BUILD_SGAME))
358+ try_c_cxx_flag (FPIE "-fPIC" )
359+ else ()
360+ try_c_cxx_flag (FPIE "-fPIE" )
361+ endif ()
362+
339363 if (NOT APPLE )
340- try_linker_flag (LINKER_PIE "-pie" )
364+ try_kind_linker_flag ("shared" LINKER_PIE "-pic" )
365+ try_kind_linker_flag ("exe" LINKER_PIE "-pie" )
341366 endif ()
342367 endif ()
343368
0 commit comments