diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 14555e17b657..3ff66e8964cd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -693,7 +693,9 @@ jobs: matrix: include: - arch: 'x64' + openmp_dll: 'C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Tools\Llvm\x64\bin\libomp.dll' - arch: 'arm64' + openmp_dll: 'C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Tools\Llvm\ARM64\bin\libomp.dll' steps: - name: Clone @@ -739,7 +741,7 @@ jobs: - name: Pack artifacts id: pack_artifacts run: | - Copy-Item "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Redist\MSVC\14.51.36231\debug_nonredist\${{ matrix.arch }}\Microsoft.VC145.OpenMP.LLVM\libomp140.${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}.dll" .\build\bin\Release\ + Copy-Item "${{ matrix.openmp_dll }}" .\build\bin\Release\ 7z a -snl llama-bin-win-cpu-${{ matrix.arch }}.zip .\build\bin\Release\* - name: Upload artifacts diff --git a/cmake/arm64-windows-llvm.cmake b/cmake/arm64-windows-llvm.cmake index 802379680068..5392cb2fb133 100644 --- a/cmake/arm64-windows-llvm.cmake +++ b/cmake/arm64-windows-llvm.cmake @@ -9,6 +9,31 @@ set( CMAKE_CXX_COMPILER clang++ ) set( CMAKE_C_COMPILER_TARGET ${target} ) set( CMAKE_CXX_COMPILER_TARGET ${target} ) +if (NOT DEFINED GGML_OPENMP OR GGML_OPENMP) + file(TO_CMAKE_PATH + "$ENV{VCINSTALLDIR}/Tools/Llvm/ARM64" + llvm_arm64_root + ) + + set( LLVM_ARM64_ROOT + "${llvm_arm64_root}" + CACHE PATH + "ARM64 LLVM installation containing the target OpenMP runtime" + ) + + if (EXISTS "${LLVM_ARM64_ROOT}/lib/libomp.lib") + # Prefer the target LLVM OpenMP library over the MSVC import library. + set( OpenMP_libomp_LIBRARY + "${LLVM_ARM64_ROOT}/lib/libomp.lib" + CACHE FILEPATH + "ARM64 LLVM OpenMP import library" + FORCE + ) + else() + message(WARNING "LLVM ARM64 OpenMP library not found: ${LLVM_ARM64_ROOT}/lib/libomp.lib") + endif() +endif() + set( arch_c_flags "-march=armv8.7-a -fvectorize -ffp-model=fast -fno-finite-math-only" ) set( warn_c_flags "-Wno-format -Wno-unused-variable -Wno-unused-function -Wno-gnu-zero-variadic-macro-arguments" ) diff --git a/cmake/x64-windows-llvm.cmake b/cmake/x64-windows-llvm.cmake index 77e79140798b..620f1bd23172 100644 --- a/cmake/x64-windows-llvm.cmake +++ b/cmake/x64-windows-llvm.cmake @@ -3,3 +3,28 @@ set( CMAKE_SYSTEM_PROCESSOR x86_64 ) set( CMAKE_C_COMPILER clang ) set( CMAKE_CXX_COMPILER clang++ ) + +if (NOT DEFINED GGML_OPENMP OR GGML_OPENMP) + file(TO_CMAKE_PATH + "$ENV{VCINSTALLDIR}/Tools/Llvm/x64" + llvm_X64_root + ) + + set( LLVM_X64_ROOT + "${llvm_X64_root}" + CACHE PATH + "x64 LLVM installation containing the target OpenMP runtime" + ) + + if (EXISTS "${LLVM_X64_ROOT}/lib/libomp.lib") + # Prefer the target LLVM OpenMP library over the MSVC import library. + set( OpenMP_libomp_LIBRARY + "${LLVM_X64_ROOT}/lib/libomp.lib" + CACHE FILEPATH + "x64 LLVM OpenMP import library" + FORCE + ) + else() + message(WARNING "LLVM x64 OpenMP library not found: ${LLVM_X64_ROOT}/lib/libomp.lib") + endif() +endif()