Index: llvm-toolchain-12_12.0.1/llvm/runtimes/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/llvm/runtimes/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/llvm/runtimes/CMakeLists.txt @@ -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: llvm-toolchain-12_12.0.1/openmp/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/CMakeLists.txt @@ -83,6 +83,28 @@ option(OPENMP_ENABLE_LIBOMPTARGET_PROFIL ${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: llvm-toolchain-12_12.0.1/openmp/cmake/HandleOpenMPOptions.cmake =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/cmake/HandleOpenMPOptions.cmake +++ llvm-toolchain-12_12.0.1/openmp/cmake/HandleOpenMPOptions.cmake @@ -29,7 +29,8 @@ append_if(OPENMP_HAVE_WNO_EXTRA_FLAG "-W 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: llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/plugins/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/CMakeLists.txt @@ -36,6 +36,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tma 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}") @@ -79,4 +81,3 @@ add_subdirectory(remote) # Make sure the parent scope can see the plugins that will be created. set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE) set(LIBOMPTARGET_TESTED_PLUGINS "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE) - Index: llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/cuda/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/plugins/cuda/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/cuda/CMakeLists.txt @@ -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: llvm-toolchain-12_12.0.1/openmp/libomptarget/src/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/src/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/libomptarget/src/CMakeLists.txt @@ -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: llvm-toolchain-12_12.0.1/openmp/runtime/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/runtime/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/runtime/CMakeLists.txt @@ -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?") @@ -358,8 +362,7 @@ else() set(LIBOMP_INSTALL_KIND ARCHIVE) endif() -set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBOMP_VERSION_MAJOR}) - +set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${LIBOMP_LIBRARY_SUFFIX}) # Optional backwards compatibility aliases. set(LIBOMP_INSTALL_ALIASES TRUE CACHE BOOL Index: llvm-toolchain-12_12.0.1/openmp/runtime/src/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/runtime/src/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/runtime/src/CMakeLists.txt @@ -162,6 +162,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: llvm-toolchain-12_12.0.1/openmp/tools/archer/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/openmp/tools/archer/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/openmp/tools/archer/CMakeLists.txt @@ -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}) Index: llvm-toolchain-12_12.0.1/runtimes/CMakeLists.txt =================================================================== --- llvm-toolchain-12_12.0.1.orig/runtimes/CMakeLists.txt +++ llvm-toolchain-12_12.0.1/runtimes/CMakeLists.txt @@ -97,7 +97,7 @@ include(HandleLLVMOptions) include(FindPythonInterp) # Remove the -nostdlib++ option we've added earlier. -string(REPLACE "-nostdlib++" "" CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") +#string(REPLACE "-nostdlib++" "" CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") # Use libtool instead of ar if you are both on an Apple host, and targeting Apple. if(CMAKE_HOST_APPLE AND APPLE)