Skip to content

Commit

Permalink
Remove msvc flags and fix some win compilation issues
Browse files Browse the repository at this point in the history
1) Set MSVC_RUNTIME_LIBRARY instead of relying on global flags
2) memoverride.cpp is not usable on CMake Windows, because CMake default link libraries always link ucrt.lib
3) Use set_target_properties instead of set_property as it supports setting multiple props
  • Loading branch information
qubka committed Sep 3, 2024
1 parent 0f6723c commit 5a500a0
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 61 deletions.
18 changes: 12 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,19 @@ include("cmake/sourcesdk/targets/tier1.cmake")

add_library(${PROJECT_NAME} ${SOURCESDK_SOURCE_FILES} ${SOURCESDK_PROTO_SOURCE_FILES})

set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 17)
set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET ${PROJECT_NAME} PROPERTY C_EXTENSIONS OFF)
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF

C_STANDARD 17
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)

set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_EXTENSIONS OFF)
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

target_compile_options(${PROJECT_NAME} PRIVATE ${PLATFORM_COMPILER_OPTIONS} ${SOURCESDK_COMPILER_OPTIONS})
target_link_options(${PROJECT_NAME} PRIVATE ${PLATFORM_LINKER_OPTIONS} ${SOURCESDK_LINKER_OPTIONS})
Expand Down
27 changes: 2 additions & 25 deletions cmake/platform/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,10 @@ set(PLATFORM_COMPILER_OPTIONS
${PLATFORM_COMPILER_OPTIONS}

/wd4005 /wd4819 /wd4828 /wd5033
/permissive- /utf-8 /MP
/permissive- /utf-8
)

if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(PLATFORM_COMPILER_OPTIONS

${PLATFORM_COMPILER_OPTIONS}
/MT
/Zi
)
set(PLATFORM_LINKER_OPTIONS
${PLATFORM_LINKER_OPTIONS}

/OPT:REF
/OPT:ICF
)
set(PLATFORM_COMPILE_DEFINITIONS
${PLATFORM_COMPILE_DEFINITIONS}

-D_ITERATOR_DEBUG_LEVEL=0
)
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PLATFORM_COMPILER_OPTIONS
${PLATFORM_COMPILER_OPTIONS}

/MTd
)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PLATFORM_LINKER_OPTIONS
${PLATFORM_LINKER_OPTIONS}

