Skip to content

Commit 39aa0f5

Browse files
paperchalicetstellar
authored andcommitted
[CMake] Ensure CLANG_RESOURCE_DIR is respected.
1 parent aa7eace commit 39aa0f5

File tree

8 files changed

+34
-23
lines changed

8 files changed

+34
-23
lines changed

clang/lib/Headers/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,8 @@ set(openmp_wrapper_files
298298
openmp_wrappers/new
299299
)
300300

301-
set(output_dir ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}/include)
301+
include(GetClangResourceDir)
302+
get_clang_resource_dir(output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
302303
set(out_files)
303304
set(generated_files)
304305

@@ -456,7 +457,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files})
456457
add_header_target("windows-resource-headers" ${windows_only_files})
457458
add_header_target("utility-resource-headers" ${utility_files})
458459

459-
set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)
460+
get_clang_resource_dir(header_install_dir SUBDIR include)
460461

461462
#############################################################
462463
# Install rules for the catch-all clang-resource-headers target

clang/lib/Tooling/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ else()
5353
list(APPEND implicitDirs -I ${implicitDir})
5454
endforeach()
5555

56+
include(GetClangResourceDir)
57+
get_clang_resource_dir(resource_dir PREFIX ${LLVM_BINARY_DIR})
5658
add_custom_command(
5759
COMMENT Generate ASTNodeAPI.json
5860
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json
@@ -61,7 +63,7 @@ else()
6163
$<TARGET_FILE:clang-ast-dump>
6264
# Skip this in debug mode because parsing AST.h is too slow
6365
--skip-processing=${skip_expensive_processing}
64-
-I ${LLVM_BINARY_DIR}/lib/clang/${CLANG_VERSION_MAJOR}/include
66+
-I ${resource_dir}/include
6567
-I ${CLANG_SOURCE_DIR}/include
6668
-I ${LLVM_BINARY_DIR}/tools/clang/include
6769
-I ${LLVM_BINARY_DIR}/include

clang/runtime/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/)
6666
list(APPEND compiler_rt_configure_deps LLVMTestingSupport)
6767
endif()
6868

69+
include(GetClangResourceDir)
70+
get_clang_resource_dir(output_resource_dir PREFIX ${LLVM_BINARY_DIR})
71+
get_clang_resource_dir(install_resource_dir)
6972
ExternalProject_Add(compiler-rt
7073
DEPENDS llvm-config clang ${compiler_rt_configure_deps}
7174
PREFIX ${COMPILER_RT_PREFIX}
@@ -82,9 +85,9 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/)
8285
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
8386
-DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config
8487
-DLLVM_LIT_ARGS=${LLVM_LIT_ARGS}
85-
-DCOMPILER_RT_OUTPUT_DIR=${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}
88+
-DCOMPILER_RT_OUTPUT_DIR=${output_resource_dir}
8689
-DCOMPILER_RT_EXEC_OUTPUT_DIR=${LLVM_RUNTIME_OUTPUT_INTDIR}
87-
-DCOMPILER_RT_INSTALL_PATH:PATH=lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}
90+
-DCOMPILER_RT_INSTALL_PATH:PATH=${install_resource_dir}
8891
-DCOMPILER_RT_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
8992
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
9093
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX}

compiler-rt/cmake/base-config-ix.cmake

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ include(BuiltinTests)
77
include(CheckIncludeFile)
88
include(CheckCXXSourceCompiles)
99
include(GNUInstallDirs)
10+
include(GetClangResourceDir)
1011
include(ExtendPath)
1112
include(CompilerRTDarwinUtils)
1213

@@ -38,15 +39,10 @@ if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSIO
3839
endif()
3940

4041
if (LLVM_TREE_AVAILABLE)
41-
# Compute the Clang version from the LLVM version.
42-
# FIXME: We should be able to reuse CLANG_VERSION_MAJOR variable calculated
43-
# in Clang cmake files, instead of copying the rules here.
44-
string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR
45-
${PACKAGE_VERSION})
4642
# Setup the paths where compiler-rt runtimes and headers should be stored.
47-
set(COMPILER_RT_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR})
43+
get_clang_resource_dir(COMPILER_RT_OUTPUT_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/..)
4844
set(COMPILER_RT_EXEC_OUTPUT_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
49-
set(COMPILER_RT_INSTALL_PATH lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR})
45+
get_clang_resource_dir(COMPILER_RT_INSTALL_PATH)
5046
option(COMPILER_RT_INCLUDE_TESTS "Generate and build compiler-rt unit tests."
5147
${LLVM_INCLUDE_TESTS})
5248
option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered"

