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

3
AC_INIT([elpa],[2014.06.002], [elpa-library@rzg.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
37
38
39
# 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)
#
AC_SUBST([ELPA_SO_VERSION], [1:0:0])
#

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
55
56
57
58
  AC_MSG_ERROR([no cpp found])
fi

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

AC_PROG_INSTALL
AM_PROG_CC_C_O
AM_PROG_AR
AM_PROG_AS
59

60
AC_PROG_CXX
61

Andreas Marek's avatar
Andreas Marek committed
62
63
64
65
66
67
68
69
70
71
72
dnl variables needed for the tests

dnl these test will cause an abort of configure if not
dnl successful. However, if MKL is found then the blas, blacs,
dnl lapack, and scalapack test can fail and vice versa
have_blas=no
have_blacs=no
have_mkl=no
have_mpi=no
have_lapack=no
have_scalapack=no
73

Andreas Marek's avatar
Andreas Marek committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
dnl these tests will decide which kernels can be build
dnl the usual case is all except the BlueGene (bg) kernels

can_compile_sse=no
can_compile_avx=no
can_compile_bgp=no
can_compile_bqq=no

fortran_can_check_environment=no
use_specific_real_kernel=no
use_specific_complex_kernel=no

install_real_generic=yes
install_real_generic_simple=yes
install_real_sse=no
install_real_bgp=no
install_real_bgq=no
install_real_avx_block2=no
install_real_avx_block4=no
install_real_avx_block6=no

install_complex_generic=yes
install_complex_generic_simple=yes
install_complex_sse=no
install_complex_bgp=no
install_complex_bgq=no
install_complex_avx_block1=no
install_complex_avx_block2=no
AC_MSG_CHECKING(whether SSE assembler kernel can be compiled)

104
105
$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
106
107
108
  can_compile_sse=yes
  install_real_sse=yes
  install_complex_sse=yes
109
else
Andreas Marek's avatar
Andreas Marek committed
110
111
112
  can_compile_sse=no
  install_real_sse=no
  install_complex_sse=no
113
114
fi
rm -f ./test.o
Andreas Marek's avatar
Andreas Marek committed
115
AC_MSG_RESULT([${can_compile_sse}])
116

Andreas Marek's avatar
Andreas Marek committed
117
dnl check whether one can compile with avx - gcc intrinsics
118
119
120
121

 AC_MSG_CHECKING([whether we can compile a gcc intrinsic AVX program])

 dnl first pass: try with specified CFLAGS and CXXFLAGS
122
123
 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
  #include <x86intrin.h>
124
125
126
127
128
  void main(){
  double* q;
  __m256d a1_1 = _mm256_load_pd(q);
  }
  ])],
Andreas Marek's avatar
Andreas Marek committed
129
130
  [can_compile_avx=yes],
  [can_compile_avx=no]
131
 )
Andreas Marek's avatar
Andreas Marek committed
132
dnl first test failed: try again after updating  CFLAGS and CXXFLAGS with -mavx
133
 if test x"${can_compile_avx}" = x"no"; then
134
135
 CFLAGS="$CFLAGS -mavx"
 CXXFLAGS="$CXXFLAGS -mavx"
136
137
 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
  #include <x86intrin.h>
138
139
140
141
142
  void main(){
  double* q;
  __m256d a1_1 = _mm256_load_pd(q);
  }
  ])],
Andreas Marek's avatar
Andreas Marek committed
143
144
  [can_compile_avx=yes],
  [can_compile_avx=no]
145
146
 )
 fi
Andreas Marek's avatar
Andreas Marek committed
147
AC_MSG_RESULT([${can_compile_avx}])
148

149
if test x"${can_compile_avx}" = x"yes"; then
Andreas Marek's avatar
Andreas Marek committed
150
151
152
153
154
155
  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
156
157
158
159
160
161
162
163
164
165
166

fi


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
167
AC_MSG_RESULT([${with_avx_optimization}])
168
if test x"${with_avx_optimization}" = x"yes"; then
Andreas Marek's avatar
Andreas Marek committed
169
170
171
 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
172

173
AC_LANG([Fortran])
174
m4_include([m4/ax_prog_fc_mpi.m4])
175

176
177
178
dnl check whether an mpi compiler is available;
dnl if not abort since it is mandatory
AX_PROG_FC_MPI([],[have_mpi=yes],[have_mpi=no
179
		 if test x"${have_mpi}" = xno; then
180
181
182
183
184
185
186
187
188
189
190
191
192
193
  		  AC_MSG_ERROR([no mpi found])
		  fi])

AC_FC_FREEFORM
AC_FC_MODULE_FLAG
AC_FC_MODULE_OUTPUT_FLAG

AC_MSG_CHECKING(whether OpenMP usage is specified)
AC_ARG_WITH([openmp],
		AS_HELP_STRING([--with-openmp],
			       [use OpenMP threading, default no.]),
	      [with_openmp=yes],
	      [with_openmp=no])
  AC_MSG_RESULT([${with_openmp}])
194
  if test x"${enable_openmp}" = x"yes"; then
195
196
197
198
199
     with_openmp=yes
     AC_MSG_CHECKING(whether --enable-openmp is specified)
     AC_MSG_RESULT([${enable_openmp}])
  fi
  AM_CONDITIONAL([WITH_OPENMP],[test x"$with_openmp" = x"yes"])
200
  if test x"${with_openmp}" = x"yes"; then
201
	AC_DEFINE([WITH_OPENMP], [1], [use OpenMP threading])
202

203
        AX_ELPA_OPENMP
204
205
206
207

        # Append to flags as this influences which
        # kind of MPI library has to be used (thread-safe or not)
        FCFLAGS="$OPENMP_FCFLAGS $FCFLAGS"
208
	LDFLAGS="$OPENMP_FCFLAGS $LDFLAGS"
209
210
211
212
213
  fi

save_FCFLAGS=$FCFLAGS
save_LDFLAGS=$LDFLAGS

214
215
216
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])

217
218
FCFLAGS="$FCFLAGS $SCALAPACK_FCFLAGS"
LDFLAGS="$LDFLAGS $SCALAPACK_LDFLAGS"
219

220
dnl check whether fortran error_unit is defined
221
AC_MSG_CHECKING([whether Fortran module iso_fortran_env is available])
222
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
223
224
225
226
227
228
229
230
231
232
  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]
)
233
AC_MSG_RESULT([${can_use_iso_fortran_env}])
234

235
236
237
238
dnl check whether one can link with specified MKL (desired method)
AC_MSG_CHECKING([whether we can compile a Fortran program using MKL])


239
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
240
  program test_mkl
241
    use mkl_service
242
243
244
245
246
247
248
249
250
251
252
253
    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])
254
  AC_LINK_IFELSE([AC_LANG_SOURCE([
255
    program test_mkl
256
      use mkl_service
257
258
259
260
261
      character*198 :: string
      call mkl_get_version_string(string)
      write(*,'(a)') string
    end program
  ])],
Andreas Marek's avatar
Andreas Marek committed
262
263
    [have_mkl=yes],
    [have_mkl=no]
264
  )
Andreas Marek's avatar
Andreas Marek committed
265
  AC_MSG_RESULT([${have_mkl}])
266
267
268
fi

dnl if not mkl, check all the necessary individually
269
if test x"${have_mkl}" = x"yes" ; then
270
271
272
273
  WITH_MKL=1
else

  dnl first check blas
Andreas Marek's avatar
Andreas Marek committed
274
275
276
  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}])
277

278
  if test x"${have_blas}" = x"no" ; then
Andreas Marek's avatar
Andreas Marek committed
279
    AC_MSG_ERROR([could not link with blas: specify path]) 
280
  fi
281
  dnl now lapack
Andreas Marek's avatar
Andreas Marek committed
282
283
284
  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}])
285

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

290
291
  dnl test whether scalapack already contains blacs
  scalapack_libs="mpiscalapack scalapack"
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
  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

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

    dnl Test for stand-alone blacs
307
308
    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
309

310
311
312
    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
Andreas Marek's avatar
Andreas Marek committed
313
  fi
314

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

317
  if test x"${have_scalapack}" = x"no" ; then
