123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- # Copyright (c) 2007-2015 University of Illinois at Urbana-Champaign.
- # Copyright (c) 2015, Vsevolod Stakhov
- # - Find LLVM
- # This module can be used to find LLVM.
- # It requires that the llvm-config executable be available on the system path.
- # Once found, llvm-config is used for everything else.
- #
- # Typical usage could be:
- # find_package(LLVM QUIET REQUIRED COMPONENTS jit native interpreter)
- #
- # If the QUIET flag is not set, the specified components and LLVM version are
- # outputted.
- #
- # If the COMPONENTS are not set, the default set of "all" is used.
- #
- # The following variables are set:
- #
- # LLVM_FOUND - Set to YES if LLVM is found.
- # LLVM_VERSION - Set to the decimal version of the LLVM library.
- # LLVM_C_FLAGS - All flags that should be passed to a C compiler.
- # LLVM_CXX_FLAGS - All flags that should be passed to a C++ compiler.
- # LLVM_CPP_FLAGS - All flags that should be passed to the C pre-processor.
- # LLVM_LD_FLAGS - Additional flags to pass to the linker.
- # LLVM_LIBRARY_DIRS - A list of directories where the LLVM libraries are located.
- # LLVM_INCLUDE_DIRS - A list of directories where the LLVM headers are located.
- # LLVM_LIBRARIES - A list of libraries which should be linked against.
-
- # A macro to run llvm config
- macro(_llvm_config _var_name)
- # Firstly, locate the LLVM config executable
- find_program(_llvm_config_exe
- NAMES llvm-config
- DOC "llvm-config executable location"
- )
-
- # If no llvm-config executable was found, set the output variable to not
- # found.
- if (NOT _llvm_config_exe)
- set(${_var_name} "${_var_name}-NOTFOUND")
- else (NOT _llvm_config_exe)
- # Otherwise, run llvm-config
- execute_process(
- COMMAND ${_llvm_config_exe} ${ARGN}
- OUTPUT_VARIABLE ${_var_name}
- RESULT_VARIABLE _llvm_config_retval
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- if (RESULT_VARIABLE)
- message(SEND_ERROR
- "Error running llvm-config with arguments: ${ARGN}")
- endif (RESULT_VARIABLE)
- endif (NOT _llvm_config_exe)
- endmacro(_llvm_config)
-
- # The default set of components
- set(_llvm_components all)
-
- # If components have been specified via find_package, use them
- if (LLVM_FIND_COMPONENTS)
- set(_llvm_components ${LLVM_FIND_COMPONENTS})
- endif (LLVM_FIND_COMPONENTS)
-
- if (NOT LLVM_FIND_QUIETLY)
- message(STATUS "Looking for LLVM components: ${_llvm_components}")
- endif (NOT LLVM_FIND_QUIETLY)
-
- _llvm_config(LLVM_VERSION --version)
- _llvm_config(LLVM_C_FLAGS --cflags)
- _llvm_config(LLVM_CXX_FLAGS --cxxflags)
- _llvm_config(LLVM_CPP_FLAGS --cppflags)
- _llvm_config(LLVM_LD_FLAGS --ldflags)
- _llvm_config(LLVM_LIBRARY_DIRS --libdir)
- _llvm_config(LLVM_INCLUDE_DIRS --includedir)
- _llvm_config(LLVM_LIBRARIES --libs ${_llvm_components})
-
- if (NOT LLVM_FIND_QUIETLY)
- message(STATUS "Found LLVM version: ${LLVM_VERSION}")
- endif (NOT LLVM_FIND_QUIETLY)
-
- SET(libclang_llvm_header_search_paths
- # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
- "/usr/lib/llvm-${LLVM_VERSION}/include/"
- # LLVM MacPorts
- "/opt/local/libexec/llvm-${LLVM_VERSION}/include"
- # LLVM Homebrew
- "/usr/local/Cellar/llvm/${LLVM_VERSION}/include"
- # LLVM Homebrew/versions
- "/usr/local/lib/llvm-${LLVM_VERSION}/include"
- # FreeBSD ports versions
- "/usr/local/llvm${LLVM_VERSION}/include"
- )
-
- SET(libclang_llvm_lib_search_paths
- # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
- "/usr/lib/llvm-${LLVM_VERSION}/lib/"
- # LLVM MacPorts
- "/opt/local/libexec/llvm-${LLVM_VERSION}/lib"
- # LLVM Homebrew
- "/usr/local/Cellar/llvm/${LLVM_VERSION}/lib"
- # LLVM Homebrew/versions
- "/usr/local/lib/llvm-${LLVM_VERSION}/lib"
- # FreeBSD ports versions
- "/usr/local/llvm${LLVM_VERSION}/lib"
- )
-
- find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
- PATHS ${libclang_llvm_header_search_paths}
- PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
- DOC "The path to the directory that contains clang-c/Index.h")
- find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
- PATHS ${libclang_llvm_lib_search_paths}
- PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
- DOC "The file that corresponds to the libclang library.")
-
- get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH)
-
- set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY})
- set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR})
-
- # handle the QUIETLY and REQUIRED arguments and set LLVM_FOUND to TRUE if
- # all listed variables are TRUE
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(LLVM
- DEFAULT_MSG
- LLVM_LIBRARIES
- LLVM_INCLUDE_DIRS
- LLVM_LIBRARY_DIRS)
|