Index: openmp/CMakeLists.txt =================================================================== --- openmp/CMakeLists.txt +++ openmp/CMakeLists.txt @@ -21,6 +21,19 @@ # Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR. set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}") + # Clang-dedicated subdirectory components. If Clang is the C++ compiler, ask + # it for these. + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(clang_version ${CMAKE_CXX_COMPILER_VERSION}) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} --print-target-triple + OUTPUT_VARIABLE clang_target_triple OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + endif() + set(OPENMP_CLANG_VERSION ${clang_version} CACHE STRING + "The Clang version to assume when installing OpenMP headers/libraries in Clang-dedicated directories from a standalone OpenMP build") + set(OPENMP_CLANG_TARGET_TRIPLE ${clang_target_triple} CACHE STRING + "The Clang target triple to assume when installing OpenMP headers/libraries in Clang-dedicated directories from a standalone OpenMP build") + # Group test settings. set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING "C compiler to use for testing OpenMP runtime libraries.") @@ -32,6 +45,11 @@ # If building in tree, we honor the same install suffix LLVM uses. set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}") + # Clang-dedicated subdirectory components. + string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" OPENMP_CLANG_VERSION + ${PACKAGE_VERSION}) + set(OPENMP_CLANG_TARGET_TRIPLE ${LLVM_DEFAULT_TARGET_TRIPLE}) + if (NOT MSVC) set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) @@ -41,6 +59,13 @@ endif() endif() +# Clang-dedicated subdirectories. +if (OPENMP_CLANG_VERSION AND OPENMP_CLANG_TARGET_TRIPLE) + set(OPENMP_CLANG_LIB_SUBDIR + clang/${OPENMP_CLANG_VERSION}/${OPENMP_CLANG_TARGET_TRIPLE}/lib) + set(OPENMP_CLANG_INCLUDE_SUBDIR clang/${OPENMP_CLANG_VERSION}/include) +endif() + # Check and set up common compiler flags. include(config-ix) include(HandleOpenMPOptions) Index: openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt =================================================================== --- openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt +++ openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt @@ -86,9 +86,21 @@ cuda_add_library(omptarget-nvptx STATIC ${cuda_src_files} ${omp_data_objects} OPTIONS ${CUDA_ARCH} ${CUDA_DEBUG}) + if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET "omptarget-nvptx" POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy $ + $/${OPENMP_CLANG_LIB_SUBDIR} + ) + endif() # Install device RTL under the lib destination folder. install(TARGETS omptarget-nvptx ARCHIVE DESTINATION "${OPENMP_INSTALL_LIBDIR}") + if(OPENMP_CLANG_LIB_SUBDIR) + install(TARGETS omptarget-nvptx ARCHIVE DESTINATION + "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") + endif() target_link_libraries(omptarget-nvptx ${CUDA_LIBRARIES}) @@ -173,9 +185,22 @@ add_custom_command(TARGET omptarget-nvptx-${sm}-bc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libomptarget-nvptx-sm_${sm}.bc $) + if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET omptarget-nvptx-${sm}-bc POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/libomptarget-nvptx-sm_${sm}.bc + $/${OPENMP_CLANG_LIB_SUBDIR} + ) + endif() # Install bitcode library under the lib destination folder. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libomptarget-nvptx-sm_${sm}.bc DESTINATION "${OPENMP_INSTALL_LIBDIR}") + if(OPENMP_CLANG_LIB_SUBDIR) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libomptarget-nvptx-sm_${sm}.bc + DESTINATION "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") + endif() endforeach() endif() Index: openmp/libomptarget/plugins/CMakeLists.txt =================================================================== --- openmp/libomptarget/plugins/CMakeLists.txt +++ openmp/libomptarget/plugins/CMakeLists.txt @@ -33,10 +33,25 @@ add_library("omptarget.rtl.${tmachine_libname}" SHARED ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/src/rtl.cpp) + if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET "omptarget.rtl.${tmachine_libname}" + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy + $ + $/${OPENMP_CLANG_LIB_SUBDIR} + ) + endif() # Install plugin under the lib destination folder. install(TARGETS "omptarget.rtl.${tmachine_libname}" LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") + if(OPENMP_CLANG_LIB_SUBDIR) + install(TARGETS "omptarget.rtl.${tmachine_libname}" + LIBRARY DESTINATION + "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") + endif() target_link_libraries( "omptarget.rtl.${tmachine_libname}" Index: openmp/libomptarget/plugins/cuda/CMakeLists.txt =================================================================== --- openmp/libomptarget/plugins/cuda/CMakeLists.txt +++ openmp/libomptarget/plugins/cuda/CMakeLists.txt @@ -36,9 +36,22 @@ include_directories(${LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS}) add_library(omptarget.rtl.cuda SHARED src/rtl.cpp) +if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET "omptarget.rtl.cuda" + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy $ + $/${OPENMP_CLANG_LIB_SUBDIR} + ) +endif() # Install plugin under the lib destination folder. install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") +if(OPENMP_CLANG_LIB_SUBDIR) + install(TARGETS "omptarget.rtl.cuda" LIBRARY DESTINATION + "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") +endif() target_link_libraries(omptarget.rtl.cuda ${LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES} Index: openmp/libomptarget/src/CMakeLists.txt =================================================================== --- openmp/libomptarget/src/CMakeLists.txt +++ openmp/libomptarget/src/CMakeLists.txt @@ -25,7 +25,19 @@ target_link_libraries(omptarget ${CMAKE_DL_LIBS} "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") +if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET omptarget POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy $ + $/${OPENMP_CLANG_LIB_SUBDIR} + ) +endif() # Install libomptarget under the lib destination folder. install(TARGETS omptarget LIBRARY COMPONENT omptarget DESTINATION "${OPENMP_INSTALL_LIBDIR}") +if(OPENMP_CLANG_LIB_SUBDIR) + install(TARGETS omptarget LIBRARY COMPONENT omptarget DESTINATION + "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") +endif() Index: openmp/runtime/src/CMakeLists.txt =================================================================== --- openmp/runtime/src/CMakeLists.txt +++ openmp/runtime/src/CMakeLists.txt @@ -147,6 +147,15 @@ LINKER_LANGUAGE ${LIBOMP_LINKER_LANGUAGE} ) +if(OPENMP_CLANG_LIB_SUBDIR AND NOT OPENMP_STANDALONE_BUILD) + add_custom_command(TARGET omp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + $/${OPENMP_CLANG_LIB_SUBDIR} + COMMAND ${CMAKE_COMMAND} -E copy $ + $/${OPENMP_CLANG_LIB_SUBDIR} + ) +endif() + # Get the library's location within the build tree for the unit tester if(NOT WIN32) get_target_property(LIBOMP_LIBRARY_DIR omp LIBRARY_OUTPUT_DIRECTORY) @@ -281,11 +290,10 @@ # Install rules # We want to install libomp in DESTDIR/CMAKE_INSTALL_PREFIX/lib # We want to install headers in DESTDIR/CMAKE_INSTALL_PREFIX/include -if(${OPENMP_STANDALONE_BUILD}) +if(NOT OPENMP_CLANG_INCLUDE_SUBDIR) set(LIBOMP_HEADERS_INSTALL_PATH include) else() - string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION ${PACKAGE_VERSION}) - set(LIBOMP_HEADERS_INSTALL_PATH "${OPENMP_INSTALL_LIBDIR}/clang/${CLANG_VERSION}/include") + set(LIBOMP_HEADERS_INSTALL_PATH "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_INCLUDE_SUBDIR}") endif() if(WIN32) install(TARGETS omp RUNTIME DESTINATION bin) @@ -301,6 +309,9 @@ else() install(TARGETS omp ${LIBOMP_INSTALL_KIND} DESTINATION "${OPENMP_INSTALL_LIBDIR}") + if(OPENMP_CLANG_LIB_SUBDIR) + install(TARGETS omp ${LIBOMP_INSTALL_KIND} DESTINATION "${OPENMP_INSTALL_LIBDIR}/${OPENMP_CLANG_LIB_SUBDIR}") + endif() if(${LIBOMP_INSTALL_ALIASES}) # Create aliases (symlinks) of the library for backwards compatibility