configure.ac 23.6 KB
Newer Older
1
AC_PREREQ([2.69])
2

3
AC_INIT([elpa],[2015.11.001], [elpa-library@mpcdf.mpg.de])
4
AC_SUBST([PACKAGE_VERSION])
5

6 7 8
AC_CONFIG_SRCDIR([src/elpa1.F90])

AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
9 10 11 12 13 14 15 16 17

# Without this, automake tries to be smart and rebuilt
# the autoconf generated files such as configure, aclocal.m4, etc.,
# in case the timestamps of files such as configure.ac are newer
#
# This only makes trouble for end users with out-of-date autoconf versions
# that cannot produce these files
AM_MAINTAINER_MODE([disable])

18 19 20 21
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AM_SILENT_RULES([yes])

22 23
rm -rf config.h config-f90.h

24 25 26 27 28 29 30 31 32 33 34 35 36
# Set the libtool library version, see LIBRARY_INTERFACE
#
# See http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
#
# [c:r:a]
#
# c: The currently implement interface
# r: The revision number of the current interface, that is the number
#    of released source-code changes for the current interface
# a: The "age" is the number of interfaces prior to c that are also supported
#    by the current interface, as they are ABI compatible (e.g. only new symbols
#    were added by the new interface)
#
37
AC_SUBST([ELPA_SO_VERSION], [5:0:1])
38 39
#

40

41 42 43 44 45 46
AX_CHECK_GNU_MAKE()
if test x$_cv_gnu_make_command = x ; then
        AC_MSG_ERROR([Need GNU Make])
fi

AC_CHECK_PROG(CPP_FOUND,cpp,yes,no)
47
if test x"${CPP_FOUND}" = xno; then
48 49 50 51 52 53 54
  AC_MSG_ERROR([no cpp found])
fi

# gnu-make fortran module dependencies
m4_include([fdep/fortran_dependencies.m4])
FDEP_F90_GNU_MAKE_DEPS

55 56
###

57 58
m4_include([m4/ax_elpa_openmp.m4])

59 60
AC_MSG_CHECKING(whether --enable-openmp is specified)
AC_ARG_ENABLE([openmp],
61
		AS_HELP_STRING([--enable-openmp],
62 63 64 65 66 67 68 69 70
			       [use OpenMP threading, default no.]),
	      [],
	      [enable_openmp=no])
AC_MSG_RESULT([${enable_openmp}])
AM_CONDITIONAL([WITH_OPENMP],[test x"$enable_openmp" = x"yes"])
if test x"${enable_openmp}" = x"yes"; then
	AC_DEFINE([WITH_OPENMP], [1], [use OpenMP threading])
fi

71 72 73 74 75 76 77 78 79 80 81 82
AC_MSG_CHECKING(whether --enable-shared-memory-only is specified)
AC_ARG_ENABLE([shared-memory-only],
		AS_HELP_STRING([--enable-shared-memory-only],
			       [do not use MPI; ELPA will be build for one node shared-memory runs only]),
	      [],
	      [enable_shared_memory_only=no])
AC_MSG_RESULT([${enable_shared_memory_only}])
AM_CONDITIONAL([WITH_MPI],[test x"$enable_shared_memory_only" = x"no"])
if test x"${enable_shared_memory_only}" = x"no"; then
	AC_DEFINE([WITH_MPI], [1], [use MPI])
fi

Andreas Marek's avatar
Andreas Marek committed
83 84 85
dnl check whether mpi compilers are available;
dnl if not abort since it is mandatory

86

Andreas Marek's avatar
Andreas Marek committed
87 88
# C
AC_LANG([C])
89 90
AX_PROG_CC_MPI([test x"$enable_shared_memory_only" = xno],[use_mpi=yes],[use_mpi=no])

91
if test x"${enable_openmp}" = x"yes"; then
92 93 94 95 96
  AX_ELPA_OPENMP
  if test "$ac_cv_prog_cc_openmp" = unsupported; then
    AC_MSG_ERROR([Could not compile a C program with OpenMP, adjust CFLAGS])
  fi
  CFLAGS="$OPENMP_CFLAGS $CFLAGS"
97
fi
98

99
AC_PROG_INSTALL
100 101
AM_PROG_AR
AM_PROG_AS
Andreas Marek's avatar
Andreas Marek committed
102 103 104 105

# Fortran
AC_LANG([Fortran])
m4_include([m4/ax_prog_fc_mpi.m4])
106
AX_PROG_FC_MPI([test x"$enable_shared_memory_only" = xno],[use_mpi=yes],[use_mpi=no])
107
if test x"${enable_openmp}" = x"yes"; then
108 109 110 111 112
  AX_ELPA_OPENMP
  if test "$ac_cv_prog_fc_openmp" = unsupported; then
    AC_MSG_ERROR([Could not compile a Fortran program with OpenMP, adjust FCFLAGS])
  fi
  FCFLAGS="$OPENMP_FCFLAGS $FCFLAGS"
113 114
fi

Andreas Marek's avatar
Andreas Marek committed
115 116
# C++
AC_LANG([C++])
117
AC_PROG_CXX
118

119
if test x"${enable_openmp}" = x"yes"; then
120 121 122 123 124
  AX_ELPA_OPENMP
  if test "$ac_cv_prog_cxx_openmp" = unsupported; then
    AC_MSG_ERROR([Could not compile a C++ program with OpenMP, adjust CXXFLAGS])
  fi
  CXXFLAGS="$OPENMP_CXXFLAGS $CXXFLAGS"
125
fi
Andreas Marek's avatar
Andreas Marek committed
126 127 128



Andreas Marek's avatar
Andreas Marek committed
129 130
dnl variables needed for the tests

Andreas Marek's avatar
Andreas Marek committed
131 132 133 134 135 136 137 138
dnl do NOT remove any variables here, until
dnl 1. you know 100% what you are doing
dnl 2. you tested ALL configure functionality afterwards
dnl Otherwise, you most likely break some functionality

dnl as default always define the generic kernels to be build
dnl this is only unset if gpu_support_only is defined, or
dnl other specific real/complex kernels are wanted
Andreas Marek's avatar
Andreas Marek committed
139 140 141 142 143 144

install_real_generic=yes
install_real_generic_simple=yes

install_complex_generic=yes
install_complex_generic_simple=yes
145

Andreas Marek's avatar
Andreas Marek committed
146 147
AC_LANG([C])

148 149 150 151 152 153 154 155 156
dnl build with ftimings support
AC_MSG_CHECKING(whether ELPA should be build with ftimings support)
AC_ARG_WITH([ftimings],
		AS_HELP_STRING([--with-ftimings],
			       [detailed timings, default no.]),
	      [with_ftimings=yes],
	      [with_ftimings=no])
AC_MSG_RESULT([${with_ftimings}])

157 158 159 160 161 162 163 164 165 166 167 168 169 170
dnl build with the possibilty to redirect stdout and stderr
dnl per MPI task in a file
AC_MSG_CHECKING(whether stdout/stderr file redirect should be enabled)
AC_ARG_WITH([redirect],
		AS_HELP_STRING([--with-redirect],
			       [for test programs, allow redirection of stdout/stderr per MPI taks in a file (useful for ftimings), default no.]),
	      [with_redirect=yes],
	      [with_redirect=no])
AC_MSG_RESULT([${with_redirect}])

if test x"${with_redirect}" = x"yes"; then
  AC_DEFINE([HAVE_REDIRECT], [1], [Redirect stdout and stderr of test programs per MPI tasks to a file])
fi
AM_CONDITIONAL([HAVE_REDIRECT],[test x"$with_redirect" = x"yes"])
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192

if test x"${with_ftimings}" = x"yes"; then
  AC_DEFINE([HAVE_DETAILED_TIMINGS], [1], [Enable more timings])
  AC_ARG_ENABLE([papi],
	[AS_HELP_STRING([--disable-papi],[Do not use PAPI to also measure flop count, autodetected by default])],
	[want_papi=$enableval],[want_papi="auto"])
  papi_found=unknown
  if test x"$want_papi" != x"no" ; then
    AC_CHECK_LIB([papi],[PAPI_library_init],[papi_found="yes"],[papi_found="no"])
    if test x"$want_papi" = x"yes" ; then
      if test x"$papi_found" = x"no" ; then
        AC_MSG_ERROR(["Could not find usable PAPI installation, please adjust CFLAGS, LDFLAGS"])
      fi
    fi
  fi
  if test x"$papi_found" = x"yes"; then
    AC_DEFINE([HAVE_LIBPAPI], [1], [Use the PAPI library])
    LIBS="-lpapi $LIBS"
  fi
fi
AM_CONDITIONAL([HAVE_DETAILED_TIMINGS],[test x"$with_ftimings" = x"yes"])

Andreas Marek's avatar
Andreas Marek committed
193 194
AC_MSG_CHECKING(whether SSE assembler kernel can be compiled)

195 196
$CC -c $srcdir/src/elpa2_kernels/elpa2_kernels_asm_x86_64.s -o test.o 2>/dev/null
if test "$?" == 0; then
Andreas Marek's avatar
Andreas Marek committed
197 198 199
  can_compile_sse=yes
  install_real_sse=yes
  install_complex_sse=yes
200
else
Andreas Marek's avatar
Andreas Marek committed
201 202 203
  can_compile_sse=no
  install_real_sse=no
  install_complex_sse=no
204 205
fi
rm -f ./test.o
Andreas Marek's avatar
Andreas Marek committed
206
AC_MSG_RESULT([${can_compile_sse}])
207

Andreas Marek's avatar
Andreas Marek committed
208
dnl check whether one can compile with avx - gcc intrinsics
209

210
dnl first pass: try with specified CFLAGS and CXXFLAGS
211
AC_MSG_CHECKING([whether we can compile AVX intrinsics in C])
212 213
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
 #include <x86intrin.h>
214
 int main(int argc, char **argv){
215 216
 double* q;
 __m256d a1_1 = _mm256_load_pd(q);
217
 return 0;
218 219 220 221 222
 }
 ])],
 [can_compile_avx=yes],
 [can_compile_avx=no]
)
Andreas Marek's avatar
Andreas Marek committed
223
AC_MSG_RESULT([${can_compile_avx}])
224

225 226 227
if test "${can_compile_avx}" = "yes" ; then
  AC_MSG_CHECKING([whether we can compile AVX intrinsics in C++])
  AC_LANG_PUSH([C++])
228 229
  AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   #include <x86intrin.h>
230
   int main(int argc, char **argv){
231 232
   double* q;
   __m256d a1_1 = _mm256_load_pd(q);
233
   return 0;
234 235 236 237 238
   }
   ])],
   [can_compile_avx=yes],
   [can_compile_avx=no]
  )
239
  AC_LANG_POP([C++])
240
  AC_MSG_RESULT([${can_compile_avx}])
241 242
  if test "${can_compile_avx}" = "no" ; then
    AC_MSG_WARN([Cannot compile C++ with AVX: disabling AVX alltogether])
243 244 245
  fi
fi

246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
AC_MSG_CHECKING([whether we can compile AVX2 intrinsics in C])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
 #include <x86intrin.h>
 int main(int argc, char **argv){
 double* q;
 __m256d q1 = _mm256_load_pd(q);
 __m256d y1 = _mm256_fmadd_pd(q1, q1, q1);
 return 0;
 }
 ])],
 [can_compile_avx2=yes],
 [can_compile_avx2=no]
)
AC_MSG_RESULT([${can_compile_avx2}])
if test "${can_compile_avx2}" = "yes" ; then
  AC_MSG_CHECKING([whether we can compile AVX2 intrinsics in C++])
  AC_LANG_PUSH([C++])
  AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   #include <x86intrin.h>
   int main(int argc, char **argv){
   double* q;
   __m256d q1 = _mm256_load_pd(q);
   __m256d y1 = _mm256_fmadd_pd(q1, q1, q1);
   return 0;
   }
   ])],
   [can_compile_avx2=yes],
   [can_compile_avx2=no]
  )
  AC_LANG_POP([C++])
  AC_MSG_RESULT([${can_compile_avx2}])
  if test "${can_compile_avx2}" = "no" ; then
    AC_MSG_WARN([Cannot compile C++ with AVX2!])
  fi
fi

282
if test "${can_compile_avx}" = "yes" ; then
Andreas Marek's avatar
Andreas Marek committed
283 284 285 286 287 288
  install_real_avx_block2=yes
  install_real_avx_block4=yes
  install_real_avx_block6=yes

  install_complex_avx_block1=yes
  install_complex_avx_block2=yes
Andreas Marek's avatar
Andreas Marek committed
289 290 291 292 293 294 295 296 297 298 299

  want_avx=yes
else
  install_real_avx_block2=no
  install_real_avx_block4=no
  install_real_avx_block6=no

  install_complex_avx_block1=no
  install_complex_avx_block2=no

  want_avx=yes
300 301
fi

302 303 304 305 306 307 308 309 310 311 312 313 314
AM_CONDITIONAL([HAVE_SSE],[test x"$can_compile_sse" = x"yes"])
if test x"${can_compile_sse}" = x"yes" ; then
  AC_DEFINE([HAVE_SSE],[1],[SSE is supported on this CPU])
fi
AM_CONDITIONAL([HAVE_AVX],[test x"$can_compile_avx" = x"yes"])
if test x"${can_compile_avx}" = x"yes" ; then
  AC_DEFINE([HAVE_AVX],[1],[AVX is supported on this CPU])
fi
AM_CONDITIONAL([HAVE_AVX2],[test x"$can_compile_avx2" = x"yes"])
if test x"${can_compile_avx2}" = x"yes" ; then
  AC_DEFINE([HAVE_AVX2],[1],[AVX2 is supported on this CPU])
