llvm-project/cmake/Modules/GetClangResourceDir.cmake
Peter Collingbourne 71d4c9ce70
cmake: Allow CLANG_RESOURCE_DIR to be absolute.
Currently an absolute CLANG_RESOURCE_DIR is treated as being relative
to bin. Fix that by using cmake_path(APPEND) to append the path to bin.

The prepending of PREFIX is left as-is because callers passing PREFIX
are usually forming a path within the build directory and would not
want build products to be written to an absolute resource directory
that is likely to be an installation prefix. One exception is the caller
in lldb/cmake/modules/LLDBStandalone.cmake; for now it is not possible
to build LLDB with an absolute resource directory until the users are
disambiguated.

Reviewers: petrhosek

Reviewed By: petrhosek

Pull Request: https://github.com/llvm/llvm-project/pull/145996
2025-06-27 16:04:35 -07:00

31 lines
885 B
CMake

# get clang resource directory
#
# usage:
# get_clang_resource_dir(out_var [PREFIX prefix] [SUBDIR subdirectory])
#
# user can use `PREFIX` to prepend some path to it or use `SUBDIR` to
# get subdirectory under clang resource dir
function(get_clang_resource_dir out_var)
cmake_parse_arguments(ARG "" "PREFIX;SUBDIR" "" ${ARGN})
if(DEFINED CLANG_RESOURCE_DIR AND NOT CLANG_RESOURCE_DIR STREQUAL "")
set(ret_dir bin)
cmake_path(APPEND ret_dir ${CLANG_RESOURCE_DIR})
else()
if (NOT CLANG_VERSION_MAJOR)
string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR ${PACKAGE_VERSION})
endif()
set(ret_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR})
endif()
if(ARG_PREFIX)
set(ret_dir ${ARG_PREFIX}/${ret_dir})
endif()
if(ARG_SUBDIR)
set(ret_dir ${ret_dir}/${ARG_SUBDIR})
endif()
set(${out_var} ${ret_dir} PARENT_SCOPE)
endfunction()