lldb/source/Plugins/ExpressionParser/Clang/ClangHost.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "clang/Basic/Version.h"
1212
#include "clang/Config/config.h"
13+
#include "clang/Driver/Driver.h"
1314

1415
#include "llvm/ADT/StringRef.h"
1516
#include "llvm/ADT/Twine.h"
@@ -51,11 +52,14 @@ static bool DefaultComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,
5152
Log *log = GetLog(LLDBLog::Host);
5253
std::string raw_path = lldb_shlib_spec.GetPath();
5354
llvm::StringRef parent_dir = llvm::sys::path::parent_path(raw_path);
55+
const std::string clang_resource_path =
56+
clang::driver::Driver::GetResourcesPath("bin/lldb", CLANG_RESOURCE_DIR);
5457

5558
static const llvm::StringRef kResourceDirSuffixes[] = {
5659
// LLVM.org's build of LLDB uses the clang resource directory placed
57-
// in $install_dir/lib{,64}/clang/$clang_version.
58-
CLANG_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING,
60+
// in $install_dir/lib{,64}/clang/$clang_version or
61+
// $install_dir/bin/$CLANG_RESOURCE_DIR
62+
clang_resource_path,
5963
// swift-lldb uses the clang resource directory copied from swift, which
6064
// by default is placed in $install_dir/lib{,64}/lldb/clang. LLDB places
6165
// it there, so we use LLDB_INSTALL_LIBDIR_BASENAME.
@@ -82,7 +86,8 @@ static bool DefaultComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,
8286
}
8387

8488
bool lldb_private::ComputeClangResourceDirectory(FileSpec &lldb_shlib_spec,
85-
FileSpec &file_spec, bool verify) {
89+
FileSpec &file_spec,
90+
bool verify) {
8691
#if !defined(__APPLE__)
8792
return DefaultComputeClangResourceDirectory(lldb_shlib_spec, file_spec,
8893
verify);

lldb/unittests/Expression/ClangParserTest.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "clang/Basic/Version.h"
10+
#include "clang/Config/config.h"
11+
#include "clang/Driver/Driver.h"
1012

1113
#include "Plugins/ExpressionParser/Clang/ClangHost.h"
1214
#include "TestingSupport/SubsystemRAII.h"
@@ -37,13 +39,11 @@ static std::string ComputeClangResourceDir(std::string lldb_shlib_path,
3739
TEST_F(ClangHostTest, ComputeClangResourceDirectory) {
3840
#if !defined(_WIN32)
3941
std::string path_to_liblldb = "/foo/bar/lib/";
40-
std::string path_to_clang_dir =
41-
"/foo/bar/" LLDB_INSTALL_LIBDIR_BASENAME "/clang/" CLANG_VERSION_MAJOR_STRING;
4242
#else
43-
std::string path_to_liblldb = "C:\\foo\\bar\\lib";
44-
std::string path_to_clang_dir =
45-
"C:\\foo\\bar\\lib\\clang\\" CLANG_VERSION_MAJOR_STRING;
43+
std::string path_to_liblldb = "C:\\foo\\bar\\lib\\";
4644
#endif
45+
std::string path_to_clang_dir = clang::driver::Driver::GetResourcesPath(
46+
path_to_liblldb + "liblldb", CLANG_RESOURCE_DIR);
4747
EXPECT_EQ(ComputeClangResourceDir(path_to_liblldb), path_to_clang_dir);
4848

4949
// The path doesn't really exist, so setting verify to true should make

llvm/cmake/modules/LLVMExternalProjectUtils.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,11 @@ function(llvm_ExternalProject_Add name source_dir)
280280
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
281281
string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR
282282
${PACKAGE_VERSION})
283-
set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")
283+
if(DEFINED CLANG_RESOURCE_DIR AND NOT CLANG_RESOURCE_DIR STREQUAL "")
284+
set(resource_dir ${LLVM_TOOLS_BINARY_DIR}/${CLANG_RESOURCE_DIR})
285+
else()
286+
set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION_MAJOR}")
287+
endif()
284288
set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER)
285289
foreach(type ${flag_types})
286290
set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir})

openmp/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF)
9090
if(${OPENMP_STANDALONE_BUILD})
9191
set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}")
9292
else()
93-
string(REGEX MATCH "[0-9]+" CLANG_VERSION ${PACKAGE_VERSION})
94-
set(LIBOMP_HEADERS_INSTALL_PATH "${OPENMP_INSTALL_LIBDIR}/clang/${CLANG_VERSION}/include")
93+
include(GetClangResourceDir)
94+
get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include)
9595
endif()
9696

9797
# Build host runtime library, after LIBOMPTARGET variables are set since they are needed

0 commit comments

Comments
 (0)