Files
airllm-fork-nodejs/node_modules/node-llama-cpp/llama/cmake/win32.llvmUseGnuModeCompilers.cmake
2026-02-05 15:27:49 +08:00

88 lines
3.8 KiB
CMake

function(llvmUseGnuModeCompilers CURRENT_ARCH)
set(LLVM_INSTALLATION_URL "https://github.com/llvm/llvm-project/releases/tag/llvmorg-19.1.5")
set(CMAKE_C_COMPILER clang)
set(CMAKE_C_COMPILER clang PARENT_SCOPE)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_COMPILER clang++ PARENT_SCOPE)
set(CMAKE_RC_COMPILER llvm-rc)
set(CMAKE_RC_COMPILER llvm-rc PARENT_SCOPE)
set (LLVM_DIR_ARCH_NAME "")
if (CURRENT_ARCH STREQUAL "x64")
set (LLVM_DIR_ARCH_NAME "x64")
elseif (CURRENT_ARCH STREQUAL "arm64")
set (LLVM_DIR_ARCH_NAME "ARM64")
endif()
set(LLVM_INSTALL_PATHS "")
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
list(APPEND LLVM_INSTALL_PATHS "${PATH}/LLVM")
file(GLOB_RECURSE FOUND_LLVM_ROOT LIST_DIRECTORIES true
"${PATH}/Microsoft Visual Studio/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}"
"${PATH}/Microsoft Visual Studio/**/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}")
list(FILTER FOUND_LLVM_ROOT INCLUDE REGEX "VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}$")
if(FOUND_LLVM_ROOT)
list(APPEND LLVM_INSTALL_PATHS ${FOUND_LLVM_ROOT})
endif()
endforeach()
if(DEFINED LLVM_ROOT AND EXISTS "${LLVM_ROOT}")
list(INSERT LLVM_INSTALL_PATHS 0 "${LLVM_ROOT}")
endif()
list(REMOVE_DUPLICATES LLVM_INSTALL_PATHS)
set(LLVM_ROOT "")
set(LLVM_ROOT "" PARENT_SCOPE)
foreach(PATH IN LISTS LLVM_INSTALL_PATHS)
if(EXISTS "${PATH}/bin/clang.exe" AND EXISTS "${PATH}/bin/clang++.exe" AND EXISTS "${PATH}/bin/llvm-rc.exe")
set(LLVM_ROOT "${PATH}")
set(LLVM_ROOT "${PATH}" PARENT_SCOPE)
break()
endif()
endforeach()
if(LLVM_ROOT STREQUAL "")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "LLVM installation was not found. Please install LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "LLVM installation was not found. Please install LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_C_COMPILER}" OR NOT EXISTS "${CMAKE_CXX_COMPILER}" OR NOT EXISTS "${CMAKE_RC_COMPILER}")
set(CMAKE_C_COMPILER "${LLVM_ROOT}/bin/clang.exe")
set(CMAKE_C_COMPILER "${LLVM_ROOT}/bin/clang.exe" PARENT_SCOPE)
set(CMAKE_CXX_COMPILER "${LLVM_ROOT}/bin/clang++.exe")
set(CMAKE_CXX_COMPILER "${LLVM_ROOT}/bin/clang++.exe" PARENT_SCOPE)
set(CMAKE_RC_COMPILER "${LLVM_ROOT}/bin/llvm-rc.exe")
set(CMAKE_RC_COMPILER "${LLVM_ROOT}/bin/llvm-rc.exe" PARENT_SCOPE)
endif()
if (NOT EXISTS "${CMAKE_C_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "Clang compiler not found at ${CMAKE_C_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "Clang compiler not found at ${CMAKE_C_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_CXX_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "Clang++ compiler not found at ${CMAKE_CXX_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "Clang++ compiler not found at ${CMAKE_CXX_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_RC_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "LLVM Resource Compiler not found at ${CMAKE_RC_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "LLVM Resource Compiler not found at ${CMAKE_RC_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
endfunction()