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 # Copyright 2014 Kevin Funk <kfunk@kde.org> 0021 # 0022 # Redistribution and use in source and binary forms, with or without 0023 # modification, are permitted provided that the following conditions 0024 # are met: 0025 # 0026 # 1. Redistributions of source code must retain the above copyright 0027 # notice, this list of conditions and the following disclaimer. 0028 # 2. Redistributions in binary form must reproduce the above copyright 0029 # notice, this list of conditions and the following disclaimer in the 0030 # documentation and/or other materials provided with the distribution. 0031 # 0032 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 0033 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 0034 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 0035 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 0036 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 0037 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 0038 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 0039 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 0040 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 0041 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0042 #============================================================================= 0043 0044 if (NOT LLVM_ROOT AND DEFINED ENV{LLVM_ROOT}) 0045 file(TO_CMAKE_PATH "$ENV{LLVM_ROOT}" LLVM_ROOT) 0046 endif() 0047 0048 # if the user specified LLVM_ROOT, use that and fail otherwise 0049 if (LLVM_ROOT) 0050 find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config HINTS ${LLVM_ROOT}/bin DOC "llvm-config executable" NO_DEFAULT_PATH) 0051 else() 0052 # find llvm-config, prefer the one with a version suffix, e.g. llvm-config-3.5 0053 # note: FreeBSD installs llvm-config as llvm-config35 and so on 0054 # note: on some distributions, only 'llvm-config' is shipped, so let's always try to fallback on that 0055 string(REPLACE "." "" LLVM_FIND_VERSION_CONCAT ${LLVM_FIND_VERSION}) 0056 find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${LLVM_FIND_VERSION} llvm-config${LLVM_FIND_VERSION_CONCAT} llvm-config DOC "llvm-config executable") 0057 0058 # other distributions don't ship llvm-config, but only some llvm-config-VERSION binary 0059 # try to deduce installed LLVM version by looking up llvm-nm in PATH and *then* find llvm-config-VERSION via that 0060 if (NOT LLVM_CONFIG_EXECUTABLE) 0061 find_program(_llvmNmExecutable llvm-nm) 0062 if (_llvmNmExecutable) 0063 execute_process(COMMAND ${_llvmNmExecutable} --version OUTPUT_VARIABLE _out) 0064 string(REGEX REPLACE ".*LLVM version ([^ \n]+).*" "\\1" _versionString "${_out}") 0065 find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${_versionString} DOC "llvm-config executable") 0066 endif() 0067 endif() 0068 endif() 0069 0070 set(LLVM_FOUND FALSE) 0071 0072 if (LLVM_CONFIG_EXECUTABLE) 0073 # verify that we've found the correct version of llvm-config 0074 execute_process(COMMAND ${LLVM_CONFIG_EXECUTABLE} --version 0075 OUTPUT_VARIABLE LLVM_VERSION 0076 OUTPUT_STRIP_TRAILING_WHITESPACE) 0077 0078 if (NOT LLVM_VERSION) 0079 set(_LLVM_ERROR_MESSAGE "Failed to parse version from llvm-config") 0080 elseif (LLVM_FIND_VERSION VERSION_GREATER LLVM_VERSION) 0081 set(_LLVM_ERROR_MESSAGE "LLVM version too old: ${LLVM_VERSION}") 0082 else() 0083 set(LLVM_FOUND TRUE) 0084 endif() 0085 else() 0086 set(_LLVM_ERROR_MESSAGE "Could NOT find 'llvm-config' executable") 0087 endif() 0088 0089 if (LLVM_FOUND) 0090 execute_process( 0091 COMMAND ${LLVM_CONFIG_EXECUTABLE} --includedir 0092 OUTPUT_VARIABLE LLVM_INCLUDE_DIRS 0093 OUTPUT_STRIP_TRAILING_WHITESPACE 0094 ) 0095 0096 execute_process( 0097 COMMAND ${LLVM_CONFIG_EXECUTABLE} --libdir 0098 OUTPUT_VARIABLE LLVM_LIBRARY_DIRS 0099 OUTPUT_STRIP_TRAILING_WHITESPACE 0100 ) 0101 0102 execute_process( 0103 COMMAND ${LLVM_CONFIG_EXECUTABLE} --cppflags 0104 OUTPUT_VARIABLE LLVM_CFLAGS 0105 OUTPUT_STRIP_TRAILING_WHITESPACE 0106 ) 0107 0108 execute_process( 0109 COMMAND ${LLVM_CONFIG_EXECUTABLE} --ldflags 0110 OUTPUT_VARIABLE LLVM_LFLAGS 0111 OUTPUT_STRIP_TRAILING_WHITESPACE 0112 ) 0113 0114 execute_process( 0115 COMMAND ${LLVM_CONFIG_EXECUTABLE} --libs core bitreader asmparser analysis 0116 OUTPUT_VARIABLE LLVM_MODULE_LIBS 0117 OUTPUT_STRIP_TRAILING_WHITESPACE 0118 ) 0119 0120 execute_process( 0121 COMMAND ${LLVM_CONFIG_EXECUTABLE} --libfiles 0122 OUTPUT_VARIABLE LLVM_LIBS 0123 OUTPUT_STRIP_TRAILING_WHITESPACE 0124 ) 0125 string(REPLACE " " ";" LLVM_LIBS ${LLVM_LIBS}) # Make it consistent with --libs 0126 0127 execute_process( 0128 COMMAND ${LLVM_CONFIG_EXECUTABLE} --system-libs 0129 OUTPUT_VARIABLE LLVM_SYSTEM_LIBS 0130 OUTPUT_STRIP_TRAILING_WHITESPACE 0131 ) 0132 0133 execute_process( 0134 COMMAND ${LLVM_CONFIG_EXECUTABLE} --prefix 0135 OUTPUT_VARIABLE LLVM_INSTALL_PREFIX 0136 OUTPUT_STRIP_TRAILING_WHITESPACE 0137 ) 0138 0139 # potentially add include dir from binary dir for non-installed LLVM 0140 execute_process( 0141 COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root 0142 OUTPUT_VARIABLE _llvmSourceRoot 0143 OUTPUT_STRIP_TRAILING_WHITESPACE 0144 ) 0145 string(FIND "${LLVM_INCLUDE_DIRS}" "${_llvmSourceRoot}" _llvmIsInstalled) 0146 if (NOT _llvmIsInstalled) 0147 list(APPEND LLVM_INCLUDE_DIRS "${LLVM_INSTALL_PREFIX}/include") 0148 endif() 0149 endif() 0150 0151 if (LLVM_FIND_REQUIRED AND NOT LLVM_FOUND) 0152 message(FATAL_ERROR "Could not find LLVM: ${_LLVM_ERROR_MESSAGE}") 0153 elseif(_LLVM_ERROR_MESSAGE) 0154 message(STATUS "Could not find LLVM: ${_LLVM_ERROR_MESSAGE}") 0155 endif() 0156 0157 if (LLVM_FOUND) 0158 message(STATUS "Found LLVM (version: ${LLVM_VERSION}): (using ${LLVM_CONFIG_EXECUTABLE})") 0159 message(STATUS " Include dirs: ${LLVM_INCLUDE_DIRS}") 0160 message(STATUS " LLVM libraries: ${LLVM_LIBS}") 0161 message(STATUS " LLVM System libraries: ${LLVM_SYSTEM_LIBS}") 0162 endif()