diff options
author | Gilles Espinasse <g.esp@free.fr> | 2011-04-12 22:44:56 +0200 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2011-04-18 16:13:58 -0400 |
commit | 1670b952143284f480c39ff087b5694a64eb7db3 (patch) | |
tree | ffad3538af060ba5623e3b97563eb1c48719cecc | |
parent | b9e8f7fb7494e4ee4be56d1555632233a494b28e (diff) |
Fix OpenMP not supported case
PIXMAN_LINK_WITH_ENV did not fail unless -Wall -Werror is used.
So even when the compiler did not support OpenMP, USE_OPENMP was defined.
Fix that by running the second OpenMP test only when first AC_OPENMP find supported
configure tested in the cases :
gcc without libgomp support, no openmp option, --enable-openmp and --disable-openmp
gcc with libgomp support, no openmp option, --enable-openmp and --disable-openmp
Not tested with autoconf version not knowing openmp (<2.62)
Warn when --enable-openmp is requested but no support is found
Signed-off-by: Gilles Espinasse <g.esp@free.fr>
-rw-r--r-- | configure.ac | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/configure.ac b/configure.ac index 0b526d6..09a4948 100644 --- a/configure.ac +++ b/configure.ac @@ -192,35 +192,43 @@ dnl ========================================================================= dnl OpenMP for the test suite? dnl -# Check for OpenMP support (only supported by autoconf >=2.62) +# Check for OpenMP support only when autoconf support that (require autoconf >=2.62) OPENMP_CFLAGS= m4_ifdef([AC_OPENMP], [AC_OPENMP]) -m4_define([openmp_test_program],[dnl -#include <stdio.h> +if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then + AC_MSG_WARN([OpenMP support requested but found unsupported]) +fi -extern unsigned int lcg_seed; -#pragma omp threadprivate(lcg_seed) -unsigned int lcg_seed; +dnl May not fail to link without -Wall -Werror added +dnl So try to link only when openmp is supported +dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used +if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then + m4_define([openmp_test_program],[dnl + #include <stdio.h> -unsigned function(unsigned a, unsigned b) -{ + extern unsigned int lcg_seed; + #pragma omp threadprivate(lcg_seed) + unsigned int lcg_seed; + + unsigned function(unsigned a, unsigned b) + { lcg_seed ^= b; return ((a + b) ^ a ) + lcg_seed; -} + } -int main(int argc, char **argv) -{ + int main(int argc, char **argv) + { int i; int n1 = 0, n2 = argc; unsigned checksum = 0; int verbose = argv != NULL; unsigned (*test_function)(unsigned, unsigned); test_function = function; - #pragma omp parallel for reduction(+:checksum) default(none) \ + #pragma omp parallel for reduction(+:checksum) default(none) \ shared(n1, n2, test_function, verbose) for (i = n1; i < n2; i++) - { + { unsigned crc = test_function (i, 0); if (verbose) printf ("%d: %08X\n", i, crc); @@ -228,18 +236,17 @@ int main(int argc, char **argv) } printf("%u\n", checksum); return 0; -} -]) + } + ]) -PIXMAN_LINK_WITH_ENV( + PIXMAN_LINK_WITH_ENV( [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"], [openmp_test_program], [have_openmp=yes], [have_openmp=no]) -if test "x$have_openmp" = "xyes"; then - AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite]) -else - OPENMP_CFLAGS="" + if test "x$have_openmp" = "xyes" ; then + AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite]) + fi fi AC_SUBST(OPENMP_CFLAGS) |