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