openmp-fix-runtimes-build
authorLLVM Packaging Team <pkg-llvm-team@lists.alioth.debian.org>
Tue, 30 Nov 2021 18:32:51 +0000 (18:32 +0000)
committerSylvestre Ledru <sylvestre@debian.org>
Tue, 30 Nov 2021 18:32:51 +0000 (18:32 +0000)
include required runtimes as dependencies to openmp targets to make sure
they are built first when included as part of a runtimes build since openmp
can depend on them

Gbp-Pq: Name openmp-fix-runtimes-build.diff

llvm/runtimes/CMakeLists.txt
openmp/CMakeLists.txt
openmp/cmake/HandleOpenMPOptions.cmake
openmp/libomptarget/plugins/CMakeLists.txt
openmp/libomptarget/plugins/cuda/CMakeLists.txt
openmp/libomptarget/src/CMakeLists.txt
openmp/runtime/CMakeLists.txt
openmp/runtime/src/CMakeLists.txt
openmp/tools/archer/CMakeLists.txt

index 243d6ceb220268b841bfe2ef0c126cd0e9866c64..51cef7107d01a28ebd6e88d0a9442c35df20cdef 100644 (file)
@@ -236,6 +236,7 @@ function(runtime_default_target)
                                       -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE}
                                       -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED}
                                       -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default}
+                                      -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
                                       -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE}
                                       -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE}
                                       -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE}
@@ -440,7 +441,7 @@ if(runtimes)
     # build directory cannot find the C++ headers in certain configurations.
     # I need to build a mechanism for runtime projects to provide CMake code
     # that executes at LLVM configuration time to handle this case.
-    add_dependencies(clang-bootstrap-deps runtimes-configure)
+    #add_dependencies(clang-bootstrap-deps runtimes-configure)
     # We need to add the runtimes as a dependency because compiler-rt can be
     # built as part of runtimes and we need the profile runtime for PGO
     add_dependencies(clang-bootstrap-deps runtimes)
index b8a2822877e370dd325c63a2a1380152c6e702dd..b081b598ffb1f56d1dd000ddbd1ed54b32e52f63 100644 (file)
@@ -83,6 +83,28 @@ option(OPENMP_ENABLE_LIBOMPTARGET_PROFILING "Enable time profiling for libomptar
        ${ENABLE_LIBOMPTARGET})
 option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF)
 
+option(OPENMP_USE_LLVM_UNWINDER "Build and use the LLVM unwinder" OFF)
+
+option(LIBOMP_ENABLE_RTTI "Enabling RTTI forces libomp to be a c++ lib" ${LLVM_ENABLE_RTTI})
+
+macro(add_runtimes_build_depends_if_needed target)
+  if(RUNTIMES_BUILD)
+    # required for rtti and libomp/libomptarget profiling if enabled
+    add_dependencies(${target} cxx-headers cxxabi_static cxx_static cxxabi_shared cxx_shared)
+    if(OPENMP_USE_LLVM_UNWINDER AND (NOT target STREQUAL "omp" AND NOT LIBOMP_ENABLE_RTTI))
+      add_dependencies(${target} unwind_static unwind_shared)
+      get_target_property(target_link_flags ${target} LINK_FLAGS)
+      set(runtimes_link_flags "-lunwind")
+      if(target_link_flags)
+        set(runtimes_link_flags "${target_link_flags} -lunwind")
+      endif()
+      set_target_properties(${target}
+        PROPERTIES
+        LINK_FLAGS "${runtimes_link_flags}")
+    endif()
+  endif()
+endmacro()
+
 # Build host runtime library, after LIBOMPTARGET variables are set since they are needed
 # to enable time profiling support in the OpenMP runtime.
 add_subdirectory(runtime)
