From a478359405930ce9f0f79f71562dfa35ece8def1 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 7 Feb 2020 13:28:15 +0100 Subject: [PATCH] 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 --- src/libs/clangsupport/CMakeLists.txt | 44 ++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/libs/clangsupport/CMakeLists.txt b/src/libs/clangsupport/CMakeLists.txt index af8bfc2342b..ac3703d994a 100644 --- a/src/libs/clangsupport/CMakeLists.txt +++ b/src/libs/clangsupport/CMakeLists.txt @@ -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}" +)