318
    AC_MSG_ERROR([could not link with scalapack: specify path])
319
320
321
322
  fi

  dnl check whether we can link alltogehter
  AC_MSG_CHECKING([whether we can link a Fortran program with all blacs/scalapack])
323
  AC_LINK_IFELSE([AC_LANG_SOURCE([
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
    program dgemm_test

      integer , parameter:: n_cols=3,l_cols=3
      real :: hvm(n_cols,l_cols)

      call dgemm('T','N',n_cols,n_cols,l_cols,1.,hvm,ubound(hvm,1), &
      hvm(1,n_cols+1),ubound(hvm,1),0.,hvm,ubound(hvm,1))


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

340
   if test x"${can_link_with_blacs_scalapack}" = x"yes" ; then
341
342
     WITH_BLACS=1
   else
343
   AC_MSG_ERROR([We can neither link with MKL or another Scalpack. Please specify SCALAPACK_LDFLAGS and SCALAPACK_FCFLAGS!])
344
345
346
   fi
fi

347
348
349
350
dnl important: reset them again!
FCFLAGS=$save_FCFLAGS
LDFLAGS=$save_LDFLAGS

Andreas Marek's avatar
Andreas Marek committed
351
352
353
354
dnl check for intrinsic fortran function of 2003 standard
AC_MSG_CHECKING([whether we can use the intrinsic Fortran function "get_environment_variable"])


355
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
  program test_get_environment

    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])


377
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
378
379
380
  program test_bgp
    complex*16 :: y3,q3,h2
    y3 = fxcpmadd(y3,q3,h2)
381

Andreas Marek's avatar
Andreas Marek committed
382
383
384
385
386
387
388
  end program
])],
  [can_compile_bgp=yes],
  [can_compile_bgp=no]
)
AC_MSG_RESULT([${can_compile_bgp}])

389
if test x"${can_compile_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
390
391
392
393
394
395
396
  install_real_bgp=yes
  install_complex_bgp=yes
fi

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

397
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
398
399
400
401
  program test_bgq
    VECTOR(REAL(8))::QPX_x1
    real*8 :: hh(10,2))
    QPX_h2 = VEC_SPLATS(hh(2,2))
402

Andreas Marek's avatar
Andreas Marek committed
403
404
405
406
407
408
409
  end program
])],
  [can_compile_bgq=yes],
  [can_compile_bgq=no]
)
AC_MSG_RESULT([${can_compile_bgq}])

410
if test x"${can_compile_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
411
412
413
414
415
416
  install_real_bgq=yes
  install_complex_bgq=yes
fi


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


422
423
dnl macro for testing whether the user wanted to compile only with one
dnl specific real kernel
Andreas Marek's avatar
Andreas Marek committed
424

425
dnl usage: DEFINE_OPTION([only-real-generic-kernel],[generic-kernel],[with_real_generic_kernel],[install_real_generic])
Andreas Marek's avatar
Andreas Marek committed
426

427
428
429
430
431
432
433
434
AC_DEFUN([DEFINE_OPTION_REAL_KERNEL],[
  AC_ARG_WITH([$1],
               AS_HELP_STRING([--with-$1],
                              [only compile $2 for real case]),
              [],[with_option=no])
   
   if test x"${with_option}" = x"yes" ; then
    if test x"${use_specific_real_kernel}" = x"no" ; then
Andreas Marek's avatar
Andreas Marek committed
435
436
437

    dnl make sure that all the other kernels are unset
    install_real_generic=no
438
    install_real_generic_simple=no
Andreas Marek's avatar
Andreas Marek committed
439
    install_real_sse=no
440
    install_real_bgp=no
Andreas Marek's avatar
Andreas Marek committed
441
442
443
444
445
    install_real_bgq=no
    install_real_avx_block2=no
    install_real_avx_block4=no
    install_real_avx_block6=no
    use_specific_real_kernel=yes
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
    dnl now set the specific kernel
    $3=yes

    dnl in case of SSE or AVX make sure that we can compile the choosen kernel
    if test x"${install_real_sse}" = x"yes" ; then
     if test x"${can_compile_sse}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    if test x"${install_real_avx_block2}" = x"yes" ; then
     if test x"${can_compile_avx}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    if test x"${install_real_avx_block4}" = x"yes" ; then
     if test x"${can_compile_avx}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    if test x"${install_real_avx_block6}" = x"yes" ; then
     if test x"${can_compile_avx}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi


    AC_MSG_NOTICE([$1 will be the only compiled kernel for real case])
   else
    AC_MSG_FAILURE([$1 failed; A specific kernel for real case has already been defined before!])
   fi
  fi
])
Andreas Marek's avatar
Andreas Marek committed
481
482