index 15382bcf12de6ccc31e64de1541ef44acdd7fc52..19e53333d629eef300dbaef57d0ca7df5c7b8be1 100644 (file)
@@ -29,7 +29,8 @@ append_if(OPENMP_HAVE_WNO_EXTRA_FLAG "-Wno-extra" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
 append_if(OPENMP_HAVE_WNO_PEDANTIC_FLAG "-Wno-pedantic" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
 append_if(OPENMP_HAVE_WNO_MAYBE_UNINITIALIZED_FLAG "-Wno-maybe-uninitialized" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
 
-append_if(OPENMP_HAVE_STD_GNUPP14_FLAG "-std=gnu++14" CMAKE_CXX_FLAGS)
-if (NOT OPENMP_HAVE_STD_GNUPP14_FLAG)
-  append_if(OPENMP_HAVE_STD_CPP14_FLAG "-std=c++14" CMAKE_CXX_FLAGS)
+# prefer c++14 over gnu++14?
+append_if(OPENMP_HAVE_STD_CPP14_FLAG "-std=c++14" CMAKE_CXX_FLAGS)
+if (NOT OPENMP_HAVE_STD_CPP14_FLAG)
+  append_if(OPENMP_HAVE_STD_GNUPP14_FLAG "-std=gnu++14" CMAKE_CXX_FLAGS)
 endif()
index 210ee2f52e01cf7a28e6b862a10492925cda95cd..043b4553dfcb5289f7e3afe426b0e03d02bafa2e 100644 (file)
@@ -36,6 +36,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$")
       add_library("omptarget.rtl.${tmachine_libname}" SHARED
         ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/src/rtl.cpp)
 
+      add_runtimes_build_depends_if_needed("omptarget.rtl.${tmachine_libname}")
+
       # Install plugin under the lib destination folder.
       install(TARGETS "omptarget.rtl.${tmachine_libname}"
         LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
index cb4d5d391f85a004da0c62e885f41fd2471a6d7f..8031e5fc3432639745822875e53df9c6e6ecd516 100644 (file)
@@ -44,6 +44,8 @@ else()
   set (LIBOMPTARGET_DEP_LIBRARIES ${CMAKE_DL_LIBS})
 endif()
 
+add_runtimes_build_depends_if_needed(omptarget.rtl.cuda)
+
 # Install plugin under the lib destination folder.
 install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
 
index 15e6c3bbaf1f2e9a196c99144b30e7be8010a250..6e812a65b5c9881e003363986a662a90ae907231 100644 (file)
@@ -48,6 +48,8 @@ set_target_properties(omptarget
   PROPERTIES
   LIBRARY_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR})
 
+add_runtimes_build_depends_if_needed(omptarget)
+
 # Install libomptarget under the lib destination folder.
 install(TARGETS omptarget LIBRARY COMPONENT omptarget
   DESTINATION "${OPENMP_INSTALL_LIBDIR}")
index f3a3f517cacc6a3d94a9b88f6566f6c6e468b2e1..b3fd688b65eea4c249cdc3a2f1c8accd6d4a2695 100644 (file)
@@ -287,6 +287,10 @@ if(LIBOMP_STATS)
   set(LIBOMP_USE_STDCPPLIB TRUE)
 endif()
 
+if(LIBOMP_ENABLE_RTTI)
+  set(LIBOMP_USE_STDCPPLIB TRUE)
+endif()
+
 # Shared library can be switched to a static library
 set(LIBOMP_ENABLE_SHARED TRUE CACHE BOOL
   "Shared library instead of static library?")
index 822f9ca2b8251d066a632eb1764bde0e30b75e8c..2d522c29e8175a2f3185e61f2740591b795a6858 100644 (file)
@@ -134,6 +134,7 @@ endif()
 if(NOT ${LIBOMP_USE_STDCPPLIB})
   set(LIBOMP_LINKER_LANGUAGE C)
   set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdlib++")
 else()
   set(LIBOMP_LINKER_LANGUAGE CXX)
 endif()
@@ -162,6 +163,8 @@ set_target_properties(omp PROPERTIES
   LINKER_LANGUAGE ${LIBOMP_LINKER_LANGUAGE}
 )
 
+add_runtimes_build_depends_if_needed(omp)
+
 # 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)
index 85405affe8f1acff87386c2c1cda21e04c8f4871..97715b2e2c2555c52cfac38b0ff4d37193430cab 100644 (file)
@@ -14,6 +14,9 @@ if(LIBOMP_OMPT_SUPPORT)
   add_library(archer SHARED ompt-tsan.cpp)
   add_library(archer_static STATIC ompt-tsan.cpp)
 
+  add_runtimes_build_depends_if_needed(archer)
+  add_runtimes_build_depends_if_needed(archer_static)
+
   install(TARGETS archer archer_static
     LIBRARY DESTINATION ${OPENMP_INSTALL_LIBDIR}
     ARCHIVE DESTINATION ${OPENMP_INSTALL_LIBDIR})