fi

315 316 317 318 319 320 321
dnl set the AVX optimization flags if this option is specified
AC_MSG_CHECKING(whether AVX optimization flags should be set automatically)
AC_ARG_WITH([avx-optimization],
		AS_HELP_STRING([--with-avx-optimization],
			       [use AVX optimization, default no.]),
	      [with_avx_optimization=yes],
	      [with_avx_optimization=no])
Andreas Marek's avatar
Andreas Marek committed
322
AC_MSG_RESULT([${with_avx_optimization}])
323
if test x"${with_avx_optimization}" = x"yes"; then
Andreas Marek's avatar
Andreas Marek committed
324 325 326
 CFLAGS="$CFLAGS -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize"
 CXXFLAGS="$CXXFLAGS -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize"
fi
327

328
AC_LANG([Fortran])
329 330 331
AC_FC_FREEFORM
AC_FC_MODULE_FLAG
AC_FC_MODULE_OUTPUT_FLAG
332
AC_FC_LIBRARY_LDFLAGS
333 334 335 336

save_FCFLAGS=$FCFLAGS
save_LDFLAGS=$LDFLAGS

337 338 339
AC_ARG_VAR([SCALAPACK_LDFLAGS],[Extra LDFLAGS necessary to link a program with Scalapack])
AC_ARG_VAR([SCALAPACK_FCFLAGS],[Extra FCFLAGS necessary to compile a Fortran program with Scalapack])

340 341
FCFLAGS="$FCFLAGS $SCALAPACK_FCFLAGS"
LDFLAGS="$LDFLAGS $SCALAPACK_LDFLAGS"
342

343
dnl check whether fortran error_unit is defined
344
AC_MSG_CHECKING([whether Fortran module iso_fortran_env is available])
345
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
346 347 348 349 350 351 352 353 354 355
  program test_error_unit
    use ISO_FORTRAN_ENV, only : error_unit
    implicit none

    write(error_unit,*) "error_unit is defined"
  end program
])],
  [can_use_iso_fortran_env=yes],
  [can_use_iso_fortran_env=no]
)
356
AC_MSG_RESULT([${can_use_iso_fortran_env}])
357

358 359 360 361
dnl check whether one can link with specified MKL (desired method)
AC_MSG_CHECKING([whether we can compile a Fortran program using MKL])


362
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
363
  program test_mkl
364
    use mkl_service
365 366 367 368 369 370 371 372 373 374 375 376
    character*198 :: string
    call mkl_get_version_string(string)
    write(*,'(a)') string
  end program
])],
  [can_compile_with_mkl=yes],
  [can_compile_with_mkl=no]
)
AC_MSG_RESULT([${can_compile_with_mkl}])

if test x"$can_compile_with_mkl" = x"yes" ; then
  AC_MSG_CHECKING([whether we can link a Fortran program with MKL])
377
  AC_LINK_IFELSE([AC_LANG_SOURCE([
378
    program test_mkl
379
      use mkl_service
380 381 382 383 384
      character*198 :: string
      call mkl_get_version_string(string)
      write(*,'(a)') string
    end program
  ])],
Andreas Marek's avatar
Andreas Marek committed
385 386
    [have_mkl=yes],
    [have_mkl=no]
387
  )
Andreas Marek's avatar
Andreas Marek committed
388
  AC_MSG_RESULT([${have_mkl}])
389 390 391
fi

dnl if not mkl, check all the necessary individually
392
if test x"${have_mkl}" = x"yes" ; then
393 394 395 396
  WITH_MKL=1
else

  dnl first check blas
Andreas Marek's avatar
Andreas Marek committed
397 398 399
  AC_SEARCH_LIBS([dgemm],[blas],[have_blas=yes],[have_blas=no])
  AC_MSG_CHECKING([whether we can link a program with a blas lib])
  AC_MSG_RESULT([${have_blas}])
400

401
  if test x"${have_blas}" = x"no" ; then
Andreas Marek's avatar
Andreas Marek committed
402
    AC_MSG_ERROR([could not link with blas: specify path])
403
  fi
404
  dnl now lapack
Andreas Marek's avatar
Andreas Marek committed
405 406 407
  AC_SEARCH_LIBS([dlarrv],[lapack],[have_lapack=yes],[have_lapack=no])
  AC_MSG_CHECKING([whether we can link a program with a lapack lib])
  AC_MSG_RESULT([${have_lapack}])
408

409
  if test x"${have_lapack}" = x"no" ; then
410
    AC_MSG_ERROR([could not link with lapack: specify path])
411
  fi
Andreas Marek's avatar
Andreas Marek committed
412

413 414 415 416 417 418 419 420 421 422 423 424 425
  if test x"${enable_shared_memory_only}" = x"no"; then
    dnl test whether scalapack already contains blacs
    scalapack_libs="mpiscalapack scalapack"
    old_LIBS="$LIBS"
    for lib in ${scalapack_libs}; do
      LIBS="-l${lib} ${old_LIBS}"
      AC_MSG_CHECKING([whether -l${lib} already contains a BLACS implementation])
      AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([blacs_gridinit])],[blacs_in_scalapack=yes],[blacs_in_scalapack=no])
      AC_MSG_RESULT([${blacs_in_scalapack}])
      if test x"${blacs_in_scalapack}" = x"yes"; then
        break
      fi
    done
426

427 428
    if test x"${blacs_in_scalapack}" = x"no"; then
      LIBS="${old_LIBS}"
429

430 431 432
      dnl Test for stand-alone blacs
      AC_SEARCH_LIBS([bi_f77_init],[mpiblacsF77init],[],[],[-lmpiblacs])
      AC_SEARCH_LIBS([blacs_gridinit],[mpiblacs blacs],[have_blacs=yes],[have_blacs=no])
Andreas Marek's avatar
Andreas Marek committed
433

434 435 436
      if test x"${have_blacs}" = x"no"; then
        AC_MSG_ERROR([No usable BLACS found. If installed in a non-standard place, please specify suitable LDFLAGS and FCFLAGS as arguments to configure])
      fi
437
    fi
438

439
    AC_SEARCH_LIBS([pdtran],[$scalapack_libs],[have_scalapack=yes],[have_scalapack=no])
Andreas Marek's avatar
Andreas Marek committed
440

441 442 443
    if test x"${have_scalapack}" = x"no" ; then
      AC_MSG_ERROR([could not link with scalapack: specify path])
    fi
444 445 446 447
  fi

  dnl check whether we can link alltogehter
  AC_MSG_CHECKING([whether we can link a Fortran program with all blacs/scalapack])
448
  AC_LINK_IFELSE([AC_LANG_SOURCE([
449 450
    program dgemm_test

451 452
      integer , parameter:: M = 4, N = 3, K = 2
      real :: A(M,K), B(K,N), C(M,N)
453

454
      call dgemm('N','N',M,N,K,1.0,A,M,B,K,0.0,C,M)
455 456 457 458 459 460 461 462

     end program dgemm_test
     ])],
     [can_link_with_blacs_scalapack=yes],
     [can_link_with_blacs_scalapack=no]
   )
   AC_MSG_RESULT([${can_link_with_blacs_scalapack}])

463
   if test x"${can_link_with_blacs_scalapack}" = x"yes" ; then
464 465
     WITH_BLACS=1
   else
466
   AC_MSG_ERROR([We can neither link with MKL or another Scalpack. Please specify SCALAPACK_LDFLAGS and SCALAPACK_FCFLAGS!])
467 468 469
   fi
fi

470 471 472 473
dnl important: reset them again!
FCFLAGS=$save_FCFLAGS
LDFLAGS=$save_LDFLAGS

Andreas Marek's avatar
Andreas Marek committed
474 475 476 477
dnl check for intrinsic fortran function of 2003 standard
AC_MSG_CHECKING([whether we can use the intrinsic Fortran function "get_environment_variable"])


478
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
479
  program test_get_environment
480
nn
Andreas Marek's avatar
Andreas Marek committed
481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
    character(len=256) :: homedir
    call get_environment_variable("HOME",homedir)
  end program
])],
  [fortran_can_check_environment=yes],
  [fortran_can_check_environment=no]
)
AC_MSG_RESULT([${fortran_can_check_environment}])

dnl now check which kernels can be compiled

dnl the checks for SSE were already done before
dnl the checks for AVX were already done before

dnl check BGP kernel
AC_MSG_CHECKING([whether we can compile with BGP intrinsics])


499
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
500 501 502
  program test_bgp
    complex*16 :: y3,q3,h2
    y3 = fxcpmadd(y3,q3,h2)
503

Andreas Marek's avatar
Andreas Marek committed
504 505 506 507 508 509 510
  end program
])],
  [can_compile_bgp=yes],
  [can_compile_bgp=no]
)
AC_MSG_RESULT([${can_compile_bgp}])

511
if test x"${can_compile_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
512 513
  install_real_bgp=yes
  install_complex_bgp=yes
Andreas Marek's avatar
Andreas Marek committed
514 515 516
else
  install_real_bgp=no
  install_complex_bgp=no
Andreas Marek's avatar
Andreas Marek committed
517 518 519 520 521
fi

