fix linux toolchain always failing to find msvc toolchain and hardcoding /opt/msvc

This commit is contained in:
halogen 2026-03-04 23:04:36 -05:00
parent da6c15e6a9
commit 8b079f45e9

View file

@ -7,44 +7,35 @@ 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)
# rm: locate winsysroot via the msbuild.exe path # TODO add check that WINDOWS_SDK_PATH is real
find_program(_msbuild_exe msbuild)
if(_msbuild_exe) set(WINDOWS_SDK_PATH "" CACHE PATH "Path to Windows SDK root")
get_filename_component(_msbuild_bin ${_msbuild_exe} DIRECTORY) # .../bin/x64 set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES WINDOWS_SDK_PATH) # You have no idea how much suffering I went through to get this solution. I hate this build system with all my
get_filename_component(_candidate "${_msbuild_bin}/.." ABSOLUTE) # .../bin
if(NOT IS_DIRECTORY "${_candidate}/vc") message(STATUS "WINDOWS_SDK_PATH=${WINDOWS_SDK_PATH}")
get_filename_component(_candidate "${_candidate}/.." ABSOLUTE) # .../<root>
endif() if(NOT EXISTS "${WINDOWS_SDK_PATH}/kits/10/Include")
set(MSVC_WINSYSROOT ${_candidate}) message(FATAL_ERROR "Invalid WINDOWS_SDK_PATH: ${WINDOWS_SDK_PATH}")
else()
# rm: assume /opt/msvc as a fallback (which is usually the default path)
set(MSVC_WINSYSROOT /opt/msvc)
endif() endif()
# rm: detect msvc version file(GLOB _winsdk_versions LIST_DIRECTORIES true
file(GLOB _msvc_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/VC/Tools/MSVC/*) "${WINDOWS_SDK_PATH}/kits/10/Include/*")
list(GET _msvc_versions 0 _msvc_dir)
if(NOT _winsdk_versions)
message(FATAL_ERROR "No Windows SDK versions found")
endif()
# rm: detect window sdk version
file(GLOB _winsdk_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/kits/10/Include/*)
list(GET _winsdk_versions 0 _winsdk_dir) list(GET _winsdk_versions 0 _winsdk_dir)
get_filename_component(_winsdk_ver ${_winsdk_dir} NAME) get_filename_component(_winsdk_ver "${_winsdk_dir}" NAME)
add_compile_options( add_compile_options(
--target=x86_64-pc-windows-msvc --target=x86_64-pc-windows-msvc
-fms-compatibility -fms-compatibility
-fms-extensions -fms-extensions
-fdelayed-template-parsing -fdelayed-template-parsing
# rm: paths to msvc and windows sdk headers /winsysroot ${WINDOWS_SDK_PATH}
"-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}) add_link_options(/winsysroot:${WINDOWS_SDK_PATH})
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)