CMake Build: Proper handling of clang include / binary directories

Clang needs include and binary files to be relative to Qt Creator
build / installation directory and not hardcoded to LLVM/Clang
installation on the host machine.

Change-Id: I3724cf0531305f53b31ee17b96847042e96d52d3
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2020-02-07 13:28:15 +01:00
committed by Alessandro Portale
parent 6f2beafaf2
commit a478359405

View File

@@ -5,8 +5,8 @@ add_qtc_library(ClangSupport
PUBLIC_DEPENDS Utils Sqlite Qt5::Core Qt5::Network
PUBLIC_DEFINES
CLANG_VERSION="${CLANG_VERSION}"
CLANG_RESOURCE_DIR="${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include"
CLANG_BINDIR="${LLVM_TOOLS_BINARY_DIR}"
CLANG_RESOURCE_DIR="${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include"
CLANG_BINDIR="${IDE_LIBEXEC_PATH}/clang/bin"
DEFINES CLANGSUPPORT_BUILD_LIB
SOURCES
alivemessage.cpp alivemessage.h
@@ -140,3 +140,43 @@ add_qtc_library(ClangSupport
updateprojectpartsmessage.cpp updateprojectpartsmessage.h
writemessageblock.cpp writemessageblock.h
)
add_custom_target(copy_clang_to_builddir
COMMENT Copy Clang files into build directory
)
add_dependencies(ClangSupport copy_clang_to_builddir)
add_custom_command(TARGET copy_clang_to_builddir PRE_BUILD
COMMAND "${CMAKE_COMMAND}"
-E make_directory
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}"
COMMAND "${CMAKE_COMMAND}"
-E copy_directory
"${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include"
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}"
VERBATIM
)
foreach(executable clang clang-cl clangd clang-tidy clazy-standalone)
if (EXISTS "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}")
add_custom_command(TARGET copy_clang_to_builddir PRE_BUILD
COMMAND "${CMAKE_COMMAND}"
-E make_directory
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/"
COMMAND "${CMAKE_COMMAND}"
-E copy
"${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}"
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/"
VERBATIM
)
install(
FILES "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}"
DESTINATION "${IDE_LIBEXEC_PATH}/clang/bin"
)
endif()
endforeach()
install(DIRECTORY ${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include
DESTINATION "${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}"
)