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