blob: 2292702e53ad6399ff5bdbd2e97e0c6741fd0224 [file] [log] [blame]
From 6a780f10c2b600cfc38f8b8f20cb7e40b979f541 Mon Sep 17 00:00:00 2001
From: Michal Domonkos <mdomonko@redhat.com>
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 <fontaine.fabrice@gmail.com>
---
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 <omp.h>],
+ [#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)