<div dir="ltr">broken on this bot <a href="https://lab.llvm.org/buildbot/#/builders/236/builds/4459">https://lab.llvm.org/buildbot/#/builders/236/builds/4459</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 2 Jun 2023 at 23:30, Tom Stellard via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: paperchalice<br>
Date: 2023-06-02T23:29:44-07:00<br>
New Revision: 39aa0f5c434b463520ac39a8dbe933ee8c4c5ea7<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/39aa0f5c434b463520ac39a8dbe933ee8c4c5ea7" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/39aa0f5c434b463520ac39a8dbe933ee8c4c5ea7</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/39aa0f5c434b463520ac39a8dbe933ee8c4c5ea7.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/39aa0f5c434b463520ac39a8dbe933ee8c4c5ea7.diff</a><br>
<br>
LOG: [CMake] Ensure `CLANG_RESOURCE_DIR` is respected.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    clang/lib/Headers/CMakeLists.txt<br>
    clang/lib/Tooling/CMakeLists.txt<br>
    clang/runtime/CMakeLists.txt<br>
    compiler-rt/cmake/base-config-ix.cmake<br>
    lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp<br>
    lldb/unittests/Expression/ClangParserTest.cpp<br>
    llvm/cmake/modules/LLVMExternalProjectUtils.cmake<br>
    openmp/CMakeLists.txt<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt<br>
index bbd3d0f2d719a..f2ee2e036deb9 100644<br>
--- a/clang/lib/Headers/CMakeLists.txt<br>
+++ b/clang/lib/Headers/CMakeLists.txt<br>
@@ -298,7 +298,8 @@ set(openmp_wrapper_files<br>
   openmp_wrappers/new<br>
 )<br>
<br>
-set(output_dir ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}/include)<br>
+include(GetClangResourceDir)<br>
+get_clang_resource_dir(output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)<br>
 set(out_files)<br>
 set(generated_files)<br>
<br>
@@ -456,7 +457,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files})<br>
 add_header_target("windows-resource-headers" ${windows_only_files})<br>
 add_header_target("utility-resource-headers" ${utility_files})<br>
<br>
-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)<br>
+get_clang_resource_dir(header_install_dir SUBDIR include)<br>
<br>
 #############################################################<br>
 # Install rules for the catch-all clang-resource-headers target<br>
<br>
diff  --git a/clang/lib/Tooling/CMakeLists.txt b/clang/lib/Tooling/CMakeLists.txt<br>
index e4ce43762d6b6..aff39e4de13c0 100644<br>
--- a/clang/lib/Tooling/CMakeLists.txt<br>
+++ b/clang/lib/Tooling/CMakeLists.txt<br>
@@ -53,6 +53,8 @@ else()<br>
     list(APPEND implicitDirs -I ${implicitDir})<br>
   endforeach()<br>
<br>
+  include(GetClangResourceDir)<br>
+  get_clang_resource_dir(resource_dir PREFIX ${LLVM_BINARY_DIR})<br>
   add_custom_command(<br>
       COMMENT Generate ASTNodeAPI.json<br>
       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json<br>
@@ -61,7 +63,7 @@ else()<br>
       $<TARGET_FILE:clang-ast-dump><br>
         # Skip this in debug mode because parsing AST.h is too slow<br>
         --skip-processing=${skip_expensive_processing}<br>
-        -I ${LLVM_BINARY_DIR}/lib/clang/${CLANG_VERSION_MAJOR}/include<br>
+        -I ${resource_dir}/include<br>
         -I ${CLANG_SOURCE_DIR}/include<br>
         -I ${LLVM_BINARY_DIR}/tools/clang/include<br>
         -I ${LLVM_BINARY_DIR}/include<br>
<br>
diff  --git a/clang/runtime/CMakeLists.txt b/clang/runtime/CMakeLists.txt<br>
index 94b5d783ce361..2dd305428c9ac 100644<br>
--- a/clang/runtime/CMakeLists.txt<br>
+++ b/clang/runtime/CMakeLists.txt<br>
@@ -66,6 +66,9 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/)<br>
     list(APPEND compiler_rt_configure_deps LLVMTestingSupport)<br>
   endif()<br>
