diff options
author | Andy Maloney <asmaloney@gmail.com> | 2022-12-23 12:38:35 -0500 |
---|---|---|
committer | Andy Maloney <asmaloney@gmail.com> | 2023-02-07 10:24:25 -0500 |
commit | 237903495820596ebd9b65d810dd6bcd04dc113c (patch) | |
tree | 2987a69f3846fdf114cab9296f45cd57247499a8 /CMakeLists.txt | |
parent | 50e97de6365957134ade2820b2bbf52c866c0f9a (diff) | |
download | redot-cpp-237903495820596ebd9b65d810dd6bcd04dc113c.tar.gz |
{cmake} Use STATIC and POSITION_INDEPENDENT_CODE
Instead of specifying flags manually, use CMake.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8afb478..49d5988 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,11 @@ if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME}) set(GODOT_CPP_BUILDING_SELF ON) endif() +# Set some helper variables for readability +set( compiler_is_clang "$<OR:$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:Clang>>" ) +set( compiler_is_gnu "$<CXX_COMPILER_ID:GNU>" ) +set( compiler_is_msvc "$<CXX_COMPILER_ID:MSVC>" ) + # Default build type is Debug in the SConstruct if("${CMAKE_BUILD_TYPE}" STREQUAL "") set(CMAKE_BUILD_TYPE Debug) @@ -78,7 +83,6 @@ if (NOT "${GODOT_CUSTOM_API_FILE}" STREQUAL "") # User-defined override. endif() set(GODOT_COMPILE_FLAGS ) -set(GODOT_LINKER_FLAGS ) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # using Visual Studio C++ @@ -94,11 +98,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") add_definitions(-DNOMINMAX) else() # GCC/Clang - set(GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'") - - if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") - set(GODOT_COMPILE_FLAGS "-fPIC") - endif() set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -g") if(CMAKE_BUILD_TYPE MATCHES Debug) @@ -135,7 +134,7 @@ file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.c**) file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS include/*.h**) # Define our godot-cpp library -add_library(${PROJECT_NAME} +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS} ${GENERATED_FILES_LIST} @@ -160,11 +159,18 @@ target_compile_definitions(${PROJECT_NAME} PUBLIC DEBUG_ENABLED DEBUG_METHODS_ENABLED > + $<${compiler_is_msvc}: + TYPED_METHOD_BIND + > ) -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - target_compile_definitions(${PROJECT_NAME} PUBLIC TYPED_METHOD_BIND) -endif() +target_link_options(${PROJECT_NAME} PRIVATE + $<$<NOT:${compiler_is_msvc}>: + -static-libgcc + -static-libstdc++ + -Wl,-R,'$$ORIGIN' + > +) # Optionally mark headers as SYSTEM set(GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE "") @@ -180,7 +186,6 @@ target_include_directories(${PROJECT_NAME} ${GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE} # Add the compile flags set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS}) -set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS}) # Create the correct name (godot.os.build_type.system_bits) string(TOLOWER "${CMAKE_SYSTEM_NAME}" SYSTEM_NAME) @@ -199,6 +204,7 @@ endif() set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF + POSITION_INDEPENDENT_CODE ON ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" |