paperchalice updated this revision to Diff 492684.
paperchalice added a comment.
Use `LLVM_LIBRARY_OUTPUT_INTDIR`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D141907/new/
https://reviews.llvm.org/D141907
Files:
clang/lib/Headers/CMakeLists.txt
clang/lib/Tooling/CMakeLists.txt
clang/runtime/CMakeLists.txt
cmake/Modules/GetClangResourceDir.cmake
compiler-rt/cmake/base-config-ix.cmake
lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp
lldb/unittests/Expression/ClangParserTest.cpp
llvm/cmake/modules/LLVMExternalProjectUtils.cmake
openmp/CMakeLists.txt
Index: openmp/CMakeLists.txt
===================================================================
--- openmp/CMakeLists.txt
+++ openmp/CMakeLists.txt
@@ -86,8 +86,8 @@
if(${OPENMP_STANDALONE_BUILD})
set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}")
else()
- string(REGEX MATCH "[0-9]+" CLANG_VERSION ${PACKAGE_VERSION})
- set(LIBOMP_HEADERS_INSTALL_PATH "${OPENMP_INSTALL_LIBDIR}/clang/${CLANG_VERSION}/include")
+ include(GetClangResourceDir)
+ get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include)
endif()
# Build host runtime library, after LIBOMPTARGET variables are set since they are needed
Index: llvm/cmake/modules/LLVMExternalProjectUtils.cmake
===================================================================
--- llvm/cmake/modules/LLVMExternalProjectUtils.cmake
+++ llvm/cmake/modules/LLVMExternalProjectUtils.cmake
@@ -257,7 +257,11 @@
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR
${PACKAGE_VERSION})
- set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")
+ if(DEFINED CLANG_RESOURCE_DIR AND NOT CLANG_RESOURCE_DIR STREQUAL "")
+ set(resource_dir ${LLVM_TOOLS_BINARY_DIR}/${CLANG_RESOURCE_DIR})
+ else()
+ set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")
+ endif()
set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER)
foreach(type ${flag_types})
set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir})
Index: lldb/unittests/Expression/ClangParserTest.cpp
===================================================================
--- lldb/unittests/Expression/ClangParserTest.cpp
+++ lldb/unittests/Expression/ClangParserTest.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "clang/Basic/Version.h"
+#include "clang/Config/config.h"
#include "Plugins/ExpressionParser/Clang/ClangHost.h"
#include "TestingSupport/SubsystemRAII.h"
@@ -37,12 +38,16 @@
TEST_F(ClangHostTest, ComputeClangResourceDirectory) {
#if !defined(_WIN32)
std::string path_to_liblldb = "/foo/bar/lib/";
- std::string path_to_clang_dir =
- "/foo/bar/" LLDB_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING;
+ std::string path_to_clang_dir = std::string(CLANG_RESOURCE_DIR).empty()
+ ? "/foo/bar/" LLDB_INSTALL_LIBDIR_BASENAME
+ "/clang/" CLANG_VERSION_MAJOR_STRING
+ : "/foo/bar/bin/" CLANG_RESOURCE_DIR;
#else
std::string path_to_liblldb = "C:\\foo\\bar\\lib";
std::string path_to_clang_dir =
- "C:\\foo\\bar\\lib\\clang\\" CLANG_VERSION_MAJOR_STRING;
+ std::string(CLANG_RESOURCE_DIR).empty()
+ ? "C:\\foo\\bar\\lib\\clang\\" CLANG_VERSION_MAJOR_STRING
+ : "C:\\foo\\bar\\bin\\" CLANG_RESOURCE_DIR;
#endif
EXPECT_EQ(ComputeClangResourceDir(path_to_liblldb), path_to_clang_dir);
Index: lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp
===================================================================
--- lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp
+++ lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp
@@ -54,8 +54,11 @@
static const llvm::StringRef kResourceDirSuffixes[] = {
// LLVM.org's build of LLDB uses the clang resource directory placed
- // in $install_dir/lib{,64}/clang/$clang_version.
- CLANG_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING,
+ // in $install_dir/lib{,64}/clang/$clang_version or
+ // $install_dir/bin/$CLANG_RESOURCE_DIR
+ llvm::StringRef(CLANG_RESOURCE_DIR).empty()
+ ? CLANG_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING
+ : "bin/" CLANG_RESOURCE_DIR,
// swift-lldb uses the clang resource directory copied from swift, which
// by default is placed in $install_dir/lib{,64}/lldb/clang. LLDB places
// it there, so we use LLDB_INSTALL_LIBDIR_BASENAME.
Index: compiler-rt/cmake/base-config-ix.cmake
===================================================================
--- compiler-rt/cmake/base-config-ix.cmake
+++ compiler-rt/cmake/base-config-ix.cmake
@@ -7,6 +7,7 @@
include(CheckIncludeFile)
include(CheckCXXSourceCompiles)
include(GNUInstallDirs)
+include(GetClangResourceDir)
include(ExtendPath)
check_include_file(unwind.h HAVE_UNWIND_H)
@@ -37,15 +38,10 @@
endif()
if (LLVM_TREE_AVAILABLE)
- # Compute the Clang version from the LLVM version.
- # FIXME: We should be able to reuse CLANG_VERSION_MAJOR variable calculated
- # in Clang cmake files, instead of copying the rules here.
- string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR
- ${PACKAGE_VERSION})
# Setup the paths where compiler-rt runtimes and headers should be stored.
- set(COMPILER_RT_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR})
+ get_clang_resource_dir(COMPILER_RT_OUTPUT_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/..)
set(COMPILER_RT_EXEC_OUTPUT_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
- set(COMPILER_RT_INSTALL_PATH lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR})
+ get_clang_resource_dir(COMPILER_RT_INSTALL_PATH)
option(COMPILER_RT_INCLUDE_TESTS "Generate and build compiler-rt unit tests."
${LLVM_INCLUDE_TESTS})
option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered"
Index: cmake/Modules/GetClangResourceDir.cmake
===================================================================
--- /dev/null
+++ cmake/Modules/GetClangResourceDir.cmake
@@ -0,0 +1,28 @@
+# 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)
+ if(DEFINED CLANG_RESOURCE_DIR AND NOT CLANG_RESOURCE_DIR STREQUAL "")
+ set(ret_dir bin/${CLANG_RESOURCE_DIR})
+ else()
+ string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR ${PACKAGE_VERSION})
+ set(ret_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR})
+ endif()
+
+ set(oneValueArgs PREFIX SUBDIR)
+ cmake_parse_arguments(RESOURCE_DIR "" "${oneValueArgs}" "" ${ARGN})
+
+ if(RESOURCE_DIR_PREFIX)
+ set(ret_dir ${RESOURCE_DIR_PREFIX}/${ret_dir})
+ endif()
+ if(RESOURCE_DIR_SUBDIR)
+ set(ret_dir ${ret_dir}/${RESOURCE_DIR_SUBDIR})
+ endif()
+
+ set(${out_var} ${ret_dir} PARENT_SCOPE)
+endfunction()
Index: clang/runtime/CMakeLists.txt
===================================================================
--- clang/runtime/CMakeLists.txt
+++ clang/runtime/CMakeLists.txt
@@ -66,6 +66,9 @@
list(APPEND compiler_rt_configure_deps LLVMTestingSupport)
endif()
+ include(GetClangResourceDir)
+ get_clang_resource_dir(output_resource_dir PREFIX ${LLVM_BINARY_DIR})
+ get_clang_resource_dir(install_resource_dir)
ExternalProject_Add(compiler-rt
DEPENDS llvm-config clang ${compiler_rt_configure_deps}
PREFIX ${COMPILER_RT_PREFIX}
@@ -82,9 +85,9 @@
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
-DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config
-DLLVM_LIT_ARGS=${LLVM_LIT_ARGS}
- -DCOMPILER_RT_OUTPUT_DIR=${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}
+ -DCOMPILER_RT_OUTPUT_DIR=${output_resource_dir}
-DCOMPILER_RT_EXEC_OUTPUT_DIR=${LLVM_RUNTIME_OUTPUT_INTDIR}
- -DCOMPILER_RT_INSTALL_PATH:PATH=lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}
+ -DCOMPILER_RT_INSTALL_PATH:PATH=${install_resource_dir}
-DCOMPILER_RT_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX}
Index: clang/lib/Tooling/CMakeLists.txt
===================================================================
--- clang/lib/Tooling/CMakeLists.txt
+++ clang/lib/Tooling/CMakeLists.txt
@@ -53,6 +53,8 @@
list(APPEND implicitDirs -I ${implicitDir})
endforeach()
+ include(GetClangResourceDir)
+ get_clang_resource_dir(resource_dir PREFIX ${LLVM_BINARY_DIR})
add_custom_command(
COMMENT Generate ASTNodeAPI.json
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json
@@ -61,7 +63,7 @@
$<TARGET_FILE:clang-ast-dump>
# Skip this in debug mode because parsing AST.h is too slow
--skip-processing=${skip_expensive_processing}
- -I ${LLVM_BINARY_DIR}/lib/clang/${CLANG_VERSION_MAJOR}/include
+ -I ${resource_dir}/include
-I ${CLANG_SOURCE_DIR}/include
-I ${LLVM_BINARY_DIR}/tools/clang/include
-I ${LLVM_BINARY_DIR}/include
Index: clang/lib/Headers/CMakeLists.txt
===================================================================
--- clang/lib/Headers/CMakeLists.txt
+++ clang/lib/Headers/CMakeLists.txt
@@ -283,7 +283,8 @@
openmp_wrappers/new
)
-set(output_dir ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}/include)
+include(GetClangResourceDir)
+get_clang_resource_dir(output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
set(out_files)
set(generated_files)
@@ -437,7 +438,7 @@
add_header_target("windows-resource-headers" ${windows_only_files})
add_header_target("utility-resource-headers" ${utility_files})
-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)
+get_clang_resource_dir(header_install_dir SUBDIR include)
#############################################################
# Install rules for the catch-all clang-resource-headers target
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits