Re-work compiler target options

This commit is contained in:
rtm516 2026-03-14 17:08:19 +00:00
parent 8c346e5f67
commit fe9c56f591
No known key found for this signature in database
GPG key ID: 331715B8B007C67A
3 changed files with 44 additions and 37 deletions

View file

@ -20,27 +20,42 @@ set(CMAKE_CONFIGURATION_TYPES
) )
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
function(configure_msvc_target target) function(configure_compiler_target target)
target_compile_options(${target} PRIVATE # MSVC and compatible compilers (like Clang-cl)
$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:/W3> if (MSVC)
$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/W0> target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:/MP> $<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:/W3>
$<$<COMPILE_LANGUAGE:C,CXX>:/FS> $<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/W0>
$<$<COMPILE_LANGUAGE:C,CXX>:/GS> $<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:CXX>:/EHsc> $<$<COMPILE_LANGUAGE:C,CXX>:/FS>
$<$<COMPILE_LANGUAGE:CXX>:/GR> $<$<COMPILE_LANGUAGE:C,CXX>:/GS>
$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:/Od> $<$<COMPILE_LANGUAGE:CXX>:/EHsc>
$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/GL /O2 /Oi /GT /GF> $<$<COMPILE_LANGUAGE:CXX>:/GR>
) $<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:/Od>
endfunction() $<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/O2 /Oi /GT /GF>
function(configure_clang_target target) )
target_compile_options(${target} PRIVATE endif()
$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:-O0 -Wall>
$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:-O2 -w -flto> # MSVC
) if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_link_options(${target} PRIVATE target_compile_options(${target} PRIVATE
$<$<CONFIG:Release>:-flto> $<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/GL>
) )
target_link_options(${target} PRIVATE
$<$<CONFIG:Release>:/LTCG:incremental>
)
endif()
# Clang
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${target} PRIVATE
$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:-O0 -Wall>
$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:-O2 -w -flto>
)
target_link_options(${target} PRIVATE
$<$<CONFIG:Release>:-flto>
)
endif()
endfunction() endfunction()

View file

@ -39,15 +39,8 @@ target_compile_definitions(Minecraft.Client PRIVATE
) )
target_precompile_headers(Minecraft.Client PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:stdafx.h>") target_precompile_headers(Minecraft.Client PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:stdafx.h>")
set_source_files_properties(compat_shims.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON) # This redefines internal MSVC CRT symbols which will cause an issue with PCH set_source_files_properties(compat_shims.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON) # This redefines internal MSVC CRT symbols which will cause an issue with PCH
if(MSVC)
configure_msvc_target(Minecraft.Client) configure_compiler_target(Minecraft.Client)
target_link_options(Minecraft.Client PRIVATE
$<$<CONFIG:Release>:/LTCG:incremental>
)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
configure_clang_target(Minecraft.Client)
endif()
set_target_properties(Minecraft.Client PROPERTIES set_target_properties(Minecraft.Client PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>" VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
@ -83,10 +76,13 @@ endforeach()
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/AssetCopyTargets.cmake") include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/AssetCopyTargets.cmake")
setup_asset_copy_targets() setup_asset_copy_targets()
# This is needed for VS to find the script, command line seems to work without it
set(COPY_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake")
# Copy redist files # Copy redist files
add_custom_target(CopyRedist ALL add_custom_target(CopyRedist ALL
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
"-DCOPY_SOURCE=${CMAKE_SOURCE_DIR}/x64/Release" "-DCOPY_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}/Windows64/Iggy/lib/redist64" # This will copy the windows redist regardless of platform
"-DCOPY_DEST=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>" "-DCOPY_DEST=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
-P "${COPY_SCRIPT}" -P "${COPY_SCRIPT}"
COMMENT "Copying redist files..." COMMENT "Copying redist files..."

View file

@ -26,9 +26,5 @@ target_compile_definitions(Minecraft.World PRIVATE
_LIB _LIB
) )
target_precompile_headers(Minecraft.World PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:stdafx.h>") target_precompile_headers(Minecraft.World PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:stdafx.h>")
if(MSVC)
configure_msvc_target(Minecraft.World) configure_compiler_target(Minecraft.World)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
configure_clang_target(Minecraft.World)
endif()