483
484
485
486
487
488
dnl last check whether user wants to compile only a specific kernel
dnl
dnl real kernels
dnl
dnl generic kernel
DEFINE_OPTION_REAL_KERNEL([only-real-generic-kernel],[generic-kernel],[install_real_generic])
Andreas Marek's avatar
Andreas Marek committed
489

490
491
dnl generic-simple kernel
DEFINE_OPTION_REAL_KERNEL([only-real-generic-simple-kernel],[generic-simple-kernel],[install_real_generic_simple])
Andreas Marek's avatar
Andreas Marek committed
492

493
494
dnl sse kernel
DEFINE_OPTION_REAL_KERNEL([only-real-sse-kernel],[sse-kernel],[install_real_sse])
Andreas Marek's avatar
Andreas Marek committed
495
496

dnl bgp kernel
497
DEFINE_OPTION_REAL_KERNEL([only-real-bgp-kernel],[bgp-kernel],[install_real_bgp])
Andreas Marek's avatar
Andreas Marek committed
498
499

dnl bgq kernel
500
DEFINE_OPTION_REAL_KERNEL([only-real-bgq-kernel],[bgq-kernel],[install_real_bgq])
Andreas Marek's avatar
Andreas Marek committed
501
502

dnl real-avx-block2 kernel
503
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block2-kernel],[real-avx-block2-kernel],[install_real_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
504
505

dnl real-avx-block4 kernel
506
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block4-kernel],[real-avx-block4-kernel],[install_real_avx_block4])
Andreas Marek's avatar
Andreas Marek committed
507
508

dnl real-avx-block6 kernel
509
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block6-kernel],[real-avx-block6-kernel],[install_real_avx_block6])
Andreas Marek's avatar
Andreas Marek committed
510
511
512
513
514
515

dnl last check whether user wants to compile ony a specific kernel
dnl
dnl complex kernels
dnl

516
517
518
519
520
521
522
523
AC_DEFUN([DEFINE_OPTION_COMPLEX_KERNEL],[
  AC_ARG_WITH([$1],
                 AS_HELP_STRING([--with-$1],
                                [only compile $2 for complex case]),
              [],[with_option=no])
   
   if test x"${with_option}" = x"yes" ; then
    if test x"${use_specific_complex_kernel}" = x"no" ; then
Andreas Marek's avatar
Andreas Marek committed
524
525
526
527
528
529
530
531
532
533
534

    dnl make sure that all the other kernels are unset
    install_complex_generic=yes
    install_complex_generic_simple=no
    install_complex_sse=no
    install_complex_bgp=no
    install_complex_bgq=no
    install_complex_avx_block1=no
    install_complex_avx_block2=no

    use_specific_complex_kernel=yes
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
    dnl now set the specific kernel
    $3=yes

    dnl in case of SSE or AVX make sure that we can compile the choosen kernel
    if test x"${install_complex_sse}" = x"yes" ; then
     if test x"${can_compile_sse}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    if test x"${install_complex_avx_block1}" = x"yes" ; then
     if test x"${can_compile_avx}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    if test x"${install_complex_avx_block2}" = x"yes" ; then
     if test x"${can_compile_avx}" = x"no" ; then
       AC_MSG_ERROR([$2 kernel was set, but cannot be compiled!])
     fi		   
    fi

    AC_MSG_NOTICE([$1 will be the only compiled kernel for real case])
   else
    AC_MSG_FAILURE([$1 failed; A specific kernel for real case has already been defined before!])
   fi
  fi
])
Andreas Marek's avatar
Andreas Marek committed
563
564


