From 6a780f10c2b600cfc38f8b8f20cb7e40b979f541 Mon Sep 17 00:00:00 2001 From: Michal Domonkos Date: Tue, 4 Aug 2020 16:50:21 +0200 Subject: [PATCH] Check for OpenMP version at configure time Only accept OpenMP >= 4.5, due to the "priority" clause that we use since commit 6f6f5e7, and also document that in the INSTALL file. If explicitly required with --enable-openmp, fail configuration if the version is not available. https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf Resolves: #1315 [Retrieved from: https://github.com/rpm-software-management/rpm/commit/6a780f10c2b600cfc38f8b8f20cb7e40b979f541] Signed-off-by: Fabrice Fontaine --- INSTALL | 6 ++++++ configure.ac | 25 +++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/INSTALL b/INSTALL index cfbe54a3e..7622b2efe 100644 --- a/INSTALL +++ b/INSTALL @@ -142,6 +142,12 @@ If you plan on using cryptographic signatures you will need a version of GPG, available from http://www.gnupg.org/ +OpenMP multithreading support is automatically enabled if your C compiler has +support for OpenMP version 4.5 or higher (to disable, pass the --disable-openmp +option to configure). For GCC, OpenMP 4.5 is fully supported since GCC 6.1, +which is available from + http://www.gnu.org/ + To compile RPM: -------------- diff --git a/configure.ac b/configure.ac index 1346ee704..35003619d 100644 --- a/configure.ac +++ b/configure.ac @@ -167,11 +167,32 @@ AC_SUBST(WITH_LZMA_LIB) # AC_OPENMP supports --enable/disable-openmp out of the box, but it doesn't # actually give us a way to conditionalize the build based on that. Argh. +# Version 4.5 (201511) introduced "priority" clause for tasks. OPENMP_CFLAGS= AC_OPENMP AS_IF([test "x$ac_cv_prog_c_openmp" != x && - test "x$ac_cv_prog_c_openmp" != unsupported],[ - AC_DEFINE(ENABLE_OPENMP, 1, [Enable multithreading support?]) + test "x$ac_cv_prog_c_openmp" != xunsupported],[ + old_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $OPENMP_CFLAGS" + AC_MSG_CHECKING([OpenMP is at least version 4.5]) + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [#if _OPENMP < 201511 + exit(1); + #endif + ] + )], + [AC_MSG_RESULT([yes]) + AC_DEFINE(ENABLE_OPENMP, 1, [Enable multithreading support?]) + ], + [AC_MSG_RESULT([no]) + if test "$enable_openmp" = "yes"; then + AC_MSG_ERROR([OpenMP too old]) + fi + ] + ) + CFLAGS=$old_CFLAGS ]) AC_SUBST(OPENMP_CFLAGS)