Warning, /sdk/clazy/cmake/FindLLVM.cmake is written in an unsupported language. File is not indexed.

0001 # Find the native LLVM includes and libraries
0002 #
0003 # Defines the following variables
0004 #  LLVM_INCLUDE_DIRS   - where to find llvm include files
0005 #  LLVM_LIBRARY_DIRS   - where to find llvm libs
0006 #  LLVM_CFLAGS         - llvm compiler flags
0007 #  LLVM_LFLAGS         - llvm linker flags
0008 #  LLVM_MODULE_LIBS    - list of llvm libs for working with modules.
0009 #  LLVM_INSTALL_PREFIX - LLVM installation prefix
0010 #  LLVM_FOUND          - True if llvm found.
0011 #  LLVM_VERSION        - Version string ("llvm-config --version")
0012 #
0013 # This module reads hints about search locations from variables
0014 #  LLVM_ROOT           - Preferred LLVM installation prefix (containing bin/, lib/, ...)
0015 #
0016 #  Note: One may specify these as environment variables if they are not specified as
0017 #   CMake variables or cache entries.
0018 
0019 #=============================================================================
0020 # SPDX-FileCopyrightText: 2014 Kevin Funk <kfunk@kde.org>
0021 #
0022 # SPDX-License-Identifier: BSD-2-Clause
0023 #=============================================================================
0024 
0025 if (NOT LLVM_ROOT AND DEFINED ENV{LLVM_ROOT})
0026     file(TO_CMAKE_PATH "$ENV{LLVM_ROOT}" LLVM_ROOT)
0027 endif()
0028 
0029 # if the user specified LLVM_ROOT, use that and fail otherwise
0030 if (LLVM_ROOT)
0031   find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config HINTS ${LLVM_ROOT}/bin DOC "llvm-config executable" NO_DEFAULT_PATH)
0032 else()
0033   # find llvm-config, prefer the one with a version suffix, e.g. llvm-config-3.5
0034   # note: FreeBSD installs llvm-config as llvm-config35 and so on
0035   # note: on some distributions, only 'llvm-config' is shipped, so let's always try to fallback on that
0036   string(REPLACE "." "" LLVM_FIND_VERSION_CONCAT ${LLVM_FIND_VERSION})
0037   find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${LLVM_FIND_VERSION} llvm-config${LLVM_FIND_VERSION_CONCAT} llvm-config DOC "llvm-config executable")
0038 
0039   # other distributions don't ship llvm-config, but only some llvm-config-VERSION binary
0040   # try to deduce installed LLVM version by looking up llvm-nm in PATH and *then* find llvm-config-VERSION via that
0041   if (NOT LLVM_CONFIG_EXECUTABLE)
0042     find_program(_llvmNmExecutable llvm-nm)
0043     if (_llvmNmExecutable)
0044       execute_process(COMMAND ${_llvmNmExecutable} --version OUTPUT_VARIABLE _out)
0045       string(REGEX REPLACE ".*LLVM version ([^ \n]+).*" "\\1" _versionString "${_out}")
0046       find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${_versionString} DOC "llvm-config executable")
0047     endif()
0048   endif()
0049 endif()
0050 
0051 set(LLVM_FOUND FALSE)
0052 
0053 if (LLVM_CONFIG_EXECUTABLE)
0054   # verify that we've found the correct version of llvm-config
0055   execute_process(COMMAND ${LLVM_CONFIG_EXECUTABLE} --version
0056     OUTPUT_VARIABLE LLVM_VERSION
0057     OUTPUT_STRIP_TRAILING_WHITESPACE)
0058 
0059   if (NOT LLVM_VERSION)
0060     set(_LLVM_ERROR_MESSAGE "Failed to parse version from llvm-config")
0061   elseif (LLVM_FIND_VERSION VERSION_GREATER LLVM_VERSION)
0062     set(_LLVM_ERROR_MESSAGE "LLVM version too old: ${LLVM_VERSION}")
0063   else()
0064     set(LLVM_FOUND TRUE)
0065   endif()
0066 else()
0067   set(_LLVM_ERROR_MESSAGE "Could NOT find 'llvm-config' executable")
0068 endif()
0069 
0070 if (LLVM_FOUND)
0071   execute_process(
0072     COMMAND ${LLVM_CONFIG_EXECUTABLE} --includedir
0073     OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
0074     OUTPUT_STRIP_TRAILING_WHITESPACE
0075   )
0076 
0077   execute_process(
0078     COMMAND ${LLVM_CONFIG_EXECUTABLE} --libdir
0079     OUTPUT_VARIABLE LLVM_LIBRARY_DIRS
0080     OUTPUT_STRIP_TRAILING_WHITESPACE
0081   )
0082 
0083   execute_process(
0084     COMMAND ${LLVM_CONFIG_EXECUTABLE} --cppflags
0085     OUTPUT_VARIABLE LLVM_CFLAGS
0086     OUTPUT_STRIP_TRAILING_WHITESPACE
0087   )
0088 
0089   execute_process(
0090     COMMAND ${LLVM_CONFIG_EXECUTABLE} --ldflags
0091     OUTPUT_VARIABLE LLVM_LFLAGS
0092     OUTPUT_STRIP_TRAILING_WHITESPACE
0093   )
0094 
0095   execute_process(
0096     COMMAND ${LLVM_CONFIG_EXECUTABLE} --libs core bitreader asmparser analysis
0097     OUTPUT_VARIABLE LLVM_MODULE_LIBS
0098     OUTPUT_STRIP_TRAILING_WHITESPACE
0099   )
0100 
0101   execute_process(
0102     COMMAND ${LLVM_CONFIG_EXECUTABLE} --libfiles
0103     OUTPUT_VARIABLE LLVM_LIBS
0104     OUTPUT_STRIP_TRAILING_WHITESPACE
0105   )
0106   string(REPLACE " " ";" LLVM_LIBS ${LLVM_LIBS}) # Make it consistent with --libs
0107 
0108   execute_process(
0109     COMMAND ${LLVM_CONFIG_EXECUTABLE} --system-libs
0110     OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
0111     OUTPUT_STRIP_TRAILING_WHITESPACE
0112   )
0113 
0114   execute_process(
0115     COMMAND ${LLVM_CONFIG_EXECUTABLE} --prefix
0116     OUTPUT_VARIABLE LLVM_INSTALL_PREFIX
0117     OUTPUT_STRIP_TRAILING_WHITESPACE
0118   )
0119 
0120   # potentially add include dir from binary dir for non-installed LLVM
0121   execute_process(
0122     COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root
0123     OUTPUT_VARIABLE _llvmSourceRoot
0124     OUTPUT_STRIP_TRAILING_WHITESPACE
0125   )
0126   string(FIND "${LLVM_INCLUDE_DIRS}" "${_llvmSourceRoot}" _llvmIsInstalled)
0127   if (NOT _llvmIsInstalled)
0128     list(APPEND LLVM_INCLUDE_DIRS "${LLVM_INSTALL_PREFIX}/include")
0129   endif()
0130 endif()
0131 
0132 if (LLVM_FIND_REQUIRED AND NOT LLVM_FOUND)
0133   message(FATAL_ERROR "Could not find LLVM: ${_LLVM_ERROR_MESSAGE}")
0134 elseif(_LLVM_ERROR_MESSAGE)
0135   message(STATUS "Could not find LLVM: ${_LLVM_ERROR_MESSAGE}")
0136 endif()
0137 
0138 if (LLVM_FOUND)
0139   message(STATUS "Found LLVM (version: ${LLVM_VERSION}): (using ${LLVM_CONFIG_EXECUTABLE})")
0140   message(STATUS "  Include dirs:   ${LLVM_INCLUDE_DIRS}")
0141   message(STATUS "  LLVM libraries: ${LLVM_LIBS}")
0142   message(STATUS "  LLVM System libraries: ${LLVM_SYSTEM_LIBS}")
0143 endif()