Skip to content

Commit 2379034

Browse files
committed
{cmake} Use STATIC and POSITION_INDEPENDENT_CODE
Instead of specifying flags manually, use CMake.
1 parent 50e97de commit 2379034

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

CMakeLists.txt

+17-11
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
5252
set(GODOT_CPP_BUILDING_SELF ON)
5353
endif()
5454

55+
# Set some helper variables for readability
56+
set( compiler_is_clang "$<OR:$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:Clang>>" )
57+
set( compiler_is_gnu "$<CXX_COMPILER_ID:GNU>" )
58+
set( compiler_is_msvc "$<CXX_COMPILER_ID:MSVC>" )
59+
5560
# Default build type is Debug in the SConstruct
5661
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
5762
set(CMAKE_BUILD_TYPE Debug)
@@ -78,7 +83,6 @@ if (NOT "${GODOT_CUSTOM_API_FILE}" STREQUAL "") # User-defined override.
7883
endif()
7984

8085
set(GODOT_COMPILE_FLAGS )
81-
set(GODOT_LINKER_FLAGS )
8286

8387
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
8488
# using Visual Studio C++
@@ -94,11 +98,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
9498

9599
add_definitions(-DNOMINMAX)
96100
else() # GCC/Clang
97-
set(GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'")
98-
99-
if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
100-
set(GODOT_COMPILE_FLAGS "-fPIC")
101-
endif()
102101
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -g")
103102

104103
if(CMAKE_BUILD_TYPE MATCHES Debug)
@@ -135,7 +134,7 @@ file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.c**)
135134
file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS include/*.h**)
136135

137136
# Define our godot-cpp library
138-
add_library(${PROJECT_NAME}
137+
add_library(${PROJECT_NAME} STATIC
139138
${SOURCES}
140139
${HEADERS}
141140
${GENERATED_FILES_LIST}
@@ -160,11 +159,18 @@ target_compile_definitions(${PROJECT_NAME} PUBLIC
160159
DEBUG_ENABLED
161160
DEBUG_METHODS_ENABLED
162161
>
162+
$<${compiler_is_msvc}:
163+
TYPED_METHOD_BIND
164+
>
163165
)
164166

165-
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
166-
target_compile_definitions(${PROJECT_NAME} PUBLIC TYPED_METHOD_BIND)
167-
endif()
167+
target_link_options(${PROJECT_NAME} PRIVATE
168+
$<$<NOT:${compiler_is_msvc}>:
169+
-static-libgcc
170+
-static-libstdc++
171+
-Wl,-R,'$$ORIGIN'
172+
>
173+
)
168174

169175
# Optionally mark headers as SYSTEM
170176
set(GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE "")
@@ -180,7 +186,6 @@ target_include_directories(${PROJECT_NAME} ${GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE}
180186

181187
# Add the compile flags
182188
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS})
183-
set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS})
184189

185190
# Create the correct name (godot.os.build_type.system_bits)
186191
string(TOLOWER "${CMAKE_SYSTEM_NAME}" SYSTEM_NAME)
@@ -199,6 +204,7 @@ endif()
199204
set_target_properties(${PROJECT_NAME}
200205
PROPERTIES
201206
CXX_EXTENSIONS OFF
207+
POSITION_INDEPENDENT_CODE ON
202208
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
203209
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
204210
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"

cmake/GodotCompilerWarnings.cmake

-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
# Add warnings based on compiler & version
22
# Set some helper variables for readability
3-
set( compiler_is_clang "$<OR:$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:Clang>>" )
4-
set( compiler_is_gnu "$<CXX_COMPILER_ID:GNU>" )
5-
set( compiler_is_msvc "$<CXX_COMPILER_ID:MSVC>" )
6-
73
set( compiler_less_than_v8 "$<VERSION_LESS:$<CXX_COMPILER_VERSION>,8>" )
84
set( compiler_greater_than_or_equal_v9 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,9>" )
95
set( compiler_greater_than_or_equal_v11 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,11>" )

0 commit comments

Comments
 (0)