blob: 00b0e658f54c3f969301e37d893b987ed9dd23cc [file] [log] [blame]
#
# Copyright (c) 2019-2023, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#[=======================================================================[.rst:
FindLibClang
------------
CMake module for finding the LibClang library.
Control flow
^^^^^^^^^^^^
1. Running ``llvm-config`` if exists
2. Searching for library at common places
3. Searching in Windows registry if available
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, if found:
``LibClang``
The Clang library
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``LibClang_FOUND``
True if the system has the Clang library.
``LibClang_LIBRARY_DIRS``
Libraries needed to link to Clang.
#]=======================================================================]
# 1. Use llvm-config
find_program(_LLVM_CONFIG_COMMAND "llvm-config")
if (_LLVM_CONFIG_COMMAND)
message(STATUS "Setting LibClang_LIBRARY_DIRS using ${_LLVM_CONFIG_COMMAND}")
execute_process(
COMMAND ${_LLVM_CONFIG_COMMAND} --libdir
OUTPUT_VARIABLE _LLVM_CONFIG_OUTPUT
)
# Stripping newline
string(STRIP ${_LLVM_CONFIG_OUTPUT} LibClang_LIBRARY_DIRS)
endif()
# 2. Try to find as library
if (NOT LibClang_LIBRARY_DIRS)
message(STATUS "Setting LibClang_LIBRARY_DIRS based on common directories list")
set(LIBCLANG_COMMON_PATHS
/usr/lib/llvm-14/lib
/usr/lib/llvm-10/lib
/usr/lib/llvm-9/lib
/usr/lib/llvm-8/lib
/usr/lib/llvm-7/lib
/usr/lib/llvm-6.0/lib)
if (WIN32)
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
get_filename_component(LLVM_PATH_FROM_REGISTRY [HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM] ABSOLUTE)
list(APPEND LIBCLANG_COMMON_PATHS "${LLVM_PATH_FROM_REGISTRY}/bin")
endif()
find_library(_LIBCLANG_PATH
NAMES clang
HINTS ${LIBCLANG_COMMON_PATHS}
)
if (_LIBCLANG_PATH)
get_filename_component(LibClang_LIBRARY_DIRS ${_LIBCLANG_PATH} DIRECTORY)
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibClang
"Please install llvm-config or set LibClang path manually"
LibClang_LIBRARY_DIRS
)