From 8b079f45e9c09d8563c8c927eb8ae8b5b19897a9 Mon Sep 17 00:00:00 2001 From: halogen Date: Wed, 4 Mar 2026 23:04:36 -0500 Subject: [PATCH] fix linux toolchain always failing to find msvc toolchain and hardcoding /opt/msvc --- cmake/LinuxCrosscompile.cmake | 45 ++++++++++++++--------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/cmake/LinuxCrosscompile.cmake b/cmake/LinuxCrosscompile.cmake index 558dd70c0..c32efeac5 100644 --- a/cmake/LinuxCrosscompile.cmake +++ b/cmake/LinuxCrosscompile.cmake @@ -7,44 +7,35 @@ set(CMAKE_LINKER lld-link) set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC) set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC) -# rm: locate winsysroot via the msbuild.exe path -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) # .../ - endif() - set(MSVC_WINSYSROOT ${_candidate}) -else() - # rm: assume /opt/msvc as a fallback (which is usually the default path) - set(MSVC_WINSYSROOT /opt/msvc) +# TODO add check that WINDOWS_SDK_PATH is real + +set(WINDOWS_SDK_PATH "" CACHE PATH "Path to Windows SDK root") +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 + +message(STATUS "WINDOWS_SDK_PATH=${WINDOWS_SDK_PATH}") + +if(NOT EXISTS "${WINDOWS_SDK_PATH}/kits/10/Include") + message(FATAL_ERROR "Invalid WINDOWS_SDK_PATH: ${WINDOWS_SDK_PATH}") endif() -# rm: detect msvc version -file(GLOB _msvc_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/VC/Tools/MSVC/*) -list(GET _msvc_versions 0 _msvc_dir) +file(GLOB _winsdk_versions LIST_DIRECTORIES true + "${WINDOWS_SDK_PATH}/kits/10/Include/*") + +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) -get_filename_component(_winsdk_ver ${_winsdk_dir} NAME) - +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" + /winsysroot ${WINDOWS_SDK_PATH} ) -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_LIBRARY ONLY)