dnl check BGQ kernel
AC_MSG_CHECKING([whether we can compile with BGQ intrinsics])

522
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
523
  program test_bgq
Andreas Marek's avatar
Andreas Marek committed
524 525
    VECTOR(REAL(8))::QPX_h2
    real*8         :: hh(10,2)
Andreas Marek's avatar
Andreas Marek committed
526
    QPX_h2 = VEC_SPLATS(hh(2,2))
527

Andreas Marek's avatar
Andreas Marek committed
528 529 530 531 532 533 534
  end program
])],
  [can_compile_bgq=yes],
  [can_compile_bgq=no]
)
AC_MSG_RESULT([${can_compile_bgq}])

535
if test x"${can_compile_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
536 537
  install_real_bgq=yes
  install_complex_bgq=yes
Andreas Marek's avatar
Andreas Marek committed
538 539 540
else
  install_real_bgq=no
  install_complex_bgq=no
Andreas Marek's avatar
Andreas Marek committed
541 542 543 544
fi


dnl environment variable setting of kernel
545
if test x"${fortran_can_check_environment}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
546 547 548
 AC_DEFINE([HAVE_ENVIRONMENT_CHECKING],[1],[Fortran can querry environment variables])
fi

549 550
dnl last check whether user wants to compile only a specific kernel
dnl
Andreas Marek's avatar
Andreas Marek committed
551

552
m4_include([m4/ax_elpa_specific_kernels.m4])
Andreas Marek's avatar
Andreas Marek committed
553

554
dnl real kernels
Andreas Marek's avatar
Andreas Marek committed
555 556
  dnl do not remove this variable it is needed in the macros
  use_specific_real_kernel=no
Andreas Marek's avatar
Andreas Marek committed
557

558 559
  dnl generic kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-generic-kernel-only],[generic-kernel],[install_real_generic])
Andreas Marek's avatar
Andreas Marek committed
560

561 562
  dnl generic-simple kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-generic-simple-kernel-only],[generic-simple-kernel],[install_real_generic_simple])
Andreas Marek's avatar
Andreas Marek committed
563

564 565
  dnl sse kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-sse-kernel-only],[sse-kernel],[install_real_sse])
Andreas Marek's avatar
Andreas Marek committed
566

567 568
  dnl bgp kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-bgp-kernel-only],[bgp-kernel],[install_real_bgp])
Andreas Marek's avatar
Andreas Marek committed
569

570 571
  dnl bgq kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-bgq-kernel-only],[bgq-kernel],[install_real_bgq])
Andreas Marek's avatar
Andreas Marek committed
572

573 574
  dnl real-avx-block2 kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-avx-block2-kernel-only],[real-avx-block2-kernel],[install_real_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
575

576 577
  dnl real-avx-block4 kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-avx-block4-kernel]-only,[real-avx-block4-kernel],[install_real_avx_block4])
578

579 580
  dnl real-avx-block6 kernel
  DEFINE_OPTION_SPECIFIC_REAL_KERNEL([real-avx-block6-kernel-only],[real-avx-block6-kernel],[install_real_avx_block6])
581

Andreas Marek's avatar
Andreas Marek committed
582 583 584 585 586 587

dnl complex kernels

  dnl do not remove this variable it is needed in the macros
  use_specific_complex_kernel=no

588 589
  dnl generic kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-generic-kernel-only],[generic-kernel],[install_complex_generic])
590

591 592
  dnl generic-simple kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-generic-simple-kernel-only],[generic-simple-kernel],[install_complex_generic_simple])
Andreas Marek's avatar
Andreas Marek committed
593

594 595
  dnl sse kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-sse-kernel-only],[sse-kernel],[install_complex_sse])
Andreas Marek's avatar
Andreas Marek committed
596

597 598
  dnl complex-bqp kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-bgp-kernel-only],[bgp-kernel],[install_complex_bgp])
Andreas Marek's avatar
Andreas Marek committed
599

600 601
  dnl complex-bqq kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-bgq-kernel-only],[bgq-kernel],[install_complex_bgq])
Andreas Marek's avatar
Andreas Marek committed
602

603 604
  dnl complex-avx-block1 kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-avx-block1-kernel-only],[complex-avx-block1-kernel],[install_complex_avx_block1])
Andreas Marek's avatar
Andreas Marek committed
605

