Ericson2314 created this revision.
Ericson2314 added reviewers: sebastian-ne, beanz, phosek, ldionne.
Herald added subscribers: libc-commits, libcxx-commits, Enna1, bzcheeseman,
pmatos, asb, ayermolo, sdasgup3, wenzhicui, wrengr, cota, teijeong, rdzhabarov,
tatianashp, msifontes, jurahul, Kayjukh, grosul1, Joonsoo, liufengdb, aartbik,
mgester, arpith-jacob, antiagainst, shauheen, rriddle, mehdi_amini, pengfei,
jgravelle-google, whisperity, sbc100, mgorny, nemanjai, dschuff.
Herald added a reviewer: bollu.
Herald added a reviewer: sscalpone.
Herald added a reviewer: awarzynski.
Herald added a reviewer: rafauler.
Herald added a reviewer: Amir.
Herald added a reviewer: maksfb.
Herald added a reviewer: NoQ.
Herald added projects: libunwind, libc-project, Flang, All.
Herald added a reviewer: libunwind.
Ericson2314 requested review of this revision.
Herald added subscribers: llvm-commits, openmp-commits, lldb-commits,
Sanitizers, cfe-commits, yota9, sstefan1, stephenneuendorffer,
nicolasvasilache, jdoerfert, aheejin.
Herald added a reviewer: jdoerfert.
Herald added projects: clang, Sanitizers, LLDB, libc++, OpenMP, libc++abi,
MLIR, LLVM.
Herald added a reviewer: libc++.
Herald added a reviewer: libc++abi.
There are a few goals here:
- Match what D132316 <https://reviews.llvm.org/D132316> for `LLVM_BINARY_DIR`,
for `CMAKE_BINARY_DIR`.
- Decrease the usages of `LLVM_LIBDIR_SUFFIX`, preparing us for D130586
<https://reviews.llvm.org/D130586>.
- Deduplicate code repeated across projects
Do this in this way:
- Shuffle around `CMAKE_MODULE_PATH` appending to allow `include`-ing our own
modules earlier.
- Create new private/internal CMake modules and use them:
- `GNUBinaryDirs`
Like upstream CMake `GNUInstallDirs`, but sets variations of
`CMAKE_BINARY_DIR`. These are not CACHE PATHS because they are not intended to
be user-modifyable.
`CMAKE_BINARY_LIBDIR` is based on the base name of `CMAKE_INSTALL_LIBDIR`
rather than `LLVM_LIBDIR_SUFFIX`. This cannot just end with "lib", because the
"install" and "binary" base names need to line up for various relative paths to
work. It doesn't just use `LLVM_LIBDIR_SUFFIX` because we are trying to phase
that out.
- `LLVMLibdirSuffix`
A compat shim that defaults `CMAKE_INSTALL_LIBDIR` based on
`LLVM_LIBDIR_SUFFIX`.
- `LLVMSetIntDirs`
Just here to deduplicate the defining of `LLVM_LIBRARY_OUTPUT_INTDIR` and
friends between projects.
- Do these replacements to make use of deps
- `${CMAKE_BINARY_DIR}/lib(${CMAKE_LIBDIR_SUFFIX})?\>` ->
`${CMAKE_BINARY_LIBDIR}`
- `${CMAKE_BINARY_DIR}/bin\>` -> `${CMAKE_BINARY_BINDIR}`
- `${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}` ->
`${LLVM_LIBRARY_OUTPUT_INTDIR}`
- `${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin` ->
`${LLVM_RUNTIME_OUTPUT_INTDIR}`
It is somewhat odd to me that those last two vars start with `LLVM_` not
`CMAKE_` when they are based on `CMAKE_BINARY_DIR`, but that can be tackled
some other time.
- Cleanup custom install path initialization code in the runtimes
Most significantly, they no longer have their
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D132608
Files:
bolt/CMakeLists.txt
bolt/tools/driver/CMakeLists.txt
clang/CMakeLists.txt
clang/cmake/modules/CMakeLists.txt
clang/tools/scan-build-py/CMakeLists.txt
clang/tools/scan-build/CMakeLists.txt
clang/tools/scan-view/CMakeLists.txt
cmake/Modules/GNUBinaryDirs.cmake
cmake/Modules/LLVMLibdirSuffix.cmake
cmake/Modules/LLVMSetIntDirs.cmake
compiler-rt/CMakeLists.txt
compiler-rt/cmake/base-config-ix.cmake
flang/CMakeLists.txt
flang/cmake/modules/CMakeLists.txt
flang/tools/f18/CMakeLists.txt
libc/CMakeLists.txt
libc/test/utils/tools/WrapperGen/CMakeLists.txt
libcxx/CMakeLists.txt
libcxx/docs/BuildingLibcxx.rst
libcxxabi/CMakeLists.txt
libunwind/CMakeLists.txt
libunwind/docs/BuildingLibunwind.rst
lld/CMakeLists.txt
lld/cmake/modules/CMakeLists.txt
lldb/CMakeLists.txt
lldb/bindings/python/CMakeLists.txt
lldb/cmake/modules/LLDBConfig.cmake
lldb/cmake/modules/LLDBStandalone.cmake
llvm/CMakeLists.txt
llvm/tools/llvm-go/CMakeLists.txt
llvm/unittests/Target/AArch64/CMakeLists.txt
llvm/unittests/Target/PowerPC/CMakeLists.txt
llvm/unittests/Target/WebAssembly/CMakeLists.txt
llvm/unittests/Target/X86/CMakeLists.txt
mlir/CMakeLists.txt
mlir/cmake/modules/CMakeLists.txt
mlir/examples/standalone/CMakeLists.txt
mlir/test/CMakeLists.txt
mlir/utils/mbr/CMakeLists.txt
openmp/CMakeLists.txt
openmp/libomptarget/plugins/remote/CMakeLists.txt
polly/CMakeLists.txt
Index: polly/CMakeLists.txt
===================================================================
--- polly/CMakeLists.txt
+++ polly/CMakeLists.txt
@@ -1,12 +1,28 @@
# Check if this is a in tree build.
+
+set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
if (NOT DEFINED LLVM_MAIN_SRC_DIR)
project(Polly)
cmake_minimum_required(VERSION 3.13.4)
set(POLLY_STANDALONE_BUILD TRUE)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${POLLY_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if(POLLY_STANDALONE_BUILD)
# Where is LLVM installed?
@@ -48,18 +64,10 @@
set(POLLY_GTEST_AVAIL 1)
endif ()
-set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
-
-if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
- set(LLVM_COMMON_CMAKE_UTILS ${POLLY_SOURCE_DIR}/../cmake)
-endif()
-
# Make sure that our source directory is on the current cmake module path so that
# we can include cmake files from this directory.
list(INSERT CMAKE_MODULE_PATH 0
"${POLLY_SOURCE_DIR}/cmake"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include("polly_macros")
Index: openmp/libomptarget/plugins/remote/CMakeLists.txt
===================================================================
--- openmp/libomptarget/plugins/remote/CMakeLists.txt
+++ openmp/libomptarget/plugins/remote/CMakeLists.txt
@@ -26,7 +26,7 @@
if (Protobuf_FOUND AND gRPC_FOUND AND PROTOC AND GRPC_CPP_PLUGIN)
libomptarget_say("Building remote offloading plugin.")
- set(directory "${CMAKE_BINARY_DIR}/include/openmp/libomptarget/plugins/remote/")
+ set(directory "${CMAKE_BINARY_INCLUDEDIR}/openmp/libomptarget/plugins/remote/")
file(MAKE_DIRECTORY ${directory})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})
execute_process(
Index: openmp/CMakeLists.txt
===================================================================
--- openmp/CMakeLists.txt
+++ openmp/CMakeLists.txt
@@ -1,12 +1,5 @@
cmake_minimum_required(VERSION 3.13.4)
-set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
-
-# Add path for custom modules
-list(INSERT CMAKE_MODULE_PATH 0
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
- )
# llvm/runtimes/ will set OPENMP_STANDALONE_BUILD.
if (OPENMP_STANDALONE_BUILD OR "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
@@ -14,6 +7,18 @@
project(openmp C CXX)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
+endif()
+
+# Add path for custom modules
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
@@ -51,6 +56,11 @@
endif()
endif()
+# Add path for custom modules
+list(INSERT CMAKE_MODULE_PATH 0
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+ )
+
# Check and set up common compiler flags.
include(config-ix)
include(HandleOpenMPOptions)
Index: mlir/utils/mbr/CMakeLists.txt
===================================================================
--- mlir/utils/mbr/CMakeLists.txt
+++ mlir/utils/mbr/CMakeLists.txt
@@ -1 +1 @@
-configure_file(mlir-mbr.in ${CMAKE_BINARY_DIR}/bin/mlir-mbr @ONLY)
+configure_file(mlir-mbr.in ${CMAKE_BINARY_BINDIR}/mlir-mbr @ONLY)
Index: mlir/test/CMakeLists.txt
===================================================================
--- mlir/test/CMakeLists.txt
+++ mlir/test/CMakeLists.txt
@@ -8,7 +8,7 @@
# Passed to lit.site.cfg.py.so that the out of tree Standalone dialect test
# can find MLIR's CMake configuration
set(MLIR_CMAKE_DIR
- "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/mlir")
+ "${CMAKE_BINARY_LIBDIR}/cmake/mlir")
# Passed to lit.site.cfg.py.in to set up the path where to find the libraries
# for linalg integration tests.
Index: mlir/examples/standalone/CMakeLists.txt
===================================================================
--- mlir/examples/standalone/CMakeLists.txt
+++ mlir/examples/standalone/CMakeLists.txt
@@ -10,8 +10,8 @@
message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
-set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
-set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
+set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_BINDIR})
+set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_LIBDIR})
set(MLIR_BINARY_DIR ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
Index: mlir/cmake/modules/CMakeLists.txt
===================================================================
--- mlir/cmake/modules/CMakeLists.txt
+++ mlir/cmake/modules/CMakeLists.txt
@@ -9,7 +9,7 @@
set(MLIR_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/mlir" CACHE STRING
"Path for CMake subdirectory for Polly (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/polly')")
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-set(mlir_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/mlir")
+set(mlir_cmake_builddir "${CMAKE_BINARY_LIBDIR}/cmake/mlir")
# Keep this in sync with llvm/cmake/CMakeLists.txt!
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
Index: mlir/CMakeLists.txt
===================================================================
--- mlir/CMakeLists.txt
+++ mlir/CMakeLists.txt
@@ -1,13 +1,28 @@
# MLIR project.
+set(MLIR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(MLIR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
# Check if MLIR is built as a standalone project.
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
project(mlir)
set(MLIR_STANDALONE_BUILD TRUE)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if(MLIR_STANDALONE_BUILD)
cmake_minimum_required(VERSION 3.13.4)
@@ -36,12 +51,10 @@
"Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')")
mark_as_advanced(MLIR_TOOLS_INSTALL_DIR)
-set(MLIR_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
+set(MLIR_MAIN_SRC_DIR ${MLIR_SOURCE_DIR} )
set(MLIR_MAIN_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include )
-set(MLIR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(MLIR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
-set(MLIR_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include)
+set(MLIR_INCLUDE_DIR ${MLIR_BINARY_DIR}/include)
set(MLIR_TOOLS_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
@@ -52,7 +65,6 @@
# that we can include cmake files from this directory.
list(INSERT CMAKE_MODULE_PATH 0
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include(AddMLIR)
Index: llvm/unittests/Target/X86/CMakeLists.txt
===================================================================
--- llvm/unittests/Target/X86/CMakeLists.txt
+++ llvm/unittests/Target/X86/CMakeLists.txt
@@ -1,6 +1,6 @@
include_directories(
${CMAKE_SOURCE_DIR}/lib/Target/X86
- ${CMAKE_BINARY_DIR}/lib/Target/X86
+ ${CMAKE_BINARY_LIBDIR}/Target/X86
)
set(LLVM_LINK_COMPONENTS
Index: llvm/unittests/Target/WebAssembly/CMakeLists.txt
===================================================================
--- llvm/unittests/Target/WebAssembly/CMakeLists.txt
+++ llvm/unittests/Target/WebAssembly/CMakeLists.txt
@@ -1,6 +1,6 @@
include_directories(
${CMAKE_SOURCE_DIR}/lib/Target/WebAssembly
- ${CMAKE_BINARY_DIR}/lib/Target/WebAssembly
+ ${CMAKE_BINARY_LIBDIR}/Target/WebAssembly
)
set(LLVM_LINK_COMPONENTS
Index: llvm/unittests/Target/PowerPC/CMakeLists.txt
===================================================================
--- llvm/unittests/Target/PowerPC/CMakeLists.txt
+++ llvm/unittests/Target/PowerPC/CMakeLists.txt
@@ -1,6 +1,6 @@
include_directories(
${CMAKE_SOURCE_DIR}/lib/Target/PowerPC
- ${CMAKE_BINARY_DIR}/lib/Target/PowerPC
+ ${CMAKE_BINARY_LIBDIR}/Target/PowerPC
)
set(LLVM_LINK_COMPONENTS
Index: llvm/unittests/Target/AArch64/CMakeLists.txt
===================================================================
--- llvm/unittests/Target/AArch64/CMakeLists.txt
+++ llvm/unittests/Target/AArch64/CMakeLists.txt
@@ -1,6 +1,6 @@
include_directories(
${CMAKE_SOURCE_DIR}/lib/Target/AArch64
- ${CMAKE_BINARY_DIR}/lib/Target/AArch64
+ ${CMAKE_BINARY_LIBDIR}/Target/AArch64
)
set(LLVM_LINK_COMPONENTS
Index: llvm/tools/llvm-go/CMakeLists.txt
===================================================================
--- llvm/tools/llvm-go/CMakeLists.txt
+++ llvm/tools/llvm-go/CMakeLists.txt
@@ -1,5 +1,5 @@
if(LLVM_BINDINGS MATCHES "go")
- set(binpath ${CMAKE_BINARY_DIR}/bin/llvm-go${CMAKE_EXECUTABLE_SUFFIX})
+ set(binpath ${CMAKE_BINARY_BINDIR}/llvm-go${CMAKE_EXECUTABLE_SUFFIX})
add_custom_command(OUTPUT ${binpath}
COMMAND ${GO_EXECUTABLE} build -o ${binpath} llvm-go.go
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/llvm-go.go
Index: llvm/CMakeLists.txt
===================================================================
--- llvm/CMakeLists.txt
+++ llvm/CMakeLists.txt
@@ -51,20 +51,26 @@
set(CMAKE_OSX_ARCHITECTURES "x86_64")
endif()
+set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
+
+# Add path for common private CMake modules
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
project(LLVM
VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}
LANGUAGES C CXX ASM)
-if (NOT DEFINED CMAKE_INSTALL_LIBDIR AND DEFINED LLVM_LIBDIR_SUFFIX)
- # Must go before `include(GNUInstallDirs)`.
- set(CMAKE_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
-endif()
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
-# Must go after `DEFINED LLVM_LIBDIR_SUFFIX` check.
+# Must go after `include(LLVMLibdirSuffix)`.
set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
# Must go after `project(..)`.
include(GNUInstallDirs)
+include(GNUBinaryDirs)
# This C++ standard is required to build LLVM.
set(LLVM_REQUIRED_CXX_STANDARD 17)
@@ -276,7 +282,6 @@
list(INSERT CMAKE_MODULE_PATH 0
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
# Generate a CompilationDatabase (compile_commands.json file) for our build,
@@ -378,14 +383,7 @@
mark_as_advanced(LLVM_EXAMPLES_INSTALL_DIR)
# They are used as destination of target generators.
-set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
-set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
-if(WIN32 OR CYGWIN)
- # DLL platform -- put DLLs into bin.
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
-else()
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
-endif()
+include(LLVMSetIntDirs)
# Each of them corresponds to llvm-config's.
set(LLVM_TOOLS_BINARY_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) # --bindir
Index: lldb/cmake/modules/LLDBStandalone.cmake
===================================================================
--- lldb/cmake/modules/LLDBStandalone.cmake
+++ lldb/cmake/modules/LLDBStandalone.cmake
@@ -4,12 +4,6 @@
cmake_policy(SET CMP0116 OLD)
endif()
-if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
- set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
-endif()
-
-list(APPEND CMAKE_MODULE_PATH "${LLVM_COMMON_CMAKE_UTILS}/Modules")
-
option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)
find_package(LLVM REQUIRED CONFIG HINTS ${LLVM_DIR} NO_CMAKE_FIND_ROOT_PATH)
@@ -74,15 +68,7 @@
endif()
endif()
-# They are used as destination of target generators.
-set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
-set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
-if(WIN32 OR CYGWIN)
- # DLL platform -- put DLLs into bin.
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
-else()
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
-endif()
+include(LLVMSetIntDirs)
# We append the directory in which LLVMConfig.cmake lives. We expect LLVM's
# CMake modules to be in that directory as well.
@@ -119,7 +105,7 @@
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(
- "${CMAKE_BINARY_DIR}/include"
+ "${CMAKE_BINARY_INCLUDEDIR}"
"${LLVM_INCLUDE_DIRS}"
"${CLANG_INCLUDE_DIRS}")
@@ -127,6 +113,6 @@
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
endif()
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_BINDIR})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_LIBDIR})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_LIBDIR})
Index: lldb/cmake/modules/LLDBConfig.cmake
===================================================================
--- lldb/cmake/modules/LLDBConfig.cmake
+++ lldb/cmake/modules/LLDBConfig.cmake
@@ -98,7 +98,7 @@
BASE_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR})
# Essentially, emit the framework's dSYM outside of the framework directory.
- set(LLDB_DEBUGINFO_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin CACHE STRING
+ set(LLDB_DEBUGINFO_INSTALL_PREFIX "${LLVM_RUNTIME_OUTPUT_INTDIR}" CACHE STRING
"Directory to emit dSYM files stripped from executables and libraries (Darwin Only)")
endif()
Index: lldb/bindings/python/CMakeLists.txt
===================================================================
--- lldb/bindings/python/CMakeLists.txt
+++ lldb/bindings/python/CMakeLists.txt
@@ -184,7 +184,7 @@
# lldb.exe or any other executables that were linked with liblldb.
if (WIN32 AND NOT "${PYTHON_DLL}" STREQUAL "")
# When using the Visual Studio CMake generator the lldb binaries end up in Release/bin, Debug/bin etc.
- file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin" LLDB_BIN_DIR)
+ file(TO_NATIVE_PATH "${LLVM_RUNTIME_OUTPUT_INTDIR}" LLDB_BIN_DIR)
file(TO_NATIVE_PATH "${PYTHON_DLL}" PYTHON_DLL_NATIVE_PATH)
add_custom_command(
TARGET ${swig_target}
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -1,12 +1,5 @@
cmake_minimum_required(VERSION 3.13.4)
-# Add path for custom modules.
-set(CMAKE_MODULE_PATH
- ${CMAKE_MODULE_PATH}
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
- )
-
# If we are not building as part of LLVM, build LLDB as a standalone project,
# using LLVM as an external library.
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
@@ -14,8 +7,26 @@
set(LLDB_BUILT_STANDALONE TRUE)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
+
+# Add path for custom modules.
+list(INSERT CMAKE_MODULE_PATH 0
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
+ )
if(LLDB_BUILT_STANDALONE)
include(LLDBStandalone)
Index: lld/cmake/modules/CMakeLists.txt
===================================================================
--- lld/cmake/modules/CMakeLists.txt
+++ lld/cmake/modules/CMakeLists.txt
@@ -8,7 +8,7 @@
set(LLD_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/lld" CACHE STRING
"Path for CMake subdirectory for LLD (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/lld')")
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-set(lld_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/lld")
+set(lld_cmake_builddir "${CMAKE_BINARY_LIBDIR}/cmake/lld")
# Keep this in sync with llvm/cmake/CMakeLists.txt!
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
Index: lld/CMakeLists.txt
===================================================================
--- lld/CMakeLists.txt
+++ lld/CMakeLists.txt
@@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 3.13.4)
+set(LLD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(LLD_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
# If we are not building as a part of LLVM, build LLD as an
# standalone project, using LLVM as an external library:
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
@@ -7,8 +10,20 @@
set(LLD_BUILT_STANDALONE TRUE)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${LLD_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if(LLD_BUILT_STANDALONE)
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
@@ -29,8 +44,7 @@
NO_DEFAULT_PATH)
# They are used as destination of target generators.
- set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
- set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
+ include(LLVMSetIntDirs)
include(AddLLVM)
include(TableGen)
@@ -105,9 +119,7 @@
"Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')")
mark_as_advanced(LLD_TOOLS_INSTALL_DIR)
-set(LLD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(LLD_INCLUDE_DIR ${LLD_SOURCE_DIR}/include )
-set(LLD_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(LLD_VENDOR ${PACKAGE_VENDOR} CACHE STRING
"Vendor-specific text for showing with version information.")
@@ -140,14 +152,9 @@
"`CMakeFiles'. Please delete them.")
endif()
-if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
- set(LLVM_COMMON_CMAKE_UTILS ${LLD_SOURCE_DIR}/../cmake)
-endif()
-
# Add path for custom modules.
list(INSERT CMAKE_MODULE_PATH 0
"${LLD_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include(AddLLD)
Index: libunwind/docs/BuildingLibunwind.rst
===================================================================
--- libunwind/docs/BuildingLibunwind.rst
+++ libunwind/docs/BuildingLibunwind.rst
@@ -144,7 +144,7 @@
.. option:: LIBUNWIND_INSTALL_LIBRARY_DIR:PATH
- **Default**: ``lib${LIBUNWIND_LIBDIR_SUFFIX}``
+ **Default**: ``lib${LLVM_LIBDIR_SUFFIX}``
Path where built libunwind libraries should be installed. If a relative path,
relative to ``CMAKE_INSTALL_PREFIX``.
Index: libunwind/CMakeLists.txt
===================================================================
--- libunwind/CMakeLists.txt
+++ libunwind/CMakeLists.txt
@@ -19,7 +19,11 @@
set(LIBUNWIND_LIBCXX_PATH "${CMAKE_CURRENT_LIST_DIR}/../libcxx" CACHE PATH
"Specify path to libc++ source.")
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
include(GNUInstallDirs)
+include(GNUBinaryDirs)
#===============================================================================
# Setup CMake Options
@@ -51,8 +55,6 @@
option(LIBUNWIND_REMEMBER_HEAP_ALLOC "Use heap instead of the stack for .cfi_remember_state." OFF)
option(LIBUNWIND_INSTALL_HEADERS "Install the libunwind headers." OFF)
-set(LIBUNWIND_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING
- "Define suffix of library directory name (32/64)")
option(LIBUNWIND_INSTALL_LIBRARY "Install the libunwind library." ON)
cmake_dependent_option(LIBUNWIND_INSTALL_STATIC_LIBRARY
"Install the static libunwind library." ON
@@ -116,21 +118,28 @@
"Path where built libunwind runtime libraries should be installed.")
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
- set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
- "Path where built libunwind libraries should be installed.")
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}")
+else()
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}")
+endif()
+set(LIBUNWIND_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
+ "Path where built libunwind libraries should be installed.")
+unset(default_install_path)
+
+get_filename_component(LIBUNWIND_LIBDIR_BASENAME "${LIBUNWIND_INSTALL_LIBRARY_DIR}" NAME)
+
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(LIBUNWIND_LIBRARY_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}")
if(LIBCXX_LIBDIR_SUBDIR)
- string(APPEND LIBUNWIND_LIBRARY_DIR /${LIBUNWIND_LIBDIR_SUBDIR})
- string(APPEND LIBUNWIND_INSTALL_LIBRARY_DIR /${LIBUNWIND_LIBDIR_SUBDIR})
+ string(APPEND LIBUNWIND_LIBRARY_DIR "/${LIBUNWIND_LIBDIR_SUBDIR}")
+ string(APPEND LIBUNWIND_INSTALL_LIBRARY_DIR "/${LIBUNWIND_LIBDIR_SUBDIR}")
endif()
else()
if(LLVM_LIBRARY_OUTPUT_INTDIR)
- set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+ set(LIBUNWIND_LIBRARY_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
else()
- set(LIBUNWIND_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBUNWIND_LIBDIR_SUFFIX})
+ set(LIBUNWIND_LIBRARY_DIR "${CMAKE_BINARY_DIR}/${LIBUNWIND_LIBDIR_BASENAME}")
endif()
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LIBUNWIND_LIBDIR_SUFFIX} CACHE PATH
- "Path where built libunwind libraries should be installed.")
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBUNWIND_LIBRARY_DIR})
Index: libcxxabi/CMakeLists.txt
===================================================================
--- libcxxabi/CMakeLists.txt
+++ libcxxabi/CMakeLists.txt
@@ -23,7 +23,11 @@
set(LIBCXXABI_LIBCXX_PATH "${CMAKE_CURRENT_LIST_DIR}/../libcxx" CACHE PATH
"Specify path to libc++ source.")
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
include(GNUInstallDirs)
+include(GNUBinaryDirs)
# Require out of source build.
include(MacroEnsureOutOfSourceBuild)
@@ -74,8 +78,6 @@
endif()
option(LIBCXXABI_INCLUDE_TESTS "Generate build targets for the libc++abi unit tests." ${LLVM_INCLUDE_TESTS})
-set(LIBCXXABI_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING
- "Define suffix of library directory name (32/64)")
option(LIBCXXABI_INSTALL_HEADERS "Install the libc++abi headers." ON)
option(LIBCXXABI_INSTALL_LIBRARY "Install the libc++abi library." ON)
@@ -84,7 +86,7 @@
if(LLVM_LIBRARY_OUTPUT_INTDIR)
set(LIBCXXABI_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
else()
- set(LIBCXXABI_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
+ set(LIBCXXABI_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_INCLUDEDIR}/c++/v1")
endif()
# TODO: Remove this after branching for LLVM 15
@@ -184,25 +186,32 @@
set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
"Path where built libc++abi runtime libraries should be installed.")
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}")
+else()
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}")
+endif()
+set(LIBCXXABI_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
+ "Path where built libc++abi libraries should be installed.")
+unset(default_install_path)
+
+get_filename_component(LIBCXXABI_LIBDIR_BASENAME "${LIBCXXABI_INSTALL_LIBRARY_DIR}" NAME)
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
- "Path where built libc++abi libraries should be installed.")
if(LIBCXX_LIBDIR_SUBDIR)
- string(APPEND LIBCXXABI_LIBRARY_DIR /${LIBCXXABI_LIBDIR_SUBDIR})
- string(APPEND LIBCXXABI_INSTALL_LIBRARY_DIR /${LIBCXXABI_LIBDIR_SUBDIR})
+ string(APPEND LIBCXXABI_LIBRARY_DIR "/${LIBCXXABI_LIBDIR_SUBDIR}")
+ string(APPEND LIBCXXABI_INSTALL_LIBRARY_DIR "/${LIBCXXABI_LIBDIR_SUBDIR}")
endif()
else()
if(LLVM_LIBRARY_OUTPUT_INTDIR)
- set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
- set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+ set(LIBCXXABI_HEADER_DIR "${LLVM_BINARY_DIR}")
+ set(LIBCXXABI_LIBRARY_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
else()
set(LIBCXXABI_HEADER_DIR ${CMAKE_BINARY_DIR})
- set(LIBCXXABI_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
+ set(LIBCXXABI_LIBRARY_DIR "${CMAKE_BINARY_DIR}/${LIBCXXABI_LIBDIR_BASENAME}")
endif()
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LIBCXXABI_LIBDIR_SUFFIX} CACHE PATH
- "Path where built libc++abi libraries should be installed.")
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBCXXABI_LIBRARY_DIR})
Index: libcxx/docs/BuildingLibcxx.rst
===================================================================
--- libcxx/docs/BuildingLibcxx.rst
+++ libcxx/docs/BuildingLibcxx.rst
@@ -235,11 +235,6 @@
Build libc++ as a static library. Either `LIBCXX_ENABLE_SHARED` or
`LIBCXX_ENABLE_STATIC` has to be enabled.
-.. option:: LIBCXX_LIBDIR_SUFFIX:STRING
-
- Extra suffix to append to the directory where libraries are to be installed.
- This option overrides `LLVM_LIBDIR_SUFFIX`.
-
.. option:: LIBCXX_HERMETIC_STATIC_LIBRARY:BOOL
**Default**: ``OFF``
@@ -267,7 +262,7 @@
.. option:: LIBCXX_INSTALL_LIBRARY_DIR:PATH
- **Default**: ``lib${LIBCXX_LIBDIR_SUFFIX}``
+ **Default**: ``lib${LLVM_LIBDIR_SUFFIX}``
Path where built libc++ libraries should be installed. If a relative path,
relative to ``CMAKE_INSTALL_PREFIX``.
Index: libcxx/CMakeLists.txt
===================================================================
--- libcxx/CMakeLists.txt
+++ libcxx/CMakeLists.txt
@@ -22,7 +22,11 @@
set(LIBCXX_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(LIBCXX_BINARY_INCLUDE_DIR "${LIBCXX_BINARY_DIR}/include/c++build")
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
include(GNUInstallDirs)
+include(GNUBinaryDirs)
# Require out of source build.
include(MacroEnsureOutOfSourceBuild)
@@ -151,8 +155,6 @@
endif()
option(LIBCXX_INCLUDE_DOCS "Build the libc++ documentation." ${LLVM_INCLUDE_DOCS})
-set(LIBCXX_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING
- "Define suffix of library directory name (32/64)")
option(LIBCXX_INSTALL_HEADERS "Install the libc++ headers." ON)
option(LIBCXX_INSTALL_LIBRARY "Install the libc++ library." ON)
cmake_dependent_option(LIBCXX_INSTALL_STATIC_LIBRARY
@@ -415,31 +417,43 @@
set(LIBCXX_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
"Path where built libc++ runtime libraries should be installed.")
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(default_install_path "${CMAKE_INSTALL_INCLUDEDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+else()
+ set(default_install_path "${LIBCXX_INSTALL_INCLUDE_DIR}")
+endif()
+set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${default_install_path}" CACHE PATH
+ "Path where target-specific libc++ headers should be installed.")
+unset(default_install_path)
+
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}")
+else()
+ set(default_install_path "lib${LLVM_LIBDIR_SUFFIX}")
+endif()
+set(LIBCXX_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
+ "Path where built libc++ libraries should be installed.")
+unset(default_install_path)
+
+get_filename_component(LIBCXX_LIBDIR_BASENAME "${LIBCXX_INSTALL_LIBRARY_DIR}" NAME)
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
- "Path where built libc++ libraries should be installed.")
- set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1" CACHE PATH
- "Path where target-specific libc++ headers should be installed.")
if(LIBCXX_LIBDIR_SUBDIR)
- string(APPEND LIBCXX_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
- string(APPEND LIBCXX_INSTALL_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
+ string(APPEND LIBCXX_LIBRARY_DIR "/${LIBCXX_LIBDIR_SUBDIR}")
+ string(APPEND LIBCXX_INSTALL_LIBRARY_DIR "/${LIBCXX_LIBDIR_SUBDIR}")
endif()
else()
if(LLVM_LIBRARY_OUTPUT_INTDIR)
- set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+ set(LIBCXX_LIBRARY_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
else()
- set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
- set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
+ set(LIBCXX_LIBRARY_DIR "${CMAKE_BINARY_DIR}/${LIBCXX_LIBDIR_BASENAME}")
+ set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_INCLUDEDIR}/c++/v1")
endif()
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_GENERATED_INCLUDE_DIR}")
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX} CACHE PATH
- "Path where built libc++ libraries should be installed.")
- set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${LIBCXX_INSTALL_INCLUDE_DIR}" CACHE PATH
- "Path where target-specific libc++ headers should be installed.")
endif()
file(MAKE_DIRECTORY "${LIBCXX_BINARY_INCLUDE_DIR}")
Index: libc/test/utils/tools/WrapperGen/CMakeLists.txt
===================================================================
--- libc/test/utils/tools/WrapperGen/CMakeLists.txt
+++ libc/test/utils/tools/WrapperGen/CMakeLists.txt
@@ -4,7 +4,7 @@
wrappergen_test.cpp
ARGS
--path=${LIBC_SOURCE_DIR}
- --tool=${CMAKE_BINARY_DIR}/bin/libc-wrappergen
+ --tool=${CMAKE_BINARY_BINDIR}/libc-wrappergen
--api=${LIBC_SOURCE_DIR}/test/utils/tools/WrapperGen/testapi.td
)
Index: libc/CMakeLists.txt
===================================================================
--- libc/CMakeLists.txt
+++ libc/CMakeLists.txt
@@ -3,6 +3,12 @@
# Default to C++17
set(CMAKE_CXX_STANDARD 17)
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
+include(GNUInstallDirs)
+include(GNUBinaryDirs)
+
# Use old version of target_sources command which converts the source
# file paths to full paths.
cmake_policy(SET CMP0076 OLD)
Index: flang/tools/f18/CMakeLists.txt
===================================================================
--- flang/tools/f18/CMakeLists.txt
+++ flang/tools/f18/CMakeLists.txt
@@ -57,12 +57,12 @@
if (NOT WIN32)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/flang-to-external-fc.in
- ${CMAKE_BINARY_DIR}/bin/flang-to-external-fc
+ ${CMAKE_BINARY_BINDIR}/flang-to-external-fc
@ONLY
)
- add_custom_target(flang-to-external-fc ALL DEPENDS ${CMAKE_BINARY_DIR}/bin/flang-to-external-fc)
- install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/flang-to-external-fc DESTINATION "${CMAKE_INSTALL_BINDIR}")
+ add_custom_target(flang-to-external-fc ALL DEPENDS ${CMAKE_BINARY_BINDIR}/flang-to-external-fc)
+ install(PROGRAMS ${CMAKE_BINARY_BINDIR}/flang-to-external-fc DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
# TODO Move this to a more suitable location
-file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
+file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_INCLUDEDIR}/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
Index: flang/cmake/modules/CMakeLists.txt
===================================================================
--- flang/cmake/modules/CMakeLists.txt
+++ flang/cmake/modules/CMakeLists.txt
@@ -8,7 +8,7 @@
set(FLANG_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/flang" CACHE STRING
"Path for CMake subdirectory for Flang (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/flang')")
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-set(flang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/flang")
+set(flang_cmake_builddir "${CMAKE_BINARY_LIBDIR}/cmake/flang")
# Keep this in sync with llvm/cmake/CMakeLists.txt!
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
Index: flang/CMakeLists.txt
===================================================================
--- flang/CMakeLists.txt
+++ flang/CMakeLists.txt
@@ -8,6 +8,7 @@
set(CMAKE_CXX_EXTENSIONS OFF)
set(FLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(FLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE)
message(FATAL_ERROR "In-source builds are not allowed. \
@@ -29,11 +30,22 @@
set(FLANG_STANDALONE_BUILD OFF)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${FLANG_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if (FLANG_STANDALONE_BUILD)
- set(FLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
if (NOT MSVC_IDE)
set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
CACHE BOOL "Enable assertions")
@@ -127,11 +139,11 @@
link_directories("${LLVM_LIBRARY_DIR}")
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_BINDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
- ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
+ ${CMAKE_BINARY_LIBDIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
- ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
+ ${CMAKE_BINARY_LIBDIR})
set(BACKEND_PACKAGE_STRING "LLVM ${LLVM_PACKAGE_VERSION}")
set(LLVM_EXTERNAL_LIT "${LLVM_TOOLS_BINARY_DIR}/llvm-lit" CACHE STRING "Command used to spawn lit")
@@ -189,12 +201,6 @@
${LLVM_INCLUDE_TESTS})
set(FLANG_GTEST_AVAIL 1)
- if(FLANG_STANDALONE_BUILD)
- set(FLANG_BINARY_DIR ${CMAKE_BINARY_DIR}/tools/flang)
- else()
- set(FLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
- endif()
-
set(BACKEND_PACKAGE_STRING "${PACKAGE_STRING}")
set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir/include ) # --src-root
set(MLIR_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/../mlir/include ) # --includedir
@@ -207,7 +213,7 @@
"Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')")
mark_as_advanced(FLANG_TOOLS_INSTALL_DIR)
-set(FLANG_INTRINSIC_MODULES_DIR ${CMAKE_BINARY_DIR}/include/flang)
+set(FLANG_INTRINSIC_MODULES_DIR ${CMAKE_BINARY_INCLUDEDIR}/flang)
set(FLANG_INCLUDE_DIR ${FLANG_BINARY_DIR}/include)
# TODO: Remove when libclangDriver is lifted out of Clang
@@ -225,8 +231,7 @@
# tco tool and FIR lib output directories
if(FLANG_STANDALONE_BUILD)
- set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
- set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
+ include(LLVMSetIntDirs)
endif()
# Always build tco tool
set(LLVM_BUILD_TOOLS ON)
@@ -235,14 +240,9 @@
${FLANG_BINARY_DIR}/include
${FLANG_SOURCE_DIR}/include)
-if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
- set(LLVM_COMMON_CMAKE_UTILS ${FLANG_SOURCE_DIR}/../cmake)
-endif()
-
# Add Flang-centric modules to cmake path.
list(INSERT CMAKE_MODULE_PATH 0
"${FLANG_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include(AddFlang)
Index: compiler-rt/cmake/base-config-ix.cmake
===================================================================
--- compiler-rt/cmake/base-config-ix.cmake
+++ compiler-rt/cmake/base-config-ix.cmake
@@ -97,28 +97,34 @@
string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
endif()
endif()
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
set(COMPILER_RT_OUTPUT_LIBRARY_DIR
${COMPILER_RT_OUTPUT_DIR}/lib)
extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
- set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
- "Path where built compiler-rt libraries should be installed.")
else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
set(COMPILER_RT_OUTPUT_LIBRARY_DIR
${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "lib/${COMPILER_RT_OS_DIR}")
- set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
- "Path where built compiler-rt libraries should be installed.")
endif()
+set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
+ "Path where built compiler-rt libraries should be installed.")
+unset(default_install_path)
+
extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "${CMAKE_INSTALL_BINDIR}")
set(COMPILER_RT_INSTALL_BINARY_DIR "${default_install_path}" CACHE PATH
"Path where built compiler-rt executables should be installed.")
+unset(default_install_path)
+
extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "${CMAKE_INSTALL_INCLUDEDIR}")
set(COMPILER_RT_INSTALL_INCLUDE_DIR "${default_install_path}" CACHE PATH
"Path where compiler-rt headers should be installed.")
+unset(default_install_path)
+
extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "${CMAKE_INSTALL_DATADIR}")
set(COMPILER_RT_INSTALL_DATA_DIR "${default_install_path}" CACHE PATH
"Path where compiler-rt data files should be installed.")
+unset(default_install_path)
if(APPLE)
# On Darwin if /usr/include/c++ doesn't exist, the user probably has Xcode but
Index: compiler-rt/CMakeLists.txt
===================================================================
--- compiler-rt/CMakeLists.txt
+++ compiler-rt/CMakeLists.txt
@@ -22,6 +22,12 @@
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
+include(GNUInstallDirs)
+include(GnuBinaryDirs)
+
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CFG_RESOLVED_INTDIR "${CMAKE_CFG_INTDIR}/")
else()
Index: cmake/Modules/LLVMSetIntDirs.cmake
===================================================================
--- /dev/null
+++ cmake/Modules/LLVMSetIntDirs.cmake
@@ -0,0 +1,9 @@
+# They are used as destination of target generators.
+set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
+set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_LIBDIR_BASENAME})
+if(WIN32 OR CYGWIN)
+ # DLL platform -- put DLLs into bin.
+ set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
+else()
+ set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+endif()
Index: cmake/Modules/LLVMLibdirSuffix.cmake
===================================================================
--- /dev/null
+++ cmake/Modules/LLVMLibdirSuffix.cmake
@@ -0,0 +1,5 @@
+# Must go before the first `include(GNUInstallDirs)`.
+
+if (NOT DEFINED CMAKE_INSTALL_LIBDIR AND DEFINED LLVM_LIBDIR_SUFFIX)
+ set(CMAKE_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
+endif()
Index: cmake/Modules/GNUBinaryDirs.cmake
===================================================================
--- /dev/null
+++ cmake/Modules/GNUBinaryDirs.cmake
@@ -0,0 +1,15 @@
+if (NOT DEFINED CMAKE_LIBDIR_BASENAME)
+ get_filename_component(CMAKE_LIBDIR_BASENAME "${CMAKE_INSTALL_LIBDIR}" NAME)
+endif()
+
+if (NOT DEFINED CMAKE_BINARY_BINDIR)
+ set(CMAKE_BINARY_BINDIR "${CMAKE_BINARY_BINDIR}/bin")
+endif()
+
+if (NOT DEFINED CMAKE_BINARY_INCLUDEDIR)
+ set(CMAKE_BINARY_INCLUDEDIR "${CMAKE_BINARY_DIR}/inc")
+endif()
+
+if (NOT DEFINED CMAKE_BINARY_LIBDIR)
+ set(CMAKE_BINARY_LIBDIR "${CMAKE_BINARY_DIR}/${CMAKE_LIBDIR_BASENAME}")
+endif()
Index: clang/tools/scan-view/CMakeLists.txt
===================================================================
--- clang/tools/scan-view/CMakeLists.txt
+++ clang/tools/scan-view/CMakeLists.txt
@@ -11,14 +11,14 @@
if(CLANG_INSTALL_SCANVIEW)
foreach(BinFile ${BinFiles})
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${BinFile}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_BINDIR}/${BinFile}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/bin
+ ${CMAKE_BINARY_BINDIR}
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}
- ${CMAKE_BINARY_DIR}/bin/
+ ${CMAKE_BINARY_BINDIR}/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
- list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
+ list(APPEND Depends ${CMAKE_BINARY_BINDIR}/${BinFile})
install(PROGRAMS bin/${BinFile}
DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT scan-view)
Index: clang/tools/scan-build/CMakeLists.txt
===================================================================
--- clang/tools/scan-build/CMakeLists.txt
+++ clang/tools/scan-build/CMakeLists.txt
@@ -1,6 +1,7 @@
option(CLANG_INSTALL_SCANBUILD "Install the scan-build tool" ON)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if (WIN32 AND NOT CYGWIN)
set(BinFiles
@@ -38,14 +39,14 @@
if(CLANG_INSTALL_SCANBUILD)
foreach(BinFile ${BinFiles})
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${BinFile}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_BINDIR}/${BinFile}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/bin
+ ${CMAKE_BINARY_BINDIR}
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}
- ${CMAKE_BINARY_DIR}/bin/
+ ${CMAKE_BINARY_BINDIR}/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
- list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
+ list(APPEND Depends ${CMAKE_BINARY_BINDIR}/${BinFile})
install(PROGRAMS bin/${BinFile}
DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT scan-build)
Index: clang/tools/scan-build-py/CMakeLists.txt
===================================================================
--- clang/tools/scan-build-py/CMakeLists.txt
+++ clang/tools/scan-build-py/CMakeLists.txt
@@ -35,30 +35,30 @@
if ("${BinFile}" STREQUAL "scan-build")
# Need to rename scan-build to scan-build-py to prevent overwriting
# scan-build Perl implementation.
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/scan-build-py
+ add_custom_command(OUTPUT ${CMAKE_BINARY_BINDIR}/scan-build-py
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/bin
+ ${CMAKE_BINARY_BINDIR}
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/scan-build
- ${CMAKE_BINARY_DIR}/bin/scan-build-py
+ ${CMAKE_BINARY_BINDIR}/scan-build-py
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/scan-build)
install (PROGRAMS "bin/scan-build"
DESTINATION "${CMAKE_INSTALL_BINDIR}"
RENAME scan-build-py
COMPONENT scan-build-py)
- list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/scan-build-py)
+ list(APPEND Depends ${CMAKE_BINARY_BINDIR}/scan-build-py)
else()
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${BinFile}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_BINDIR}/${BinFile}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/bin
+ ${CMAKE_BINARY_BINDIR}
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}
- ${CMAKE_BINARY_DIR}/bin/
+ ${CMAKE_BINARY_BINDIR}/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
install(PROGRAMS bin/${BinFile}
DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT scan-build-py)
- list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
+ list(APPEND Depends ${CMAKE_BINARY_BINDIR}/${BinFile})
endif()
endforeach()
@@ -77,50 +77,50 @@
endforeach()
foreach(lib ${LibScanbuild})
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_LIBDIR}/libscanbuild/${lib}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib
+ ${CMAKE_BINARY_LIBDIR}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib/libscanbuild
+ ${CMAKE_BINARY_LIBDIR}/libscanbuild
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib}
- ${CMAKE_BINARY_DIR}/lib/libscanbuild/
+ ${CMAKE_BINARY_LIBDIR}/libscanbuild/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
- list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
+ list(APPEND Depends ${CMAKE_BINARY_LIBDIR}/libscanbuild/${lib})
install(PROGRAMS lib/libscanbuild/${lib}
DESTINATION lib/libscanbuild
COMPONENT scan-build-py)
endforeach()
foreach(resource ${LibScanbuildResources})
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_LIBDIR}/libscanbuild/resources/${resource}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib
+ ${CMAKE_BINARY_LIBDIR}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib/libscanbuild
+ ${CMAKE_BINARY_LIBDIR}/libscanbuild
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources
+ ${CMAKE_BINARY_LIBDIR}/libscanbuild/resources
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource}
- ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources
+ ${CMAKE_BINARY_LIBDIR}/libscanbuild/resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
- list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
+ list(APPEND Depends ${CMAKE_BINARY_LIBDIR}/libscanbuild/resources/${resource})
install(PROGRAMS lib/libscanbuild/resources/${resource}
DESTINATION lib/libscanbuild/resources
COMPONENT scan-build-py)
endforeach()
foreach(lib ${LibEar})
- add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libear/${lib}
+ add_custom_command(OUTPUT ${CMAKE_BINARY_LIBDIR}/libear/${lib}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib
+ ${CMAKE_BINARY_LIBDIR}
COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_BINARY_DIR}/lib/libear
+ ${CMAKE_BINARY_LIBDIR}/libear
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib}
- ${CMAKE_BINARY_DIR}/lib/libear/
+ ${CMAKE_BINARY_LIBDIR}/libear/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
- list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
+ list(APPEND Depends ${CMAKE_BINARY_LIBDIR}/libear/${lib})
install(PROGRAMS lib/libear/${lib}
DESTINATION lib/libear
COMPONENT scan-build-py)
Index: clang/cmake/modules/CMakeLists.txt
===================================================================
--- clang/cmake/modules/CMakeLists.txt
+++ clang/cmake/modules/CMakeLists.txt
@@ -9,7 +9,7 @@
set(CLANG_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/clang" CACHE STRING
"Path for CMake subdirectory for Clang (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/clang')")
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
+set(clang_cmake_builddir "${CMAKE_BINARY_LIBDIR}/cmake/clang")
# Keep this in sync with llvm/cmake/CMakeLists.txt!
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
Index: clang/CMakeLists.txt
===================================================================
--- clang/CMakeLists.txt
+++ clang/CMakeLists.txt
@@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 3.13.4)
+set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
# If we are not building as a part of LLVM, build Clang as an
# standalone project, using LLVM as an external library:
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
@@ -7,8 +10,20 @@
set(CLANG_BUILT_STANDALONE TRUE)
endif()
+if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+ set(LLVM_COMMON_CMAKE_UTILS ${CLANG_SOURCE_DIR}/../cmake)
+endif()
+
+list(INSERT CMAKE_MODULE_PATH 0
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
# Must go below project(..)
include(GNUInstallDirs)
+include(GNUBinaryDirs)
if(CLANG_BUILT_STANDALONE)
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
@@ -35,15 +50,7 @@
find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
NO_DEFAULT_PATH)
- # They are used as destination of target generators.
- set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
- set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
- if(WIN32 OR CYGWIN)
- # DLL platform -- put DLLs into bin.
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
- else()
- set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
- endif()
+ include(LLVMSetIntDirs)
option(LLVM_INSTALL_TOOLCHAIN_ONLY
"Only include toolchain files in the 'install' target." OFF)
@@ -71,9 +78,9 @@
include_directories(${LLVM_INCLUDE_DIRS})
link_directories("${LLVM_LIBRARY_DIR}")
- set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
- set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
- set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
+ set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_BINDIR} )
+ set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_LIBDIR} )
+ set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_LIBDIR} )
if(LLVM_INCLUDE_TESTS)
find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED
@@ -140,15 +147,10 @@
set(BACKEND_PACKAGE_STRING "${PACKAGE_STRING}")
endif() # standalone
-if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
- set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
-endif()
-
# Make sure that our source directory is on the current cmake module path so that
# we can include cmake files from this directory.
list(INSERT CMAKE_MODULE_PATH 0
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ "${CLANG_CURRENT_SOURCE_DIR}/cmake/modules"
)
if(LLVM_ENABLE_LIBXML2)
@@ -310,9 +312,6 @@
"Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')")
mark_as_advanced(CLANG_TOOLS_INSTALL_DIR)
-set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
-
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
message(FATAL_ERROR "In-source builds are not allowed. "
"Please create a directory and run cmake "
Index: bolt/tools/driver/CMakeLists.txt
===================================================================
--- bolt/tools/driver/CMakeLists.txt
+++ bolt/tools/driver/CMakeLists.txt
@@ -36,9 +36,9 @@
add_custom_target(bolt DEPENDS ${BOLT_DEPENDS})
install(PROGRAMS
- ${CMAKE_BINARY_DIR}/bin/llvm-bolt
- ${CMAKE_BINARY_DIR}/bin/perf2bolt
- ${CMAKE_BINARY_DIR}/bin/llvm-boltdiff
+ ${CMAKE_BINARY_BINDIR}/llvm-bolt
+ ${CMAKE_BINARY_BINDIR}/perf2bolt
+ ${CMAKE_BINARY_BINDIR}/llvm-boltdiff
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT bolt
)
Index: bolt/CMakeLists.txt
===================================================================
--- bolt/CMakeLists.txt
+++ bolt/CMakeLists.txt
@@ -4,6 +4,12 @@
set(BOLT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_CXX_STANDARD 17)
+# Must go before the first `include(GNUInstallDirs)`.
+include(LLVMLibdirSuffix)
+
+include(GNUInstallDirs)
+include(GNUBinaryDirs)
+
set(BOLT_ENABLE_RUNTIME OFF)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(BOLT_ENABLE_RUNTIME ON)
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits