Warning, /sdk/clazy/cmake/FindClang.cmake is written in an unsupported language. File is not indexed.
0001 # Detect Clang libraries
0002 #
0003 # Defines the following variables:
0004 # CLANG_FOUND - True if Clang was found
0005 # CLANG_INCLUDE_DIRS - Where to find Clang includes
0006 # CLANG_LIBRARY_DIRS - Where to find Clang libraries
0007 #
0008 # CLANG_LIBCLANG_LIB - Libclang C library
0009 #
0010 # CLANG_CLANGFRONTEND_LIB - Clang Frontend (C++) Library
0011 # CLANG_CLANGDRIVER_LIB - Clang Driver (C++) Library
0012 # ...
0013 #
0014 # CLANG_LIBS - All the Clang C++ libraries
0015 #
0016 # Uses the same include and library paths detected by FindLLVM.cmake
0017 #
0018 # See http://clang.llvm.org/docs/InternalsManual.html for full list of libraries
0019
0020 #=============================================================================
0021 # SPDX-FileCopyrightText: 2014-2015 Kevin Funk <kfunk@kde.org>
0022 #
0023 # SPDX-License-Identifier: BSD-2-Clause
0024 #=============================================================================
0025
0026 if (${Clang_FIND_REQUIRED})
0027 find_package(LLVM ${Clang_FIND_VERSION} REQUIRED)
0028 else ()
0029 find_package(LLVM ${Clang_FIND_VERSION})
0030 endif ()
0031
0032 set(CLANG_FOUND FALSE)
0033
0034 if (LLVM_FOUND AND LLVM_LIBRARY_DIRS)
0035 macro(FIND_CLANG_LIB _libname_)
0036 string(TOUPPER ${_libname_} _prettylibname_)
0037 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} HINTS ${LLVM_LIBRARY_DIRS})
0038 endmacro(FIND_CLANG_LIB)
0039 macro(FIND_AND_ADD_CLANG_LIB _libname_)
0040 string(TOUPPER ${_libname_} _prettylibname_)
0041 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} HINTS ${LLVM_LIBRARY_DIRS})
0042 if(CLANG_${_prettylibname_}_LIB)
0043 set(CLANG_LIBS ${CLANG_LIBS} ${CLANG_${_prettylibname_}_LIB})
0044 endif()
0045 endmacro(FIND_AND_ADD_CLANG_LIB)
0046
0047 # note: On Windows there's 'libclang.dll' instead of 'clang.dll' -> search for 'libclang', too
0048 find_library(CLANG_LIBCLANG_LIB NAMES clang libclang HINTS ${LLVM_LIBRARY_DIRS}) # LibClang: high-level C interface
0049
0050 FIND_CLANG_LIB(clang-cpp)
0051 FIND_AND_ADD_CLANG_LIB(clangFrontend)
0052 FIND_AND_ADD_CLANG_LIB(clangDriver)
0053 FIND_AND_ADD_CLANG_LIB(clangCodeGen)
0054 FIND_AND_ADD_CLANG_LIB(clangSema)
0055 FIND_AND_ADD_CLANG_LIB(clangChecker)
0056 FIND_AND_ADD_CLANG_LIB(clangAnalysis)
0057 FIND_AND_ADD_CLANG_LIB(clangRewriteFrontend)
0058 FIND_AND_ADD_CLANG_LIB(clangRewrite)
0059 FIND_AND_ADD_CLANG_LIB(clangAST)
0060 FIND_AND_ADD_CLANG_LIB(clangASTMatchers)
0061 FIND_AND_ADD_CLANG_LIB(clangParse)
0062 FIND_AND_ADD_CLANG_LIB(clangLex)
0063 FIND_AND_ADD_CLANG_LIB(clangBasic)
0064 FIND_AND_ADD_CLANG_LIB(clangARCMigrate)
0065 FIND_AND_ADD_CLANG_LIB(clangEdit)
0066 FIND_AND_ADD_CLANG_LIB(clangFrontendTool)
0067 FIND_AND_ADD_CLANG_LIB(clangRewrite)
0068 FIND_AND_ADD_CLANG_LIB(clangSerialization)
0069 FIND_AND_ADD_CLANG_LIB(clangTooling)
0070 FIND_AND_ADD_CLANG_LIB(clangStaticAnalyzerCheckers)
0071 FIND_AND_ADD_CLANG_LIB(clangStaticAnalyzerCore)
0072 FIND_AND_ADD_CLANG_LIB(clangStaticAnalyzerFrontend)
0073 FIND_AND_ADD_CLANG_LIB(clangSema)
0074 FIND_AND_ADD_CLANG_LIB(clangRewriteCore)
0075 endif()
0076
0077 if(CLANG_LIBS OR CLANG_LIBCLANG_LIB OR CLANG_CLANG-CPP_LIB)
0078 set(CLANG_FOUND TRUE)
0079 else()
0080 message(STATUS "Could not find any Clang libraries in ${LLVM_LIBRARY_DIRS}")
0081 endif()
0082
0083 if(CLANG_FOUND)
0084 set(CLANG_LIBRARY_DIRS ${LLVM_LIBRARY_DIRS})
0085 set(CLANG_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
0086
0087 # check whether llvm-config comes from an install prefix
0088 execute_process(
0089 COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root
0090 OUTPUT_VARIABLE _llvmSourceRoot
0091 OUTPUT_STRIP_TRAILING_WHITESPACE
0092 )
0093 string(FIND "${LLVM_INCLUDE_DIRS}" "${_llvmSourceRoot}" _llvmIsInstalled)
0094 if (NOT _llvmIsInstalled)
0095 message(STATUS "Detected that llvm-config comes from a build-tree, adding more include directories for Clang")
0096 list(APPEND CLANG_INCLUDE_DIRS
0097 "${LLVM_INSTALL_PREFIX}/tools/clang/include" # build dir
0098 "${_llvmSourceRoot}/tools/clang/include" # source dir
0099 )
0100 endif()
0101
0102 message(STATUS "Found Clang (LLVM version: ${LLVM_VERSION})")
0103 message(STATUS " Include dirs: ${CLANG_INCLUDE_DIRS}")
0104 message(STATUS " Clang libraries: ${CLANG_LIBS}")
0105 message(STATUS " Libclang C library: ${CLANG_LIBCLANG_LIB}")
0106 message(STATUS " Clang dynamic library: ${CLANG_CLANG-CPP_LIB}")
0107 else()
0108 if(Clang_FIND_REQUIRED)
0109 message(FATAL_ERROR "Could NOT find Clang")
0110 endif()
0111 endif()