In Debian e.g. Clang is part of LLVM, so we need to also check its root directory sometimes to find Clang files.
128 lines
3.1 KiB
CMake
128 lines
3.1 KiB
CMake
# - Find Clang library
|
|
# Find the native Clang includes and library
|
|
# This module defines
|
|
# CLANG_INCLUDE_DIRS, where to find AST/AST.h, Set when
|
|
# CLANG_INCLUDE_DIR is found.
|
|
# CLANG_LIBRARIES, libraries to link against to use Clang.
|
|
# CLANG_ROOT_DIR, The base directory to search for Clang.
|
|
# This can also be an environment variable.
|
|
# CLANG_FOUND, If false, do not try to use Clang.
|
|
|
|
#=============================================================================
|
|
# Copyright 2021 Blender Foundation.
|
|
#
|
|
# Distributed under the OSI-approved BSD 3-Clause License,
|
|
# see accompanying file BSD-3-Clause-license.txt for details.
|
|
#=============================================================================
|
|
|
|
# If CLANG_ROOT_DIR was defined in the environment, use it.
|
|
if(NOT CLANG_ROOT_DIR AND NOT $ENV{CLANG_ROOT_DIR} STREQUAL "")
|
|
set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
|
|
endif()
|
|
|
|
if(NOT LLVM_ROOT_DIR)
|
|
if(DEFINED LLVM_VERSION)
|
|
message(running llvm-config-${LLVM_VERSION})
|
|
find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
|
|
endif()
|
|
if(NOT LLVM_CONFIG)
|
|
find_program(LLVM_CONFIG llvm-config)
|
|
endif()
|
|
|
|
execute_process(COMMAND ${LLVM_CONFIG} --prefix
|
|
OUTPUT_VARIABLE LLVM_ROOT_DIR
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation")
|
|
endif()
|
|
|
|
set(_CLANG_SEARCH_DIRS
|
|
${CLANG_ROOT_DIR}
|
|
${LLVM_ROOT_DIR}
|
|
/opt/lib/clang
|
|
)
|
|
|
|
find_path(CLANG_INCLUDE_DIR
|
|
NAMES
|
|
AST/AST.h
|
|
HINTS
|
|
${_CLANG_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
include
|
|
include/clang
|
|
)
|
|
|
|
|
|
set(_CLANG_FIND_COMPONENTS
|
|
clangDependencyScanning
|
|
clangDynamicASTMatchers
|
|
clangFrontendTool
|
|
clangStaticAnalyzerFrontend
|
|
clangHandleCXX
|
|
clangStaticAnalyzerCheckers
|
|
clangStaticAnalyzerCore
|
|
clangToolingASTDiff
|
|
clangToolingRefactoring
|
|
clangToolingSyntax
|
|
clangARCMigrate
|
|
clangCodeGen
|
|
clangCrossTU
|
|
clangIndex
|
|
clangTooling
|
|
clangFormat
|
|
clangToolingInclusions
|
|
clangRewriteFrontend
|
|
clangFrontend
|
|
clangSerialization
|
|
clangDriver
|
|
clangToolingCore
|
|
clangParse
|
|
clangRewrite
|
|
clangSema
|
|
clangEdit
|
|
clangAnalysis
|
|
clangASTMatchers
|
|
clangAST
|
|
clangLex
|
|
clangBasic
|
|
)
|
|
|
|
set(_CLANG_LIBRARIES)
|
|
foreach(COMPONENT ${_CLANG_FIND_COMPONENTS})
|
|
string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
|
|
|
find_library(CLANG_${UPPERCOMPONENT}_LIBRARY
|
|
NAMES
|
|
${COMPONENT}
|
|
HINTS
|
|
${_CLANG_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
lib64 lib
|
|
)
|
|
list(APPEND _CLANG_LIBRARIES "${CLANG_${UPPERCOMPONENT}_LIBRARY}")
|
|
endforeach()
|
|
|
|
|
|
# Handle the QUIETLY and REQUIRED arguments and set CLANG_FOUND to TRUE if
|
|
# all listed variables are TRUE.
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(Clang DEFAULT_MSG
|
|
_CLANG_LIBRARIES CLANG_INCLUDE_DIR)
|
|
|
|
if(CLANG_FOUND)
|
|
set(CLANG_LIBRARIES ${_CLANG_LIBRARIES})
|
|
set(CLANG_INCLUDE_DIRS ${CLANG_INCLUDE_DIR})
|
|
endif()
|
|
|
|
mark_as_advanced(
|
|
CLANG_INCLUDE_DIR
|
|
)
|
|
|
|
foreach(COMPONENT ${_CLANG_FIND_COMPONENTS})
|
|
string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
|
mark_as_advanced(CLANG_${UPPERCOMPONENT}_LIBRARY)
|
|
endforeach()
|
|
|
|
unset(_CLANG_SEARCH_DIRS)
|
|
unset(_CLANG_FIND_COMPONENTS)
|
|
unset(_CLANG_LIBRARIES)
|