606 607
  dnl complex-avx-block2 kernel
  DEFINE_OPTION_SPECIFIC_COMPLEX_KERNEL([complex-avx-block2-kernel-only],[complex-avx-block2-kernel],[install_complex_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
608

609
dnl set the conditionals according to the previous tests
610
if test x"${can_use_iso_fortran_env}" = x"yes" ; then
611 612 613
 AC_DEFINE([HAVE_ISO_FORTRAN_ENV],[1],[can use module iso_fortran_env])
fi

Andreas Marek's avatar
Andreas Marek committed
614
AM_CONDITIONAL([WITH_REAL_GENERIC_KERNEL],[test x"$install_real_generic" = x"yes"])
615
if test x"${install_real_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
616 617 618 619
 AC_DEFINE([WITH_REAL_GENERIC_KERNEL],[1],[can use real generic kernel])
fi

AM_CONDITIONAL([WITH_COMPLEX_GENERIC_KERNEL],[test x"$install_complex_generic" = x"yes"])
620
if test x"${install_complex_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
621 622 623 624
 AC_DEFINE([WITH_COMPLEX_GENERIC_KERNEL],[1],[can use complex generic kernel])
fi

AM_CONDITIONAL([WITH_REAL_GENERIC_SIMPLE_KERNEL],[test x"$install_real_generic_simple" = x"yes"])
625
if test x"${install_real_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
626 627 628 629
 AC_DEFINE([WITH_REAL_GENERIC_SIMPLE_KERNEL],[1],[can use real generic-simple kernel])
fi

AM_CONDITIONAL([WITH_COMPLEX_GENERIC_SIMPLE_KERNEL],[test x"$install_complex_generic_simple" = x"yes"])
630
if test x"${install_complex_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
631 632 633 634
 AC_DEFINE([WITH_COMPLEX_GENERIC_SIMPLE_KERNEL],[1],[can use complex generic-simple kernel])
fi

AM_CONDITIONAL([WITH_REAL_SSE_KERNEL],[test x"$install_real_sse" = x"yes"])
635
if test x"${install_real_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
636 637 638 639
 AC_DEFINE([WITH_REAL_SSE_KERNEL],[1],[can use real SSE kernel])
fi

AM_CONDITIONAL([WITH_COMPLEX_SSE_KERNEL],[test x"$install_complex_sse" = x"yes"])
640
if test x"${install_complex_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
641 642 643 644
 AC_DEFINE([WITH_COMPLEX_SSE_KERNEL],[1],[can use complex SSE kernel])
fi

AM_CONDITIONAL([WITH_REAL_AVX_BLOCK2_KERNEL],[test x"$install_real_avx_block2" = x"yes"])
645
if test x"${install_real_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
646 647 648 649
 AC_DEFINE([WITH_REAL_AVX_BLOCK2_KERNEL],[1],[can use real_avx_block2 kernel])
fi

AM_CONDITIONAL([WITH_REAL_AVX_BLOCK4_KERNEL],[test x"$install_real_avx_block4" = x"yes"])
650
if test x"${install_real_avx_block4}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
651 652 653 654
 AC_DEFINE([WITH_REAL_AVX_BLOCK4_KERNEL],[1],[can use real_avx_block4 kernel])
fi

AM_CONDITIONAL([WITH_REAL_AVX_BLOCK6_KERNEL],[test x"$install_real_avx_block6" = x"yes"])
655
if test x"${install_real_avx_block6}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
656 657 658 659
 AC_DEFINE([WITH_REAL_AVX_BLOCK6_KERNEL],[1],[can use real_avx_block6 kernel])
fi

AM_CONDITIONAL([WITH_COMPLEX_AVX_BLOCK1_KERNEL],[test x"$install_complex_avx_block1" = x"yes"])
660
if test x"${install_complex_avx_block1}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
661 662 663 664
 AC_DEFINE([WITH_COMPLEX_AVX_BLOCK1_KERNEL],[1],[can use complex_avx_block1 kernel])
fi

AM_CONDITIONAL([WITH_COMPLEX_AVX_BLOCK2_KERNEL],[test x"$install_complex_avx_block2" = x"yes"])
665
if test x"${install_complex_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
666 667 668 669
 AC_DEFINE([WITH_COMPLEX_AVX_BLOCK2_KERNEL],[1],[can use complex_avx_block2 kernel])
fi

AM_CONDITIONAL([WITH_REAL_BGP_KERNEL],[test x"$install_real_bgp" = x"yes"])
670
if test x"${install_real_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
671 672 673 674
 AC_DEFINE([WITH_REAL_BGP_KERNEL],[1],[can use real BGP kernel])
fi

AM_CONDITIONAL([WITH_REAL_BGQ_KERNEL],[test x"$install_real_bgq" = x"yes"])
675
if test x"${install_real_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
676 677 678
 AC_DEFINE([WITH_REAL_BGQ_KERNEL],[1],[can use real BGQ kernel])
fi

679 680
if test x"${use_specific_complex_kernel}" = x"no" ; then
 AC_DEFINE([WITH_NO_SPECIFIC_COMPLEX_KERNEL],[1],[do not use only one specific complex kernel (set at compile time)])
Andreas Marek's avatar
Andreas Marek committed
681 682
fi

683
if test x"${use_specific_real_kernel}" = x"no" ; then
684
  AC_DEFINE([WITH_NO_SPECIFIC_REAL_KERNEL],[1],[do not use only one specific real kernel (set at compile time)])
Andreas Marek's avatar
Andreas Marek committed
685 686
fi

687 688
LT_INIT

689 690 691 692 693 694
DX_PDF_FEATURE(OFF)
DX_PS_FEATURE(OFF)
DX_MAN_FEATURE(ON)
DX_HTML_FEATURE(ON)
DX_INIT_DOXYGEN([ELPA], [Doxyfile], [docs])

695
DESPERATELY_WANT_ASSUMED_SIZE=0
696
if test x"${DESPERATELY_WANT_ASSUMED_SIZE}" = x"yes" ; then
697 698 699
  AC_DEFINE([DESPERATELY_WANT_ASSUMED_SIZE],[1],[use assumed size arrays, even if not debuggable])
fi

700 701 702 703 704
AC_SUBST([WITH_MKL])
AC_SUBST([WITH_BLACS])
AC_SUBST([with_amd_bulldozer_kernel])
AC_SUBST([FC_MODINC])
AC_SUBST([FC_MODOUT])
705 706 707
AC_SUBST([OPENMP_CFLAGS])
AC_SUBST([OPENMP_FCFLAGS])
AC_SUBST([OPENMP_LDFLAGS])
708
#AC_SUBST(OPT_FCFLAGS)
709
AC_SUBST([DOXYGEN_OUTPUT_DIR], [docs])
710

711
rm -rf modules/ .fortran_dependencies/
712 713 714 715 716 717 718 719 720 721 722
mkdir modules

#gl_VISIBILITY
#AH_BOTTOM([#if HAVE_VISIBILITY
#define EXPORTED __attribute__((__visibility__("default")))
#define HIDDEN   __attribute__((__visibility__("hidden")))
#else
#define EXPORTED
#define HIDDEN
#endif])

723 724 725 726 727 728 729 730 731

# Some part of libtool is too smart and tries to parse the output of
#   gfortran -v
# and catches anything that resembles a -l library link specification.
# Unfortunately, recent versions of gfortran emit
#   -l gfortran
# with a space between -l and gfortran. The empty -l is then included
# into "postdeps_FC" and causes linking errors later on.
postdeps_FC=$(echo $postdeps_FC | sed 's/-l //g')
732

733
if test x"${enable_openmp}" = x"yes"; then
734
	SUFFIX="_openmp"
735
else
736
	SUFFIX=""
737
fi
738 739
AC_SUBST([SUFFIX])
AC_SUBST([PKG_CONFIG_FILE],[elpa${SUFFIX}-${PACKAGE_VERSION}.pc])
740

741 742
AC_CONFIG_FILES([
  Makefile
743
  Doxyfile
744
  ${PKG_CONFIG_FILE}:elpa.pc.in
745
])
746

747
AC_OUTPUT
748 749 750 751 752 753


if test -e config.h ; then
  grep "^#define" config.h > config-f90.h
else
  echo "Warning! No config.h was generated, check for errors and re-run configure!"
Andreas Marek's avatar
Andreas Marek committed
754
  exit 1
755
fi
Andreas Marek's avatar
Andreas Marek committed
756 757 758

echo "Generating elpa/elpa_generated.h..."
mkdir -p elpa
759 760 761 762 763
grep -h "^ *!c>" $srcdir/src/elpa_c_interface.F90 | sed 's/^ *!c>//;' > elpa/elpa_generated.h || exit 1

echo "Generating test/shared_sources/generated.h..."
mkdir -p test/shared_sources
grep -h "^ *!c>" $srcdir/test/shared_sources/*.F90 | sed 's/^ *!c>//;' > test/shared_sources/generated.h || exit 1
Andreas Marek's avatar
Andreas Marek committed
764

765
if test "${can_compile_avx}" = "no" ; then
Andreas Marek's avatar
Andreas Marek committed
766 767 768
  if test x"${want_avx}" = x"yes" ; then
    AC_MSG_WARN([Could not compile AVX instructions])
  fi
769
fi
770 771 772 773 774
if test "${can_compile_avx2}" = "no" ; then
  if test x"${want_avx}" = x"yes" ; then
    AC_MSG_WARN([Could not compile AVX2 instructions])
  fi
fi
775