@@ -69,6 +69,34 @@ endif()
6969if (WIN32 )
7070 # Try to find LLVM, but don't require it on Windows
7171 find_package (LLVM CONFIG QUIET )
72+
73+ # Fallback for Windows if config not found (common with official installers)
74+ if (NOT LLVM_FOUND)
75+ message (STATUS "LLVM Config not found. Attempting manual detection via llvm-config..." )
76+ find_program (LLVM_CONFIG_EXE NAMES llvm-config llvm-config.exe
77+ HINTS
78+ "${LLVM_ROOT} /bin"
79+ "$ENV{LLVM_ROOT} /bin"
80+ "C:/LLVM/bin"
81+ "C:/Program Files/LLVM/bin"
82+ )
83+
84+ if (LLVM_CONFIG_EXE)
85+ message (STATUS "Found llvm-config at: ${LLVM_CONFIG_EXE} " )
86+ execute_process (COMMAND ${LLVM_CONFIG_EXE} --includedir OUTPUT_VARIABLE LLVM_INCLUDE_DIRS OUTPUT_STRIP_TRAILING_WHITESPACE )
87+ execute_process (COMMAND ${LLVM_CONFIG_EXE} --libdir OUTPUT_VARIABLE LLVM_LIBRARY_DIRS OUTPUT_STRIP_TRAILING_WHITESPACE )
88+ execute_process (COMMAND ${LLVM_CONFIG_EXE} --version OUTPUT_VARIABLE LLVM_PACKAGE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE )
89+
90+ # Convert to CMake paths
91+ file (TO_CMAKE_PATH "${LLVM_INCLUDE_DIRS} " LLVM_INCLUDE_DIRS )
92+ file (TO_CMAKE_PATH "${LLVM_LIBRARY_DIRS} " LLVM_LIBRARY_DIRS )
93+
94+ set (LLVM_FOUND TRUE )
95+ set (LLVM_VERSION ${LLVM_PACKAGE_VERSION} )
96+ # Note: llvm_map_components_to_libnames will still fail if not found.
97+ # We'll handle that below by providing a simplified list if needed.
98+ endif ()
99+ endif ()
72100else ()
73101 # LLVM is required on Unix platforms
74102 find_package (LLVM CONFIG REQUIRED )
@@ -114,7 +142,18 @@ if(LLVM_FOUND)
114142 include_directories (SYSTEM ${LLVM_INCLUDE_DIRS} )
115143 add_definitions (${LLVM_DEFINITIONS} )
116144 link_directories (${LLVM_LIBRARY_DIRS} )
117- llvm_map_components_to_libnames (llvm_libs core support executionengine native ipo analysis transformutils bitwriter )
145+
146+ if (COMMAND llvm_map_components_to_libnames)
147+ llvm_map_components_to_libnames (llvm_libs core support executionengine native ipo analysis transformutils bitwriter )
148+ elseif (LLVM_CONFIG_EXE)
149+ # Fallback for when LLVMConfig.cmake is missing but llvm-config works
150+ execute_process (COMMAND ${LLVM_CONFIG_EXE} --libnames core support executionengine native ipo analysis transformutils bitwriter
151+ OUTPUT_VARIABLE llvm_libs OUTPUT_STRIP_TRAILING_WHITESPACE )
152+ string (REPLACE " " ";" llvm_libs "${llvm_libs} " )
153+ else ()
154+ # Final fallback: just try common library names
155+ set (llvm_libs LLVMCore LLVMSupport LLVMExecutionEngine LLVMAnalysis LLVMTarget)
156+ endif ()
118157endif ()
119158
120159# Export symbols for Windows DLL
0 commit comments