565
566
dnl generic kernel
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-generic-kernel],[generic-kernel],[install_complex_generic])
Andreas Marek's avatar
Andreas Marek committed
567
568


569
570
dnl generic-simple kernel
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-generic-simple-kernel],[generic-simple-kernel],[install_complex_generic_simple])
Andreas Marek's avatar
Andreas Marek committed
571
572

dnl sse kernel
573
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-sse-kernel],[sse-kernel],[install_complex_sse])
Andreas Marek's avatar
Andreas Marek committed
574
575
576


dnl complex-bqp kernel
577
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-bgp-kernel],[bgp-kernel],[install_complex_bgp])
Andreas Marek's avatar
Andreas Marek committed
578
579

dnl complex-bqq kernel
580
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-bgq-kernel],[bgq-kernel],[install_complex_bgq])
Andreas Marek's avatar
Andreas Marek committed
581
582

dnl complex-avx-block1 kernel
583
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-avx-block1-kernel],[complex-avx-block1-kernel],[install_complex_avx_block1])
Andreas Marek's avatar
Andreas Marek committed
584
585

dnl complex-avx-block2 kernel
586
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-avx-block2-kernel],[complex-avx-block2-kernel],[install_complex_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
587
588


589
dnl set the conditionals according to the previous tests
590
if test x"${can_use_iso_fortran_env}" = x"yes" ; then
591
592
593
 AC_DEFINE([HAVE_ISO_FORTRAN_ENV],[1],[can use module iso_fortran_env])
fi

594

Andreas Marek's avatar
Andreas Marek committed
595
AM_CONDITIONAL([WITH_REAL_GENERIC_KERNEL],[test x"$install_real_generic" = x"yes"])
596
if test x"${install_real_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
597
598
599
600
 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"])
601
if test x"${install_complex_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
602
603
604
605
 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"])
606
if test x"${install_real_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
607
608
609
610
 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"])
611
if test x"${install_complex_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
612
613
614
615
 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"])
616
if test x"${install_real_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
617
618
619
620
 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"])
621
if test x"${install_complex_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
622
623
624
625
 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"])
626
if test x"${install_real_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
627
628
629
630
 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"])
631
if test x"${install_real_avx_block4}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
632
633
634
635
 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"])
636
if test x"${install_real_avx_block6}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
637
638
639
640
 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"])
641
if test x"${install_complex_avx_block1}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
642
643
644
645
 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"])
646
if test x"${install_complex_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
647
648
649
650
 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"])
651
if test x"${install_real_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
652
653
654
655
 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"])
656
if test x"${install_real_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
657
658
659
 AC_DEFINE([WITH_REAL_BGQ_KERNEL],[1],[can use real BGQ kernel])
fi

660
661
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
662
663
fi

664
665
if test x"${use_specific_real_kernel}" = x"no" ; then
 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
666
667
fi

668
669
670
671
672
673
674
LT_INIT

AC_SUBST([WITH_MKL])
AC_SUBST([WITH_BLACS])
AC_SUBST([with_amd_bulldozer_kernel])
AC_SUBST([FC_MODINC])
AC_SUBST([FC_MODOUT])
675
676
677
AC_SUBST([OPENMP_CFLAGS])
AC_SUBST([OPENMP_FCFLAGS])
AC_SUBST([OPENMP_LDFLAGS])
678
679
#AC_SUBST(OPT_FCFLAGS)

680
rm -rf modules/ .fortran_dependencies/
681
682
683
684
685
686
687
688
689
690
691
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])

692
693
694
695
696
697
698
699
700

# 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')
701
702

if test x"${with_openmp}" = x"yes"; then
703
	SUFFIX="_openmp"
704
else
705
	SUFFIX=""
706
fi
707
708
AC_SUBST([SUFFIX])
AC_SUBST([PKG_CONFIG_FILE],[elpa${SUFFIX}-${PACKAGE_VERSION}.pc])
709

710
711
AC_CONFIG_FILES([
  Makefile
712
  ${PKG_CONFIG_FILE}:elpa.pc.in
713
714
])
AC_OUTPUT
715
716
717
718
719
720
721


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!"
fi