Skip to content

Commit 83b305f

Browse files
committed
fix: Verify and correct LLVM_DIR path dynamically
- Enhance debug step to verify LLVMConfig.cmake exists at LLVM_DIR - Automatically search for and update LLVM_DIR if file not found - Add LLVM_DIR validation in CMakeLists.txt before find_package - Unset invalid LLVM_DIR to trigger fallback search - Add C:/Program Files/LLVM/cmake to search paths This fixes the issue where LLVM_DIR was set but pointed to a location without LLVMConfig.cmake.
1 parent 4e4ebd9 commit 83b305f

2 files changed

Lines changed: 44 additions & 20 deletions

File tree

.github/workflows/build.yml

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,30 @@ jobs:
8585
if: matrix.os == 'windows-latest'
8686
shell: pwsh
8787
run: |
88-
Write-Host "LLVM_DIR: $env:LLVM_DIR"
88+
Write-Host "Initial LLVM_DIR: $env:LLVM_DIR"
8989
Write-Host "LLVM_ROOT: $env:LLVM_ROOT"
90-
Write-Host "Checking if LLVMConfig.cmake exists..."
91-
if (Test-Path "$env:LLVM_DIR/LLVMConfig.cmake") {
90+
91+
# Check if LLVMConfig.cmake exists at the set LLVM_DIR
92+
if ($env:LLVM_DIR -and (Test-Path "$env:LLVM_DIR/LLVMConfig.cmake")) {
9293
Write-Host "✓ Found LLVMConfig.cmake at $env:LLVM_DIR/LLVMConfig.cmake"
9394
} else {
9495
Write-Host "✗ LLVMConfig.cmake not found at $env:LLVM_DIR"
9596
Write-Host "Searching for LLVMConfig.cmake..."
96-
Get-ChildItem -Path "$env:LLVM_ROOT" -Filter "LLVMConfig.cmake" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 5 | ForEach-Object { Write-Host $_.FullName }
97+
98+
# Search for LLVMConfig.cmake in LLVM installation
99+
$found = Get-ChildItem -Path "$env:LLVM_ROOT" -Filter "LLVMConfig.cmake" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1
100+
101+
if ($found) {
102+
$correctLLVMDir = Split-Path -Parent $found.FullName
103+
$correctLLVMDir = $correctLLVMDir -replace "\\\\", "/"
104+
Write-Host "✓ Found LLVMConfig.cmake at: $($found.FullName)"
105+
Write-Host "Updating LLVM_DIR to: $correctLLVMDir"
106+
Add-Content $env:GITHUB_ENV "LLVM_DIR=$correctLLVMDir"
107+
$env:LLVM_DIR = $correctLLVMDir
108+
} else {
109+
Write-Host "✗ Could not find LLVMConfig.cmake in $env:LLVM_ROOT"
110+
exit 1
111+
}
97112
}
98113
99114
- name: Configure (Unix)

CMakeLists.txt

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,32 @@ endif()
1818
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
1919

2020
# Add explicit hints for LLVM on Windows
21-
if(WIN32 AND NOT LLVM_DIR)
22-
message(STATUS "Searching for LLVM on Windows...")
23-
# Common LLVM installation paths on Windows
24-
set(LLVM_SEARCH_PATHS
25-
"C:/Program Files/LLVM/lib/cmake/llvm"
26-
"C:/Program Files/LLVM/share/llvm/cmake"
27-
"C:/Program Files (x86)/LLVM/lib/cmake/llvm"
28-
"C:/Program Files (x86)/LLVM/share/llvm/cmake"
29-
)
21+
if(WIN32)
22+
# First, verify if LLVM_DIR is set and valid
23+
if(LLVM_DIR AND NOT EXISTS "${LLVM_DIR}/LLVMConfig.cmake")
24+
message(WARNING "LLVM_DIR is set to '${LLVM_DIR}' but LLVMConfig.cmake not found there. Searching for LLVM...")
25+
unset(LLVM_DIR CACHE)
26+
endif()
3027

31-
foreach(search_path ${LLVM_SEARCH_PATHS})
32-
if(EXISTS "${search_path}/LLVMConfig.cmake")
33-
set(LLVM_DIR "${search_path}" CACHE PATH "LLVM CMake directory")
34-
message(STATUS "Found LLVM CMake files at: ${search_path}")
35-
break()
36-
endif()
37-
endforeach()
28+
# If LLVM_DIR is not set or invalid, search common paths
29+
if(NOT LLVM_DIR)
30+
message(STATUS "Searching for LLVM on Windows...")
31+
set(LLVM_SEARCH_PATHS
32+
"C:/Program Files/LLVM/lib/cmake/llvm"
33+
"C:/Program Files/LLVM/share/llvm/cmake"
34+
"C:/Program Files/LLVM/cmake"
35+
"C:/Program Files (x86)/LLVM/lib/cmake/llvm"
36+
"C:/Program Files (x86)/LLVM/share/llvm/cmake"
37+
)
38+
39+
foreach(search_path ${LLVM_SEARCH_PATHS})
40+
if(EXISTS "${search_path}/LLVMConfig.cmake")
41+
set(LLVM_DIR "${search_path}" CACHE PATH "LLVM CMake directory")
42+
message(STATUS "Found LLVM CMake files at: ${search_path}")
43+
break()
44+
endif()
45+
endforeach()
46+
endif()
3847
endif()
3948

4049
# --- LLVM Configuration ---

0 commit comments

Comments
 (0)