diff --git a/bolt/CMakeLists.txt b/bolt/CMakeLists.txt --- a/bolt/CMakeLists.txt +++ b/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) diff --git a/bolt/tools/driver/CMakeLists.txt b/bolt/tools/driver/CMakeLists.txt --- a/bolt/tools/driver/CMakeLists.txt +++ b/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 ) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt --- a/clang/CMakeLists.txt +++ b/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 " diff --git a/clang/cmake/modules/CMakeLists.txt b/clang/cmake/modules/CMakeLists.txt --- a/clang/cmake/modules/CMakeLists.txt +++ b/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 diff --git a/clang/tools/scan-build-py/CMakeLists.txt b/clang/tools/scan-build-py/CMakeLists.txt --- a/clang/tools/scan-build-py/CMakeLists.txt +++ b/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) diff --git a/clang/tools/scan-build/CMakeLists.txt b/clang/tools/scan-build/CMakeLists.txt --- a/clang/tools/scan-build/CMakeLists.txt +++ b/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) diff --git a/clang/tools/scan-view/CMakeLists.txt b/clang/tools/scan-view/CMakeLists.txt --- a/clang/tools/scan-view/CMakeLists.txt +++ b/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) diff --git a/cmake/Modules/GNUBinaryDirs.cmake b/cmake/Modules/GNUBinaryDirs.cmake new file mode 100644 --- /dev/null +++ b/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() diff --git a/cmake/Modules/LLVMLibdirSuffix.cmake b/cmake/Modules/LLVMLibdirSuffix.cmake new file mode 100644 --- /dev/null +++ b/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() diff --git a/cmake/Modules/LLVMSetIntDirs.cmake b/cmake/Modules/LLVMSetIntDirs.cmake new file mode 100644 --- /dev/null +++ b/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() diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt --- a/compiler-rt/CMakeLists.txt +++ b/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() diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake --- a/compiler-rt/cmake/base-config-ix.cmake +++ b/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 diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt --- a/flang/CMakeLists.txt +++ b/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) diff --git a/flang/cmake/modules/CMakeLists.txt b/flang/cmake/modules/CMakeLists.txt --- a/flang/cmake/modules/CMakeLists.txt +++ b/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 diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt --- a/flang/tools/f18/CMakeLists.txt +++ b/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) diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt --- a/libc/CMakeLists.txt +++ b/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) diff --git a/libc/test/utils/tools/WrapperGen/CMakeLists.txt b/libc/test/utils/tools/WrapperGen/CMakeLists.txt --- a/libc/test/utils/tools/WrapperGen/CMakeLists.txt +++ b/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 ) diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt --- a/libcxx/CMakeLists.txt +++ b/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}") diff --git a/libcxx/docs/BuildingLibcxx.rst b/libcxx/docs/BuildingLibcxx.rst --- a/libcxx/docs/BuildingLibcxx.rst +++ b/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``. diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt --- a/libcxxabi/CMakeLists.txt +++ b/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}) diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt --- a/libunwind/CMakeLists.txt +++ b/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}) diff --git a/libunwind/docs/BuildingLibunwind.rst b/libunwind/docs/BuildingLibunwind.rst --- a/libunwind/docs/BuildingLibunwind.rst +++ b/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``. diff --git a/lld/CMakeLists.txt b/lld/CMakeLists.txt --- a/lld/CMakeLists.txt +++ b/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) diff --git a/lld/cmake/modules/CMakeLists.txt b/lld/cmake/modules/CMakeLists.txt --- a/lld/cmake/modules/CMakeLists.txt +++ b/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 diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt --- a/lldb/CMakeLists.txt +++ b/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) diff --git a/lldb/bindings/python/CMakeLists.txt b/lldb/bindings/python/CMakeLists.txt --- a/lldb/bindings/python/CMakeLists.txt +++ b/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} diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake --- a/lldb/cmake/modules/LLDBConfig.cmake +++ b/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() diff --git a/lldb/cmake/modules/LLDBStandalone.cmake b/lldb/cmake/modules/LLDBStandalone.cmake --- a/lldb/cmake/modules/LLDBStandalone.cmake +++ b/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}) diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt --- a/llvm/CMakeLists.txt +++ b/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 diff --git a/llvm/tools/llvm-go/CMakeLists.txt b/llvm/tools/llvm-go/CMakeLists.txt --- a/llvm/tools/llvm-go/CMakeLists.txt +++ b/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 diff --git a/llvm/unittests/Target/AArch64/CMakeLists.txt b/llvm/unittests/Target/AArch64/CMakeLists.txt --- a/llvm/unittests/Target/AArch64/CMakeLists.txt +++ b/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 diff --git a/llvm/unittests/Target/PowerPC/CMakeLists.txt b/llvm/unittests/Target/PowerPC/CMakeLists.txt --- a/llvm/unittests/Target/PowerPC/CMakeLists.txt +++ b/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 diff --git a/llvm/unittests/Target/WebAssembly/CMakeLists.txt b/llvm/unittests/Target/WebAssembly/CMakeLists.txt --- a/llvm/unittests/Target/WebAssembly/CMakeLists.txt +++ b/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 diff --git a/llvm/unittests/Target/X86/CMakeLists.txt b/llvm/unittests/Target/X86/CMakeLists.txt --- a/llvm/unittests/Target/X86/CMakeLists.txt +++ b/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 diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt --- a/mlir/CMakeLists.txt +++ b/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) diff --git a/mlir/cmake/modules/CMakeLists.txt b/mlir/cmake/modules/CMakeLists.txt --- a/mlir/cmake/modules/CMakeLists.txt +++ b/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 diff --git a/mlir/examples/standalone/CMakeLists.txt b/mlir/examples/standalone/CMakeLists.txt --- a/mlir/examples/standalone/CMakeLists.txt +++ b/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}") diff --git a/mlir/test/CMakeLists.txt b/mlir/test/CMakeLists.txt --- a/mlir/test/CMakeLists.txt +++ b/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. diff --git a/mlir/utils/mbr/CMakeLists.txt b/mlir/utils/mbr/CMakeLists.txt --- a/mlir/utils/mbr/CMakeLists.txt +++ b/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) diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt --- a/openmp/CMakeLists.txt +++ b/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) diff --git a/openmp/libomptarget/plugins/remote/CMakeLists.txt b/openmp/libomptarget/plugins/remote/CMakeLists.txt --- a/openmp/libomptarget/plugins/remote/CMakeLists.txt +++ b/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( diff --git a/polly/CMakeLists.txt b/polly/CMakeLists.txt --- a/polly/CMakeLists.txt +++ b/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")