master
  1# Copyright (c) 2014 Andrew Kelley
  2# This file is MIT licensed.
  3# See http://opensource.org/licenses/MIT
  4
  5# LLVM_FOUND
  6# LLVM_INCLUDE_DIRS
  7# LLVM_LIBRARIES
  8# LLVM_LIBDIRS
  9# LLVM_LINK_MODE
 10
 11
 12if(ZIG_USE_LLVM_CONFIG)
 13  set(LLVM_CONFIG_ERROR_MESSAGES "")
 14  while(1)
 15    # If this variable is not unset, the same result is returned even though
 16    # the ignore list has changed, causing the configure process to not
 17    # terminate when the right LLVM version is not found.
 18    unset(LLVM_CONFIG_EXE CACHE)
 19    find_program(LLVM_CONFIG_EXE
 20        NAMES llvm-config-21 llvm-config-21.0 llvm-config210 llvm-config21 llvm-config NAMES_PER_DIR
 21        PATHS
 22            "/mingw64/bin"
 23            "/c/msys64/mingw64/bin"
 24            "c:/msys64/mingw64/bin"
 25            "C:/Libraries/llvm-21.0.0/bin")
 26
 27    if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
 28      if (NOT LLVM_CONFIG_ERROR_MESSAGES STREQUAL "")
 29        list(JOIN LLVM_CONFIG_ERROR_MESSAGES "\n" LLVM_CONFIG_ERROR_MESSAGE)
 30        message(FATAL_ERROR ${LLVM_CONFIG_ERROR_MESSAGE})
 31      else()
 32        message(FATAL_ERROR "unable to find llvm-config")
 33      endif()
 34    endif()
 35
 36    # Check that this LLVM is the right version
 37    execute_process(
 38      COMMAND ${LLVM_CONFIG_EXE} --version
 39      OUTPUT_VARIABLE LLVM_CONFIG_VERSION
 40      OUTPUT_STRIP_TRAILING_WHITESPACE)
 41
 42    get_filename_component(LLVM_CONFIG_DIR "${LLVM_CONFIG_EXE}" DIRECTORY)
 43    if("${LLVM_CONFIG_VERSION}" VERSION_LESS 21 OR "${LLVM_CONFIG_VERSION}" VERSION_EQUAL 22 OR "${LLVM_CONFIG_VERSION}" VERSION_GREATER 22)
 44      # Save the error message, in case this is the last llvm-config we find
 45      list(APPEND LLVM_CONFIG_ERROR_MESSAGES "expected LLVM 21.x but found ${LLVM_CONFIG_VERSION} using ${LLVM_CONFIG_EXE}")
 46
 47      # Ignore this directory and try the search again
 48      list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
 49      continue()
 50    endif()
 51
 52    # Check that this LLVM supports linking as a shared/static library, if requested
 53    if (ZIG_SHARED_LLVM OR ZIG_STATIC_LLVM)
 54      if (ZIG_SHARED_LLVM)
 55        set(STATIC_OR_SHARED_LINK "--link-shared")
 56      elseif (ZIG_STATIC_LLVM)
 57        set(STATIC_OR_SHARED_LINK "--link-static")
 58      endif()
 59
 60      execute_process(
 61        COMMAND ${LLVM_CONFIG_EXE} --libs ${STATIC_OR_SHARED_LINK}
 62        OUTPUT_QUIET
 63        ERROR_VARIABLE LLVM_CONFIG_ERROR
 64        ERROR_STRIP_TRAILING_WHITESPACE)
 65
 66      if (LLVM_CONFIG_ERROR)
 67        # Save the error message, in case this is the last llvm-config we find
 68        if (ZIG_SHARED_LLVM)
 69          list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM 21.x found at ${LLVM_CONFIG_EXE} does not support linking as a shared library")
 70        else()
 71          list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM 21.x found at ${LLVM_CONFIG_EXE} does not support linking as a static library")
 72        endif()
 73
 74        # Ignore this directory and try the search again
 75        list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
 76        continue()
 77      endif()
 78    endif()
 79
 80    execute_process(
 81      COMMAND ${LLVM_CONFIG_EXE} --targets-built
 82        OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES
 83      OUTPUT_STRIP_TRAILING_WHITESPACE)
 84    string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}")
 85
 86    set(ZIG_LLVM_REQUIRED_TARGETS "AArch64;AMDGPU;ARM;AVR;BPF;Hexagon;Lanai;LoongArch;Mips;MSP430;NVPTX;PowerPC;RISCV;SPIRV;Sparc;SystemZ;VE;WebAssembly;X86;XCore")
 87
 88    set(ZIG_LLVM_REQUIRED_TARGETS_ENABLED TRUE)
 89    foreach(TARGET_NAME IN LISTS ZIG_LLVM_REQUIRED_TARGETS)
 90      list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index)
 91      if (${_index} EQUAL -1)
 92        # Save the error message, in case this is the last llvm-config we find
 93        list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM (according to ${LLVM_CONFIG_EXE}) is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.")
 94
 95        # Ignore this directory and try the search again
 96        list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
 97        set(ZIG_LLVM_REQUIRED_TARGETS_ENABLED FALSE)
 98        break()
 99      endif()
100    endforeach()
101    if (NOT ZIG_LLVM_REQUIRED_TARGETS_ENABLED)
102      continue()
103    endif()
104
105    # Got it!
106    break()
107  endwhile()
108
109  if(ZIG_SHARED_LLVM OR ZIG_STATIC_LLVM)
110    execute_process(
111        COMMAND ${LLVM_CONFIG_EXE} --libfiles ${STATIC_OR_SHARED_LINK}
112        OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
113        OUTPUT_STRIP_TRAILING_WHITESPACE)
114    string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
115
116    execute_process(
117        COMMAND ${LLVM_CONFIG_EXE} --libdir ${STATIC_OR_SHARED_LINK}
118        OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
119        OUTPUT_STRIP_TRAILING_WHITESPACE)
120    string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
121
122    execute_process(
123        COMMAND ${LLVM_CONFIG_EXE} --system-libs ${STATIC_OR_SHARED_LINK}
124        OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
125        OUTPUT_STRIP_TRAILING_WHITESPACE)
126    string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
127
128    execute_process(
129      COMMAND ${LLVM_CONFIG_EXE} --shared-mode ${STATIC_OR_SHARED_LINK}
130      OUTPUT_VARIABLE LLVM_LINK_MODE
131      OUTPUT_STRIP_TRAILING_WHITESPACE)
132  else()
133    execute_process(
134        COMMAND ${LLVM_CONFIG_EXE} --libs
135        OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
136        OUTPUT_STRIP_TRAILING_WHITESPACE)
137    string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
138
139    execute_process(
140        COMMAND ${LLVM_CONFIG_EXE} --libdir
141        OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
142        OUTPUT_STRIP_TRAILING_WHITESPACE)
143    string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
144
145    execute_process(
146        COMMAND ${LLVM_CONFIG_EXE} --system-libs
147        OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
148        OUTPUT_STRIP_TRAILING_WHITESPACE)
149    string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
150
151    execute_process(
152      COMMAND ${LLVM_CONFIG_EXE} --shared-mode
153      OUTPUT_VARIABLE LLVM_LINK_MODE
154      OUTPUT_STRIP_TRAILING_WHITESPACE)
155  endif()
156
157  if (${LLVM_LINK_MODE} STREQUAL "shared")
158    # We always ask for the system libs corresponding to static linking,
159    # since on some distros LLD is only available as a static library
160    # and we need these libraries to link it successfully
161    execute_process(
162        COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
163        OUTPUT_VARIABLE LLVM_STATIC_SYSTEM_LIBS_SPACES
164        ERROR_QUIET # Some installations have no static libs, we just ignore the failure
165        OUTPUT_STRIP_TRAILING_WHITESPACE)
166    string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}")
167
168    set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS})
169  else()
170    set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
171  endif()
172
173  execute_process(
174      COMMAND ${LLVM_CONFIG_EXE} --includedir
175      OUTPUT_VARIABLE LLVM_INCLUDE_DIRS_SPACES
176      OUTPUT_STRIP_TRAILING_WHITESPACE)
177  string(REPLACE " " ";" LLVM_INCLUDE_DIRS "${LLVM_INCLUDE_DIRS_SPACES}")
178
179  link_directories("${LLVM_LIBDIRS}")
180else()
181  # Here we assume that we're cross compiling with Zig, of course. No reason
182  # to support more complicated setups.
183
184  macro(FIND_AND_ADD_LLVM_LIB _libname_)
185    string(TOUPPER ${_libname_} _prettylibname_)
186    find_library(LLVM_${_prettylibname_}_LIB
187      NAMES ${_libname_} NAMES_PER_DIR)
188    set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_${_prettylibname_}_LIB})
189  endmacro(FIND_AND_ADD_LLVM_LIB)
190
191  set(LLVM_LINK_MODE "static")
192
193  # This list can be re-generated with `llvm-config --libfiles` and then
194  # reformatting using your favorite text editor. Note we do not execute
195  # `llvm-config` here because we are cross compiling.
196  FIND_AND_ADD_LLVM_LIB(LLVMWindowsManifest)
197  FIND_AND_ADD_LLVM_LIB(LLVMXRay)
198  FIND_AND_ADD_LLVM_LIB(LLVMLibDriver)
199  FIND_AND_ADD_LLVM_LIB(LLVMDlltoolDriver)
200  FIND_AND_ADD_LLVM_LIB(LLVMTelemetry)
201  FIND_AND_ADD_LLVM_LIB(LLVMTextAPIBinaryReader)
202  FIND_AND_ADD_LLVM_LIB(LLVMCoverage)
203  FIND_AND_ADD_LLVM_LIB(LLVMLineEditor)
204  FIND_AND_ADD_LLVM_LIB(LLVMXCoreDisassembler)
205  FIND_AND_ADD_LLVM_LIB(LLVMXCoreCodeGen)
206  FIND_AND_ADD_LLVM_LIB(LLVMXCoreDesc)
207  FIND_AND_ADD_LLVM_LIB(LLVMXCoreInfo)
208  FIND_AND_ADD_LLVM_LIB(LLVMX86TargetMCA)
209  FIND_AND_ADD_LLVM_LIB(LLVMX86Disassembler)
210  FIND_AND_ADD_LLVM_LIB(LLVMX86AsmParser)
211  FIND_AND_ADD_LLVM_LIB(LLVMX86CodeGen)
212  FIND_AND_ADD_LLVM_LIB(LLVMX86Desc)
213  FIND_AND_ADD_LLVM_LIB(LLVMX86Info)
214  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyDisassembler)
215  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyAsmParser)
216  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyCodeGen)
217  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyUtils)
218  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyDesc)
219  FIND_AND_ADD_LLVM_LIB(LLVMWebAssemblyInfo)
220  FIND_AND_ADD_LLVM_LIB(LLVMVEDisassembler)
221  FIND_AND_ADD_LLVM_LIB(LLVMVEAsmParser)
222  FIND_AND_ADD_LLVM_LIB(LLVMVECodeGen)
223  FIND_AND_ADD_LLVM_LIB(LLVMVEDesc)
224  FIND_AND_ADD_LLVM_LIB(LLVMVEInfo)
225  FIND_AND_ADD_LLVM_LIB(LLVMSystemZDisassembler)
226  FIND_AND_ADD_LLVM_LIB(LLVMSystemZAsmParser)
227  FIND_AND_ADD_LLVM_LIB(LLVMSystemZCodeGen)
228  FIND_AND_ADD_LLVM_LIB(LLVMSystemZDesc)
229  FIND_AND_ADD_LLVM_LIB(LLVMSystemZInfo)
230  FIND_AND_ADD_LLVM_LIB(LLVMSPIRVCodeGen)
231  FIND_AND_ADD_LLVM_LIB(LLVMSPIRVDesc)
232  FIND_AND_ADD_LLVM_LIB(LLVMSPIRVInfo)
233  FIND_AND_ADD_LLVM_LIB(LLVMSPIRVAnalysis)
234  FIND_AND_ADD_LLVM_LIB(LLVMSparcDisassembler)
235  FIND_AND_ADD_LLVM_LIB(LLVMSparcAsmParser)
236  FIND_AND_ADD_LLVM_LIB(LLVMSparcCodeGen)
237  FIND_AND_ADD_LLVM_LIB(LLVMSparcDesc)
238  FIND_AND_ADD_LLVM_LIB(LLVMSparcInfo)
239  FIND_AND_ADD_LLVM_LIB(LLVMRISCVTargetMCA)
240  FIND_AND_ADD_LLVM_LIB(LLVMRISCVDisassembler)
241  FIND_AND_ADD_LLVM_LIB(LLVMRISCVAsmParser)
242  FIND_AND_ADD_LLVM_LIB(LLVMRISCVCodeGen)
243  FIND_AND_ADD_LLVM_LIB(LLVMRISCVDesc)
244  FIND_AND_ADD_LLVM_LIB(LLVMRISCVInfo)
245  FIND_AND_ADD_LLVM_LIB(LLVMPowerPCDisassembler)
246  FIND_AND_ADD_LLVM_LIB(LLVMPowerPCAsmParser)
247  FIND_AND_ADD_LLVM_LIB(LLVMPowerPCCodeGen)
248  FIND_AND_ADD_LLVM_LIB(LLVMPowerPCDesc)
249  FIND_AND_ADD_LLVM_LIB(LLVMPowerPCInfo)
250  FIND_AND_ADD_LLVM_LIB(LLVMNVPTXCodeGen)
251  FIND_AND_ADD_LLVM_LIB(LLVMNVPTXDesc)
252  FIND_AND_ADD_LLVM_LIB(LLVMNVPTXInfo)
253  FIND_AND_ADD_LLVM_LIB(LLVMMSP430Disassembler)
254  FIND_AND_ADD_LLVM_LIB(LLVMMSP430AsmParser)
255  FIND_AND_ADD_LLVM_LIB(LLVMMSP430CodeGen)
256  FIND_AND_ADD_LLVM_LIB(LLVMMSP430Desc)
257  FIND_AND_ADD_LLVM_LIB(LLVMMSP430Info)
258  FIND_AND_ADD_LLVM_LIB(LLVMMipsDisassembler)
259  FIND_AND_ADD_LLVM_LIB(LLVMMipsAsmParser)
260  FIND_AND_ADD_LLVM_LIB(LLVMMipsCodeGen)
261  FIND_AND_ADD_LLVM_LIB(LLVMMipsDesc)
262  FIND_AND_ADD_LLVM_LIB(LLVMMipsInfo)
263  FIND_AND_ADD_LLVM_LIB(LLVMLoongArchDisassembler)
264  FIND_AND_ADD_LLVM_LIB(LLVMLoongArchAsmParser)
265  FIND_AND_ADD_LLVM_LIB(LLVMLoongArchCodeGen)
266  FIND_AND_ADD_LLVM_LIB(LLVMLoongArchDesc)
267  FIND_AND_ADD_LLVM_LIB(LLVMLoongArchInfo)
268  FIND_AND_ADD_LLVM_LIB(LLVMLanaiDisassembler)
269  FIND_AND_ADD_LLVM_LIB(LLVMLanaiCodeGen)
270  FIND_AND_ADD_LLVM_LIB(LLVMLanaiAsmParser)
271  FIND_AND_ADD_LLVM_LIB(LLVMLanaiDesc)
272  FIND_AND_ADD_LLVM_LIB(LLVMLanaiInfo)
273  FIND_AND_ADD_LLVM_LIB(LLVMHexagonDisassembler)
274  FIND_AND_ADD_LLVM_LIB(LLVMHexagonCodeGen)
275  FIND_AND_ADD_LLVM_LIB(LLVMHexagonAsmParser)
276  FIND_AND_ADD_LLVM_LIB(LLVMHexagonDesc)
277  FIND_AND_ADD_LLVM_LIB(LLVMHexagonInfo)
278  FIND_AND_ADD_LLVM_LIB(LLVMBPFDisassembler)
279  FIND_AND_ADD_LLVM_LIB(LLVMBPFAsmParser)
280  FIND_AND_ADD_LLVM_LIB(LLVMBPFCodeGen)
281  FIND_AND_ADD_LLVM_LIB(LLVMBPFDesc)
282  FIND_AND_ADD_LLVM_LIB(LLVMBPFInfo)
283  FIND_AND_ADD_LLVM_LIB(LLVMAVRDisassembler)
284  FIND_AND_ADD_LLVM_LIB(LLVMAVRAsmParser)
285  FIND_AND_ADD_LLVM_LIB(LLVMAVRCodeGen)
286  FIND_AND_ADD_LLVM_LIB(LLVMAVRDesc)
287  FIND_AND_ADD_LLVM_LIB(LLVMAVRInfo)
288  FIND_AND_ADD_LLVM_LIB(LLVMARMDisassembler)
289  FIND_AND_ADD_LLVM_LIB(LLVMARMAsmParser)
290  FIND_AND_ADD_LLVM_LIB(LLVMARMCodeGen)
291  FIND_AND_ADD_LLVM_LIB(LLVMARMDesc)
292  FIND_AND_ADD_LLVM_LIB(LLVMARMUtils)
293  FIND_AND_ADD_LLVM_LIB(LLVMARMInfo)
294  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUTargetMCA)
295  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUDisassembler)
296  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUAsmParser)
297  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUCodeGen)
298  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUDesc)
299  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUUtils)
300  FIND_AND_ADD_LLVM_LIB(LLVMAMDGPUInfo)
301  FIND_AND_ADD_LLVM_LIB(LLVMAArch64Disassembler)
302  FIND_AND_ADD_LLVM_LIB(LLVMAArch64AsmParser)
303  FIND_AND_ADD_LLVM_LIB(LLVMAArch64CodeGen)
304  FIND_AND_ADD_LLVM_LIB(LLVMAArch64Desc)
305  FIND_AND_ADD_LLVM_LIB(LLVMAArch64Utils)
306  FIND_AND_ADD_LLVM_LIB(LLVMAArch64Info)
307  FIND_AND_ADD_LLVM_LIB(LLVMOrcDebugging)
308  FIND_AND_ADD_LLVM_LIB(LLVMOrcJIT)
309  FIND_AND_ADD_LLVM_LIB(LLVMWindowsDriver)
310  FIND_AND_ADD_LLVM_LIB(LLVMMCJIT)
311  FIND_AND_ADD_LLVM_LIB(LLVMJITLink)
312  FIND_AND_ADD_LLVM_LIB(LLVMInterpreter)
313  FIND_AND_ADD_LLVM_LIB(LLVMExecutionEngine)
314  FIND_AND_ADD_LLVM_LIB(LLVMRuntimeDyld)
315  FIND_AND_ADD_LLVM_LIB(LLVMOrcTargetProcess)
316  FIND_AND_ADD_LLVM_LIB(LLVMOrcShared)
317  FIND_AND_ADD_LLVM_LIB(LLVMDWP)
318  FIND_AND_ADD_LLVM_LIB(LLVMDWARFCFIChecker)
319  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoLogicalView)
320  FIND_AND_ADD_LLVM_LIB(LLVMOption)
321  FIND_AND_ADD_LLVM_LIB(LLVMObjCopy)
322  FIND_AND_ADD_LLVM_LIB(LLVMMCA)
323  FIND_AND_ADD_LLVM_LIB(LLVMMCDisassembler)
324  FIND_AND_ADD_LLVM_LIB(LLVMLTO)
325  FIND_AND_ADD_LLVM_LIB(LLVMFrontendOpenACC)
326  FIND_AND_ADD_LLVM_LIB(LLVMFrontendHLSL)
327  FIND_AND_ADD_LLVM_LIB(LLVMFrontendDriver)
328  FIND_AND_ADD_LLVM_LIB(LLVMExtensions)
329  FIND_AND_ADD_LLVM_LIB(LLVMPasses)
330  FIND_AND_ADD_LLVM_LIB(LLVMHipStdPar)
331  FIND_AND_ADD_LLVM_LIB(LLVMCoroutines)
332  FIND_AND_ADD_LLVM_LIB(LLVMCFGuard)
333  FIND_AND_ADD_LLVM_LIB(LLVMipo)
334  FIND_AND_ADD_LLVM_LIB(LLVMInstrumentation)
335  FIND_AND_ADD_LLVM_LIB(LLVMVectorize)
336  FIND_AND_ADD_LLVM_LIB(LLVMSandboxIR)
337  FIND_AND_ADD_LLVM_LIB(LLVMLinker)
338  FIND_AND_ADD_LLVM_LIB(LLVMFrontendOpenMP)
339  FIND_AND_ADD_LLVM_LIB(LLVMFrontendDirective)
340  FIND_AND_ADD_LLVM_LIB(LLVMFrontendAtomic)
341  FIND_AND_ADD_LLVM_LIB(LLVMFrontendOffloading)
342  FIND_AND_ADD_LLVM_LIB(LLVMObjectYAML)
343  FIND_AND_ADD_LLVM_LIB(LLVMDWARFLinkerParallel)
344  FIND_AND_ADD_LLVM_LIB(LLVMDWARFLinkerClassic)
345  FIND_AND_ADD_LLVM_LIB(LLVMDWARFLinker)
346  FIND_AND_ADD_LLVM_LIB(LLVMGlobalISel)
347  FIND_AND_ADD_LLVM_LIB(LLVMMIRParser)
348  FIND_AND_ADD_LLVM_LIB(LLVMAsmPrinter)
349  FIND_AND_ADD_LLVM_LIB(LLVMSelectionDAG)
350  FIND_AND_ADD_LLVM_LIB(LLVMCodeGen)
351  FIND_AND_ADD_LLVM_LIB(LLVMTarget)
352  FIND_AND_ADD_LLVM_LIB(LLVMObjCARCOpts)
353  FIND_AND_ADD_LLVM_LIB(LLVMCodeGenTypes)
354  FIND_AND_ADD_LLVM_LIB(LLVMCGData)
355  FIND_AND_ADD_LLVM_LIB(LLVMIRPrinter)
356  FIND_AND_ADD_LLVM_LIB(LLVMInterfaceStub)
357  FIND_AND_ADD_LLVM_LIB(LLVMFileCheck)
358  FIND_AND_ADD_LLVM_LIB(LLVMFuzzMutate)
359  FIND_AND_ADD_LLVM_LIB(LLVMScalarOpts)
360  FIND_AND_ADD_LLVM_LIB(LLVMInstCombine)
361  FIND_AND_ADD_LLVM_LIB(LLVMAggressiveInstCombine)
362  FIND_AND_ADD_LLVM_LIB(LLVMTransformUtils)
363  FIND_AND_ADD_LLVM_LIB(LLVMBitWriter)
364  FIND_AND_ADD_LLVM_LIB(LLVMAnalysis)
365  FIND_AND_ADD_LLVM_LIB(LLVMProfileData)
366  FIND_AND_ADD_LLVM_LIB(LLVMSymbolize)
367  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoBTF)
368  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoPDB)
369  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoMSF)
370  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoCodeView)
371  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoGSYM)
372  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoDWARF)
373  FIND_AND_ADD_LLVM_LIB(LLVMDebugInfoDWARFLowLevel)
374  FIND_AND_ADD_LLVM_LIB(LLVMObject)
375  FIND_AND_ADD_LLVM_LIB(LLVMTextAPI)
376  FIND_AND_ADD_LLVM_LIB(LLVMMCParser)
377  FIND_AND_ADD_LLVM_LIB(LLVMIRReader)
378  FIND_AND_ADD_LLVM_LIB(LLVMAsmParser)
379  FIND_AND_ADD_LLVM_LIB(LLVMMC)
380  FIND_AND_ADD_LLVM_LIB(LLVMBitReader)
381  FIND_AND_ADD_LLVM_LIB(LLVMFuzzerCLI)
382  FIND_AND_ADD_LLVM_LIB(LLVMCore)
383  FIND_AND_ADD_LLVM_LIB(LLVMRemarks)
384  FIND_AND_ADD_LLVM_LIB(LLVMBitstreamReader)
385  FIND_AND_ADD_LLVM_LIB(LLVMBinaryFormat)
386  FIND_AND_ADD_LLVM_LIB(LLVMTargetParser)
387  FIND_AND_ADD_LLVM_LIB(LLVMSupport)
388  FIND_AND_ADD_LLVM_LIB(LLVMDemangle)
389
390  get_filename_component(LLVM_LIBDIRS "${LLVM_LLVMCORE_LIB}" DIRECTORY)
391  find_path(LLVM_INCLUDE_DIRS NAMES llvm/IR/IRBuilder.h)
392endif()
393
394include(FindPackageHandleStandardArgs)
395find_package_handle_standard_args(llvm DEFAULT_MSG LLVM_LIBRARIES LLVM_INCLUDE_DIRS)
396
397mark_as_advanced(LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_LIBDIRS)