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()