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