You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FindLLVM.cmake 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # Copyright (c) 2007-2015 University of Illinois at Urbana-Champaign.
  2. # Copyright (c) 2015, Vsevolod Stakhov
  3. # - Find LLVM
  4. # This module can be used to find LLVM.
  5. # It requires that the llvm-config executable be available on the system path.
  6. # Once found, llvm-config is used for everything else.
  7. #
  8. # Typical usage could be:
  9. # find_package(LLVM QUIET REQUIRED COMPONENTS jit native interpreter)
  10. #
  11. # If the QUIET flag is not set, the specified components and LLVM version are
  12. # outputted.
  13. #
  14. # If the COMPONENTS are not set, the default set of "all" is used.
  15. #
  16. # The following variables are set:
  17. #
  18. # LLVM_FOUND - Set to YES if LLVM is found.
  19. # LLVM_VERSION - Set to the decimal version of the LLVM library.
  20. # LLVM_C_FLAGS - All flags that should be passed to a C compiler.
  21. # LLVM_CXX_FLAGS - All flags that should be passed to a C++ compiler.
  22. # LLVM_CPP_FLAGS - All flags that should be passed to the C pre-processor.
  23. # LLVM_LD_FLAGS - Additional flags to pass to the linker.
  24. # LLVM_LIBRARY_DIRS - A list of directories where the LLVM libraries are located.
  25. # LLVM_INCLUDE_DIRS - A list of directories where the LLVM headers are located.
  26. # LLVM_LIBRARIES - A list of libraries which should be linked against.
  27. # A macro to run llvm config
  28. macro(_llvm_config _var_name)
  29. # Firstly, locate the LLVM config executable
  30. find_program(_llvm_config_exe
  31. NAMES llvm-config
  32. DOC "llvm-config executable location"
  33. )
  34. # If no llvm-config executable was found, set the output variable to not
  35. # found.
  36. if (NOT _llvm_config_exe)
  37. set(${_var_name} "${_var_name}-NOTFOUND")
  38. else (NOT _llvm_config_exe)
  39. # Otherwise, run llvm-config
  40. execute_process(
  41. COMMAND ${_llvm_config_exe} ${ARGN}
  42. OUTPUT_VARIABLE ${_var_name}
  43. RESULT_VARIABLE _llvm_config_retval
  44. OUTPUT_STRIP_TRAILING_WHITESPACE
  45. )
  46. if (RESULT_VARIABLE)
  47. message(SEND_ERROR
  48. "Error running llvm-config with arguments: ${ARGN}")
  49. endif (RESULT_VARIABLE)
  50. endif (NOT _llvm_config_exe)
  51. endmacro(_llvm_config)
  52. # The default set of components
  53. set(_llvm_components all)
  54. # If components have been specified via find_package, use them
  55. if (LLVM_FIND_COMPONENTS)
  56. set(_llvm_components ${LLVM_FIND_COMPONENTS})
  57. endif (LLVM_FIND_COMPONENTS)
  58. if (NOT LLVM_FIND_QUIETLY)
  59. message(STATUS "Looking for LLVM components: ${_llvm_components}")
  60. endif (NOT LLVM_FIND_QUIETLY)
  61. _llvm_config(LLVM_VERSION --version)
  62. _llvm_config(LLVM_C_FLAGS --cflags)
  63. _llvm_config(LLVM_CXX_FLAGS --cxxflags)
  64. _llvm_config(LLVM_CPP_FLAGS --cppflags)
  65. _llvm_config(LLVM_LD_FLAGS --ldflags)
  66. _llvm_config(LLVM_LIBRARY_DIRS --libdir)
  67. _llvm_config(LLVM_INCLUDE_DIRS --includedir)
  68. _llvm_config(LLVM_LIBRARIES --libs ${_llvm_components})
  69. if (NOT LLVM_FIND_QUIETLY)
  70. message(STATUS "Found LLVM version: ${LLVM_VERSION}")
  71. endif (NOT LLVM_FIND_QUIETLY)
  72. SET(libclang_llvm_header_search_paths
  73. # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
  74. "/usr/lib/llvm-${LLVM_VERSION}/include/"
  75. # LLVM MacPorts
  76. "/opt/local/libexec/llvm-${LLVM_VERSION}/include"
  77. # LLVM Homebrew
  78. "/usr/local/Cellar/llvm/${LLVM_VERSION}/include"
  79. # LLVM Homebrew/versions
  80. "/usr/local/lib/llvm-${LLVM_VERSION}/include"
  81. # FreeBSD ports versions
  82. "/usr/local/llvm${LLVM_VERSION}/include"
  83. )
  84. SET(libclang_llvm_lib_search_paths
  85. # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
  86. "/usr/lib/llvm-${LLVM_VERSION}/lib/"
  87. # LLVM MacPorts
  88. "/opt/local/libexec/llvm-${LLVM_VERSION}/lib"
  89. # LLVM Homebrew
  90. "/usr/local/Cellar/llvm/${LLVM_VERSION}/lib"
  91. # LLVM Homebrew/versions
  92. "/usr/local/lib/llvm-${LLVM_VERSION}/lib"
  93. # FreeBSD ports versions
  94. "/usr/local/llvm${LLVM_VERSION}/lib"
  95. )
  96. find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
  97. PATHS ${libclang_llvm_header_search_paths}
  98. PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
  99. DOC "The path to the directory that contains clang-c/Index.h")
  100. find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
  101. PATHS ${libclang_llvm_lib_search_paths}
  102. PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
  103. DOC "The file that corresponds to the libclang library.")
  104. get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH)
  105. set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY})
  106. set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR})
  107. # handle the QUIETLY and REQUIRED arguments and set LLVM_FOUND to TRUE if
  108. # all listed variables are TRUE
  109. include(FindPackageHandleStandardArgs)
  110. find_package_handle_standard_args(LLVM
  111. DEFAULT_MSG
  112. LLVM_LIBRARIES
  113. LLVM_INCLUDE_DIRS
  114. LLVM_LIBRARY_DIRS)