Expand Down
3 changes: 3 additions & 0 deletions cmake/protobuf.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ set(${PROTOBUF_NAME}_INSTALL OFF CACHE BOOL "Install protobuf binaries and files
set(${PROTOBUF_NAME}_BUILD_TESTS OFF CACHE BOOL "Build tests")
add_subdirectory(${PROTOBUF_DIR} ${PROTOBUF_BINARY_DIR})
set_target_properties(${PROTOBUF_LIB_NAME} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
if(WIN32)
set_target_properties(${PROTOBUF_LIB_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
11 changes: 7 additions & 4 deletions cmake/sourcesdk.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,14 @@ set(SOURCESDK_INCLUDE_DIR
${SOURCESDK_DIR}
)

set(SOURCESDK_SOURCE_FILES
${SOURCESDK_SOURCE_FILES}
if(LINUX)
set(SOURCESDK_SOURCE_FILES
${SOURCESDK_SOURCE_FILES}

${SOURCESDK_DIR}/public/tier0/memoverride.cpp
)
# memoverride.cpp is not usable on CMake Windows, because CMake default link libraries always link ucrt.lib
${SOURCESDK_DIR}/public/tier0/memoverride.cpp
)
endif()

set(SOURCESDK_LIB_DIR ${SOURCESDK_DIR}/lib)

Expand Down
17 changes: 11 additions & 6 deletions cmake/sourcesdk/targets/entity2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,20 @@ set(SOURCESDK_ENTITY2_SOURCE_FILES

add_library(${SOURCESDK_ENTITY2_NAME} ${SOURCESDK_ENTITY2_SOURCE_FILES})

set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY C_STANDARD 17)
set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY C_EXTENSIONS OFF)
set_target_properties(${SOURCESDK_ENTITY2_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF

set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_ENTITY2_NAME} PROPERTY CXX_EXTENSIONS OFF)
C_STANDARD 17
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)

set_target_properties(${SOURCESDK_ENTITY2_NAME} PROPERTIES OUTPUT_NAME ${SOURCESDK_ENTITY2_OUTPUT_NAME})
if(WIN32)
set_target_properties(${SOURCESDK_ENTITY2_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

target_compile_options(${SOURCESDK_ENTITY2_NAME} PRIVATE ${PLATFORM_COMPILER_OPTIONS} ${SOURCESDK_ENTITY2_COMPILER_OPTIONS})
target_link_options(${SOURCESDK_ENTITY2_NAME} PRIVATE ${PLATFORM_LINKER_OPTIONS} ${SOURCESDK_ENTITY2_LINKER_OPTIONS})
Expand Down
19 changes: 12 additions & 7 deletions cmake/sourcesdk/targets/interfaces.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,20 @@ set(SOURCESDK_INTERFACES_SOURCE_FILES

add_library(${SOURCESDK_INTERFACES_NAME} ${SOURCESDK_INTERFACES_SOURCE_FILES})

set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY C_STANDARD 17)
set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY C_EXTENSIONS OFF)

set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_INTERFACES_NAME} PROPERTY CXX_EXTENSIONS OFF)
set_target_properties(${SOURCESDK_INTERFACES_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF

C_STANDARD 17
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)

set_target_properties(${SOURCESDK_INTERFACES_NAME} PROPERTIES OUTPUT_NAME ${SOURCESDK_INTERFACES_OUTPUT_NAME})
if(WIN32)
set_target_properties(${SOURCESDK_INTERFACES_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

target_compile_options(${SOURCESDK_INTERFACES_NAME} PRIVATE ${PLATFORM_COMPILER_OPTIONS} ${SOURCESDK_INTERFACES_COMPILER_OPTIONS})
target_link_options(${SOURCESDK_INTERFACES_NAME} PRIVATE ${PLATFORM_LINKER_OPTIONS} ${SOURCESDK_INTERFACES_LINKER_OPTIONS})
Expand Down
17 changes: 11 additions & 6 deletions cmake/sourcesdk/targets/mathlib.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,20 @@ set(SOURCESDK_MATHLIB_SOURCE_FILES

add_library(${SOURCESDK_MATHLIB_NAME} ${SOURCESDK_MATHLIB_SOURCE_FILES})

set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY C_STANDARD 17)
set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY C_EXTENSIONS OFF)
set_target_properties(${SOURCESDK_MATHLIB_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF

set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_MATHLIB_NAME} PROPERTY CXX_EXTENSIONS OFF)
C_STANDARD 17
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)

set_target_properties(${SOURCESDK_MATHLIB_NAME} PROPERTIES OUTPUT_NAME ${SOURCESDK_MATHLIB_OUTPUT_NAME})
if(WIN32)
set_target_properties(${SOURCESDK_MATHLIB_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

target_compile_options(${SOURCESDK_MATHLIB_NAME} PRIVATE ${PLATFORM_COMPILER_OPTIONS} ${SOURCESDK_MATHLIB_COMPILER_OPTIONS})
target_link_options(${SOURCESDK_MATHLIB_NAME} PRIVATE ${PLATFORM_LINKER_OPTIONS} ${SOURCESDK_MATHLIB_LINKER_OPTIONS})
Expand Down
19 changes: 12 additions & 7 deletions cmake/sourcesdk/targets/tier1.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,23 @@ set(SOURCESDK_TIER1_SOURCE_FILES

add_library(${SOURCESDK_TIER1_NAME} ${SOURCESDK_TIER1_SOURCE_FILES})

set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY C_STANDARD 17)
set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY C_EXTENSIONS OFF)
set_target_properties(${SOURCESDK_TIER1_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF

set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${SOURCESDK_TIER1_NAME} PROPERTY CXX_EXTENSIONS OFF)
C_STANDARD 17
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)

set_target_properties(${SOURCESDK_TIER1_NAME} PROPERTIES OUTPUT_NAME ${SOURCESDK_TIER1_OUTPUT_NAME})
if(WIN32)
set_target_properties(${SOURCESDK_TIER1_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

target_compile_options(${SOURCESDK_TIER1_NAME} PRIVATE ${PLATFORM_COMPILER_OPTIONS} ${SOURCESDK_TIER1_COMPILER_OPTIONS})
target_link_options(${SOURCESDK_TIER1_NAME} PRIVATE ${PLATFORM_LINKER_OPTIONS} ${SOURCESDK_TIER1_LINKER_OPTIONS})

target_compile_definitions(${SOURCESDK_TIER1_NAME} PRIVATE ${PLATFORM_COMPILE_DEFINITIONS} ${SOURCESDK_TIER1_COMPILE_DEFINTIONS})
target_include_directories(${SOURCESDK_TIER1_NAME} PRIVATE ${PLATFORM_INCLUDE_DIR} ${SOURCESDK_TIER1_INCLUDE_DIR})
target_include_directories(${SOURCESDK_TIER1_NAME} PRIVATE ${PLATFORM_INCLUDE_DIR} ${SOURCESDK_TIER1_INCLUDE_DIR})

0 comments on commit 5a500a0

Please sign in to comment.