<br>
+  include(GetClangResourceDir)<br>
+  get_clang_resource_dir(output_resource_dir PREFIX ${LLVM_BINARY_DIR})<br>
+  get_clang_resource_dir(install_resource_dir)<br>
   ExternalProject_Add(compiler-rt<br>
     DEPENDS llvm-config clang ${compiler_rt_configure_deps}<br>
     PREFIX ${COMPILER_RT_PREFIX}<br>
@@ -82,9 +85,9 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/)<br>
                -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}<br>
                -DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config<br>
                -DLLVM_LIT_ARGS=${LLVM_LIT_ARGS}<br>
-               -DCOMPILER_RT_OUTPUT_DIR=${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}<br>
+               -DCOMPILER_RT_OUTPUT_DIR=${output_resource_dir}<br>
                -DCOMPILER_RT_EXEC_OUTPUT_DIR=${LLVM_RUNTIME_OUTPUT_INTDIR}<br>
-               -DCOMPILER_RT_INSTALL_PATH:PATH=lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}<br>
+               -DCOMPILER_RT_INSTALL_PATH:PATH=${install_resource_dir}<br>
                -DCOMPILER_RT_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}<br>
                -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}<br>
                -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX}<br>
<br>
diff  --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake<br>
index c6e95055b0028..ede8428c39382 100644<br>
--- a/compiler-rt/cmake/base-config-ix.cmake<br>
+++ b/compiler-rt/cmake/base-config-ix.cmake<br>
@@ -7,6 +7,7 @@ include(BuiltinTests)<br>
 include(CheckIncludeFile)<br>
 include(CheckCXXSourceCompiles)<br>
 include(GNUInstallDirs)<br>
+include(GetClangResourceDir)<br>
 include(ExtendPath)<br>
 include(CompilerRTDarwinUtils)<br>
<br>
@@ -38,15 +39,10 @@ if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSIO<br>
 endif()<br>
<br>
 if (LLVM_TREE_AVAILABLE)<br>
-  # Compute the Clang version from the LLVM version.<br>
-  # FIXME: We should be able to reuse CLANG_VERSION_MAJOR variable calculated<br>
-  #        in Clang cmake files, instead of copying the rules here.<br>
-  string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR<br>
-         ${PACKAGE_VERSION})<br>
   # Setup the paths where compiler-rt runtimes and headers should be stored.<br>
-  set(COMPILER_RT_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR})<br>
+  get_clang_resource_dir(COMPILER_RT_OUTPUT_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/..)<br>
   set(COMPILER_RT_EXEC_OUTPUT_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})<br>
-  set(COMPILER_RT_INSTALL_PATH lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR})<br>
+  get_clang_resource_dir(COMPILER_RT_INSTALL_PATH)<br>
   option(COMPILER_RT_INCLUDE_TESTS "Generate and build compiler-rt unit tests."<br>
          ${LLVM_INCLUDE_TESTS})<br>
   option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered"<br>
<br>
diff  --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp<br>
index ae4dcc05256e7..3bb303c0e1931 100644<br>
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp<br>
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp<br>
@@ -10,6 +10,7 @@<br>
<br>
 #include "clang/Basic/Version.h"<br>
 #include "clang/Config/config.h"<br>
+#include "clang/Driver/Driver.h"<br>
<br>
 #include "llvm/ADT/StringRef.h"<br>
 #include "llvm/ADT/Twine.h"<br>
@@ -51,11 +52,14 @@ static bool DefaultComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,<br>
   Log *log = GetLog(LLDBLog::Host);<br>
   std::string raw_path = lldb_shlib_spec.GetPath();<br>
   llvm::StringRef parent_dir = llvm::sys::path::parent_path(raw_path);<br>
+  const std::string clang_resource_path =<br>
+      clang::driver::Driver::GetResourcesPath("bin/lldb", CLANG_RESOURCE_DIR);<br>
<br>
   static const llvm::StringRef kResourceDirSuffixes[] = {<br>
       // LLVM.org's build of LLDB uses the clang resource directory placed<br>
-      // in $install_dir/lib{,64}/clang/$clang_version.<br>
-      CLANG_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING,<br>
+      // in $install_dir/lib{,64}/clang/$clang_version or<br>
+      // $install_dir/bin/$CLANG_RESOURCE_DIR<br>
+      clang_resource_path,<br>
       // swift-lldb uses the clang resource directory copied from swift, which<br>
       // by default is placed in $install_dir/lib{,64}/lldb/clang. LLDB places<br>
       // it there, so we use LLDB_INSTALL_LIBDIR_BASENAME.<br>
@@ -82,7 +86,8 @@ static bool DefaultComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,<br>
 }<br>
<br>
 bool lldb_private::ComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,<br>
-                                         FileSpec &file_spec, bool verify) {<br>
+                                                 FileSpec &file_spec,<br>
+                                                 bool verify) {<br>
 #if !defined(__APPLE__)<br>
   return DefaultComputeClangResourceDirectory(lldb_shlib_spec, file_spec,<br>
                                               verify);<br>
<br>
diff  --git a/lldb/unittests/Expression/ClangParserTest.cpp b/lldb/unittests/Expression/ClangParserTest.cpp<br>
index e5d90b25bf430..ed5ee323b7d20 100644<br>
--- a/lldb/unittests/Expression/ClangParserTest.cpp<br>
+++ b/lldb/unittests/Expression/ClangParserTest.cpp<br>
@@ -7,6 +7,8 @@<br>
 //===----------------------------------------------------------------------===//<br>
<br>
 #include "clang/Basic/Version.h"<br>
+#include "clang/Config/config.h"<br>
+#include "clang/Driver/Driver.h"<br>
<br>
 #include "Plugins/ExpressionParser/Clang/ClangHost.h"<br>
 #include "TestingSupport/SubsystemRAII.h"<br>
@@ -37,13 +39,11 @@ static std::string ComputeClangResourceDir(std::string lldb_shlib_path,<br>
 TEST_F(ClangHostTest, ComputeClangResourceDirectory) {<br>
 #if !defined(_WIN32)<br>
   std::string path_to_liblldb = "/foo/bar/lib/";<br>
-  std::string path_to_clang_dir =<br>
-      "/foo/bar/" LLDB_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING;<br>
 #else<br>
-  std::string path_to_liblldb = "C:\\foo\\bar\\lib";<br>
-  std::string path_to_clang_dir =<br>
-      "C:\\foo\\bar\\lib\\clang\\" CLANG_VERSION_MAJOR_STRING;<br>
+  std::string path_to_liblldb = "C:\\foo\\bar\\lib\\";<br>
 #endif<br>
+  std::string path_to_clang_dir = clang::driver::Driver::GetResourcesPath(<br>
+      path_to_liblldb + "liblldb", CLANG_RESOURCE_DIR);<br>
   EXPECT_EQ(ComputeClangResourceDir(path_to_liblldb), path_to_clang_dir);<br>
<br>
   // The path doesn't really exist, so setting verify to true should make<br>
<br>
diff  --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake<br>
index 44af6c1462bde..4b5b600307ec9 100644<br>
--- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake<br>
+++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake<br>
@@ -280,7 +280,11 @@ function(llvm_ExternalProject_Add name source_dir)<br>
     if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")<br>
       string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR<br>
              ${PACKAGE_VERSION})<br>
-      set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")<br>
+      if(DEFINED CLANG_RESOURCE_DIR AND NOT CLANG_RESOURCE_DIR STREQUAL "")<br>
+        set(resource_dir ${LLVM_TOOLS_BINARY_DIR}/${CLANG_RESOURCE_DIR})<br>
+      else()<br>
+        set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")<br>
+      endif()<br>
       set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER)<br>
       foreach(type ${flag_types})<br>
         set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir})<br>
<br>
diff  --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt<br>
index 04678cbd4f33d..c1efcaf80b54d 100644<br>
--- a/openmp/CMakeLists.txt<br>
+++ b/openmp/CMakeLists.txt<br>
@@ -90,8 +90,8 @@ option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF)<br>
 if(${OPENMP_STANDALONE_BUILD})<br>
   set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}")<br>
 else()<br>
-  string(REGEX MATCH "[0-9]+" CLANG_VERSION ${PACKAGE_VERSION})<br>
-  set(LIBOMP_HEADERS_INSTALL_PATH "${OPENMP_INSTALL_LIBDIR}/clang/${CLANG_VERSION}/include")<br>
+  include(GetClangResourceDir)<br>
+  get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include)<br>
 endif()<br>
<br>
 # Build host runtime library, after LIBOMPTARGET variables are set since they are needed<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>