1diff --git a/CMakeLists.txt b/CMakeLists.txt
2index 090cfa352078..624b7c9f3400 100644
3--- a/CMakeLists.txt
4+++ b/CMakeLists.txt
5@@ -38,12 +38,26 @@ if(CLANG_BUILT_STANDALONE)
6 find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}")
7 list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")
8
9- # Turn into CACHE PATHs for overwritting
10- set(LLVM_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed")
11- set(LLVM_BINARY_DIR "${LLVM_BINARY_DIR}" CACHE PATH "Path to LLVM build tree")
12- set(LLVM_MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm" CACHE PATH "Path to LLVM source tree")
13- set(LLVM_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin")
14- set(LLVM_LIBRARY_DIR "${LLVM_LIBRARY_DIR}" CACHE PATH "Path to llvm/lib")
15+ # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets
16+ # LLVM_CONFIG.
17+ if (NOT LLVM_CONFIG_FOUND)
18+ # Pull values from LLVMConfig.cmake. We can drop this once the llvm-config
19+ # path is removed.
20+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
21+ set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}")
22+ # N.B. this is just a default value, the CACHE PATHs below can be overriden.
23+ set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm")
24+ set(TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")
25+ set(LIBRARY_DIR "${LLVM_LIBRARY_DIR}")
26+ else()
27+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}")
28+ endif()
29+
30+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed")
31+ set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree")
32+ set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree")
33+ set(LLVM_TOOLS_BINARY_DIR "${TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin")
34+ set(LLVM_LIBRARY_DIR "${LIBRARY_DIR}" CACHE PATH "Path to llvm/lib")
35
36 find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
37 NO_DEFAULT_PATH)
38diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake
39index 75b0080f6715..c895b884cd27 100644
40--- a/cmake/modules/AddClang.cmake
41+++ b/cmake/modules/AddClang.cmake
42@@ -119,8 +119,8 @@ macro(add_clang_library name)
43 install(TARGETS ${lib}
44 COMPONENT ${lib}
45 ${export_to_clangtargets}
46- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
47- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
48+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
49+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
50 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
51
52 if (NOT LLVM_ENABLE_IDE)
53diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
54index bb9a11eabbef..e2de91c65fbb 100644
55--- a/lib/Headers/CMakeLists.txt
56+++ b/lib/Headers/CMakeLists.txt
57@@ -437,7 +437,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files})
58 add_header_target("windows-resource-headers" ${windows_only_files})
59 add_header_target("utility-resource-headers" ${utility_files})
60
61-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)
62+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)
63
64 #############################################################
65 # Install rules for the catch-all clang-resource-headers target
66diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
67index 4f23065a2472..6a0f55991e24 100644
68--- a/tools/libclang/CMakeLists.txt
69+++ b/tools/libclang/CMakeLists.txt
70@@ -234,7 +234,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
71 COMPONENT
72 libclang-python-bindings
73 DESTINATION
74- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
75+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
76 endforeach()
77 if(NOT LLVM_ENABLE_IDE)
78 add_custom_target(libclang-python-bindings)
79diff --git a/tools/scan-build-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt
80index 3aca22c0b0a8..3115353e3fe3 100644
81--- a/tools/scan-build-py/CMakeLists.txt
82+++ b/tools/scan-build-py/CMakeLists.txt
83@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild})
84 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
85 list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
86 install(FILES lib/libscanbuild/${lib}
87- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libscanbuild
88+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild"
89 COMPONENT scan-build-py)
90 endforeach()
91
92@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources})
93 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
94 list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
95 install(FILES lib/libscanbuild/resources/${resource}
96- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libscanbuild/resources
97+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources"
98 COMPONENT scan-build-py)
99 endforeach()
100
101@@ -122,7 +122,7 @@ foreach(lib ${LibEar})
102 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
103 list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
104 install(FILES lib/libear/${lib}
105- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libear
106+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear"
107 COMPONENT scan-build-py)
108 endforeach()
109