fix: auto-detect winsysroot from msbuild location & replace /winsysroot with explicit -imsvc paths

This commit is contained in:
DwifteJB 2026-03-04 21:15:46 +00:00
parent b87774ab33
commit bf31940091
No known key found for this signature in database
GPG key ID: E9A084A6DBE8B6A0

View file

@ -7,10 +7,44 @@ set(CMAKE_LINKER lld-link)
set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC) set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC)
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC) set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC)
add_compile_options(/winsysroot /opt/msvc --target=x86_64-pc-windows-msvc -fms-compatibility -fms-extensions -fdelayed-template-parsing) # rm: locate winsysroot via the msbuild.exe path
add_link_options(/winsysroot:/opt/msvc) find_program(_msbuild_exe msbuild)
if(_msbuild_exe)
get_filename_component(_msbuild_bin ${_msbuild_exe} DIRECTORY) # .../bin/x64
get_filename_component(_candidate "${_msbuild_bin}/.." ABSOLUTE) # .../bin
if(NOT IS_DIRECTORY "${_candidate}/vc")
get_filename_component(_candidate "${_candidate}/.." ABSOLUTE) # .../<root>
endif()
set(MSVC_WINSYSROOT ${_candidate})
else()
# rm: assume /opt/msvc as a fallback (which is usually the default path)
set(MSVC_WINSYSROOT /opt/msvc)
endif()
#set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /I /opt/msvc/kits/10/include/10.0.26100.0/shared <DEFINES> /fo<OBJECT> <SOURCE>") # rm: detect msvc version
file(GLOB _msvc_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/VC/Tools/MSVC/*)
list(GET _msvc_versions 0 _msvc_dir)
# rm: detect window sdk version
file(GLOB _winsdk_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/kits/10/Include/*)
list(GET _winsdk_versions 0 _winsdk_dir)
get_filename_component(_winsdk_ver ${_winsdk_dir} NAME)
add_compile_options(
--target=x86_64-pc-windows-msvc
-fms-compatibility
-fms-extensions
-fdelayed-template-parsing
# rm: paths to msvc and windows sdk headers
"-imsvc${_msvc_dir}/include"
"-imsvc${_msvc_dir}/atlmfc/include"
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/ucrt"
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/um"
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/shared"
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/winrt"
)
add_link_options(/winsysroot:${MSVC_WINSYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)