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

AC_INIT([elpa],[2014.06], [elpa-library@rzg.mpg.de])
4
AC_SUBST([PACKAGE_VERSION])
5
6
AC_SUBST([PACKAGE_MINOR_VERSION],[001])

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

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

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

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

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

25
26
# this is the version of the API, should be changed in the major revision
# if and only if the actual API changes
27
# see http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
28
AC_SUBST([ELPA_SO_VERSION], [0:0:0])
29

30
31
32
33
34
35
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)
36
if test x"${CPP_FOUND}" = xno; then
37
38
39
40
41
42
43
44
45
46
47
  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
48

49
AC_PROG_CXX
50

Andreas Marek's avatar
Andreas Marek committed
51
52
53
54
55
56
57
58
59
60
61
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
62

Andreas Marek's avatar
Andreas Marek committed
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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)

93
94
$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
95
96
97
  can_compile_sse=yes
  install_real_sse=yes
  install_complex_sse=yes
98
else
Andreas Marek's avatar
Andreas Marek committed
99
100
101
  can_compile_sse=no
  install_real_sse=no
  install_complex_sse=no
102
103
fi
rm -f ./test.o
Andreas Marek's avatar
Andreas Marek committed
104
AC_MSG_RESULT([${can_compile_sse}])
105

Andreas Marek's avatar
Andreas Marek committed
106
dnl check whether one can compile with avx - gcc intrinsics
107
108
109
110

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

 dnl first pass: try with specified CFLAGS and CXXFLAGS
111
112
 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
  #include <x86intrin.h>
113
114
115
116
117
  void main(){
  double* q;
  __m256d a1_1 = _mm256_load_pd(q);
  }
  ])],
Andreas Marek's avatar
Andreas Marek committed
118
119
  [can_compile_avx=yes],
  [can_compile_avx=no]
120
 )
Andreas Marek's avatar
Andreas Marek committed
121
dnl first test failed: try again after updating  CFLAGS and CXXFLAGS with -mavx
122
 if test x"${can_compile_avx}" = x"no"; then
123
124
 CFLAGS="$CFLAGS -mavx"
 CXXFLAGS="$CXXFLAGS -mavx"
125
126
 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
  #include <x86intrin.h>
127
128
129
130
131
  void main(){
  double* q;
  __m256d a1_1 = _mm256_load_pd(q);
  }
  ])],
Andreas Marek's avatar
Andreas Marek committed
132
133
  [can_compile_avx=yes],
  [can_compile_avx=no]
134
135
 )
 fi
Andreas Marek's avatar
Andreas Marek committed
136
AC_MSG_RESULT([${can_compile_avx}])
137

138
if test x"${can_compile_avx}" = x"yes"; then
Andreas Marek's avatar
Andreas Marek committed
139
140
141
142
143
144
  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
145
146
147
148
149
150
151
152
153
154
155

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
156
AC_MSG_RESULT([${with_avx_optimization}])
157
if test x"${with_avx_optimization}" = x"yes"; then
Andreas Marek's avatar
Andreas Marek committed
158
159
160
 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
161

162
AC_LANG([Fortran])
163
m4_include([m4/ax_prog_fc_mpi.m4])
164

165
166
167
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
168
		 if test x"${have_mpi}" = xno; then
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  		  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}])
183
  if test x"${enable_openmp}" = x"yes"; then
184
185
186
187
188
     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"])
189
  if test x"${with_openmp}" = x"yes"; then
190
	AC_DEFINE([WITH_OPENMP], [1], [use OpenMP threading])
191

192
        AX_ELPA_OPENMP
193
194
195
196
197

        # Append to flags as this influences which
        # kind of MPI library has to be used (thread-safe or not)
        FCFLAGS="$OPENMP_FCFLAGS $FCFLAGS"
	LDFLAGS="$OPENMP_CXXFLAGS $LDFLAGS"
198
199
200
201
202
  fi

save_FCFLAGS=$FCFLAGS
save_LDFLAGS=$LDFLAGS

203
204
205
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])

Lorenz Huedepohl's avatar
Lorenz Huedepohl committed
206
207
FCFLAGS="$FCFLAGS $SCALAPACK_FCFLAGS $OPENMP_FCFLAGS"
LDFLAGS="$LDFLAGS $SCALAPACK_LDFLAGS $OPENMP_FCFLAGS"
208

209
dnl check whether fortran error_unit is defined
210
AC_MSG_CHECKING([whether Fortran module iso_fortran_env is available])
211
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
212
213
214
215
216
217
218
219
220
221
  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]
)
222
AC_MSG_RESULT([${can_use_iso_fortran_env}])
223

224
225
226
227
dnl check whether one can link with specified MKL (desired method)
AC_MSG_CHECKING([whether we can compile a Fortran program using MKL])


228
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
229
  program test_mkl
230
    use mkl_service
231
232
233
234
235
236
237
238
239
240
241
242
    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])
243
  AC_LINK_IFELSE([AC_LANG_SOURCE([
244
    program test_mkl
245
      use mkl_service
246
247
248
249
250
      character*198 :: string
      call mkl_get_version_string(string)
      write(*,'(a)') string
    end program
  ])],
Andreas Marek's avatar
Andreas Marek committed
251
252
    [have_mkl=yes],
    [have_mkl=no]
253
  )
Andreas Marek's avatar
Andreas Marek committed
254
  AC_MSG_RESULT([${have_mkl}])
255
256
257
fi

dnl if not mkl, check all the necessary individually
258
if test x"${have_mkl}" = x"yes" ; then
259
260
261
262
  WITH_MKL=1
else

  dnl first check blas
Andreas Marek's avatar
Andreas Marek committed
263
264
265
  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}])
266

267
  if test x"${have_blas}" = x"no" ; then
Andreas Marek's avatar
Andreas Marek committed
268
    AC_MSG_ERROR([could not link with blas: specify path]) 
269
  fi
270
  dnl now lapack
Andreas Marek's avatar
Andreas Marek committed
271
272
273
  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}])
274

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

279
280
281
  dnl test whether scalapack already contains blacs
  scalapack_libs="mpiscalapack scalapack"
  AC_SEARCH_LIBS([blacs_gridinit], [$scalapack_libs],[have_blacs=yes],[have_blacs=no])
282

283
284
285
286
287
  dnl Test for stand-alone blacs
  if test x"${have_blacs}" = x"no"; then
    AC_SEARCH_LIBS([bi_f77_init],[mpiblacsF77init],[],[],[-lmpiblacs])
    AC_SEARCH_LIBS([blacs_gridinit],[mpiblacs blacs],[have_blacs=yes],[have_blacs=no])
  fi
Andreas Marek's avatar
Andreas Marek committed
288

289
  if test x"${have_blacs}" = x"no"; then
290
    AC_MSG_ERROR([No usable BLACS or ScaLAPACK 2 found. If installed in a non-standard place, please specify suitable LDFLAGS and FCFLAGS as arguments to configure])
Andreas Marek's avatar
Andreas Marek committed
291
  fi
292

293
  AC_SEARCH_LIBS([pdtran],[mpiscalapack scalapack],[have_scalapack=yes],[have_scalapack=no])
Andreas Marek's avatar
Andreas Marek committed
294

295
  if test x"${have_scalapack}" = x"no" ; then
296
    AC_MSG_ERROR([could not link with scalapack: specify path])
297
298
299
300
  fi

  dnl check whether we can link alltogehter
  AC_MSG_CHECKING([whether we can link a Fortran program with all blacs/scalapack])
301
  AC_LINK_IFELSE([AC_LANG_SOURCE([
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
    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}])

318
   if test x"${can_link_with_blacs_scalapack}" = x"yes" ; then
319
320
     WITH_BLACS=1
   else
321
   AC_MSG_ERROR([We can neither link with MKL or another Scalpack. Please specify SCALAPACK_LDFLAGS and SCALAPACK_FCFLAGS!])
322
323
324
   fi
fi

325
326
327
328
dnl important: reset them again!
FCFLAGS=$save_FCFLAGS
LDFLAGS=$save_LDFLAGS

Andreas Marek's avatar
Andreas Marek committed
329
330
331
332
dnl check for intrinsic fortran function of 2003 standard
AC_MSG_CHECKING([whether we can use the intrinsic Fortran function "get_environment_variable"])


333
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
  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])


355
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
356
357
358
  program test_bgp
    complex*16 :: y3,q3,h2
    y3 = fxcpmadd(y3,q3,h2)
359

Andreas Marek's avatar
Andreas Marek committed
360
361
362
363
364
365
366
  end program
])],
  [can_compile_bgp=yes],
  [can_compile_bgp=no]
)
AC_MSG_RESULT([${can_compile_bgp}])

367
if test x"${can_compile_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
368
369
370
371
372
373
374
  install_real_bgp=yes
  install_complex_bgp=yes
fi

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

375
AC_LINK_IFELSE([AC_LANG_SOURCE([
Andreas Marek's avatar
Andreas Marek committed
376
377
378
379
  program test_bgq
    VECTOR(REAL(8))::QPX_x1
    real*8 :: hh(10,2))
    QPX_h2 = VEC_SPLATS(hh(2,2))
380

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

388
if test x"${can_compile_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
389
390
391
392
393
394
  install_real_bgq=yes
  install_complex_bgq=yes
fi


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


400
401
dnl macro for testing whether the user wanted to compile only with one
dnl specific real kernel
Andreas Marek's avatar
Andreas Marek committed
402

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

405
406
407
408
409
410
411
412
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
413
414
415

    dnl make sure that all the other kernels are unset
    install_real_generic=no
416
    install_real_generic_simple=no
Andreas Marek's avatar
Andreas Marek committed
417
    install_real_sse=no
418
    install_real_bgp=no
Andreas Marek's avatar
Andreas Marek committed
419
420
421
422
423
    install_real_bgq=no
    install_real_avx_block2=no
    install_real_avx_block4=no
    install_real_avx_block6=no
    use_specific_real_kernel=yes
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
    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
459
460


461
462
463
464
465
466
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
467

468
469
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
470

471
472
dnl sse kernel
DEFINE_OPTION_REAL_KERNEL([only-real-sse-kernel],[sse-kernel],[install_real_sse])
Andreas Marek's avatar
Andreas Marek committed
473
474

dnl bgp kernel
475
DEFINE_OPTION_REAL_KERNEL([only-real-bgp-kernel],[bgp-kernel],[install_real_bgp])
Andreas Marek's avatar
Andreas Marek committed
476
477

dnl bgq kernel
478
DEFINE_OPTION_REAL_KERNEL([only-real-bgq-kernel],[bgq-kernel],[install_real_bgq])
Andreas Marek's avatar
Andreas Marek committed
479
480

dnl real-avx-block2 kernel
481
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block2-kernel],[real-avx-block2-kernel],[install_real_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
482
483

dnl real-avx-block4 kernel
484
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block4-kernel],[real-avx-block4-kernel],[install_real_avx_block4])
Andreas Marek's avatar
Andreas Marek committed
485
486

dnl real-avx-block6 kernel
487
DEFINE_OPTION_REAL_KERNEL([only-real-avx-block6-kernel],[real-avx-block6-kernel],[install_real_avx_block6])
Andreas Marek's avatar
Andreas Marek committed
488
489
490
491
492
493

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

494
495
496
497
498
499
500
501
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
502
503
504
505
506
507
508
509
510
511
512

    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
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
    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
541
542


543
544
dnl generic kernel
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-generic-kernel],[generic-kernel],[install_complex_generic])
Andreas Marek's avatar
Andreas Marek committed
545
546


547
548
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
549
550

dnl sse kernel
551
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-sse-kernel],[sse-kernel],[install_complex_sse])
Andreas Marek's avatar
Andreas Marek committed
552
553
554


dnl complex-bqp kernel
555
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-bgp-kernel],[bgp-kernel],[install_complex_bgp])
Andreas Marek's avatar
Andreas Marek committed
556
557

dnl complex-bqq kernel
558
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-bgq-kernel],[bgq-kernel],[install_complex_bgq])
Andreas Marek's avatar
Andreas Marek committed
559
560

dnl complex-avx-block1 kernel
561
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-avx-block1-kernel],[complex-avx-block1-kernel],[install_complex_avx_block1])
Andreas Marek's avatar
Andreas Marek committed
562
563

dnl complex-avx-block2 kernel
564
DEFINE_OPTION_COMPLEX_KERNEL([only-complex-avx-block2-kernel],[complex-avx-block2-kernel],[install_complex_avx_block2])
Andreas Marek's avatar
Andreas Marek committed
565
566


567
dnl set the conditionals according to the previous tests
568
if test x"${can_use_iso_fortran_env}" = x"yes" ; then
569
570
571
 AC_DEFINE([HAVE_ISO_FORTRAN_ENV],[1],[can use module iso_fortran_env])
fi

572

Andreas Marek's avatar
Andreas Marek committed
573
AM_CONDITIONAL([WITH_REAL_GENERIC_KERNEL],[test x"$install_real_generic" = x"yes"])
574
if test x"${install_real_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
575
576
577
578
 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"])
579
if test x"${install_complex_generic}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
580
581
582
583
 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"])
584
if test x"${install_real_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
585
586
587
588
 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"])
589
if test x"${install_complex_generic_simple}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
590
591
592
593
 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"])
594
if test x"${install_real_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
595
596
597
598
 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"])
599
if test x"${install_complex_sse}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
600
601
602
603
 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"])
604
if test x"${install_real_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
605
606
607
608
 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"])
609
if test x"${install_real_avx_block4}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
610
611
612
613
 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"])
614
if test x"${install_real_avx_block6}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
615
616
617
618
 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"])
619
if test x"${install_complex_avx_block1}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
620
621
622
623
 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"])
624
if test x"${install_complex_avx_block2}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
625
626
627
628
 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"])
629
if test x"${install_real_bgp}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
630
631
632
633
 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"])
634
if test x"${install_real_bgq}" = x"yes" ; then
Andreas Marek's avatar
Andreas Marek committed
635
636
637
 AC_DEFINE([WITH_REAL_BGQ_KERNEL],[1],[can use real BGQ kernel])
fi

638
639
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
640
641
fi

642
643
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
644
645
fi

646
647
648
649
650
651
652
653
654
LT_INIT

AC_SUBST([WITH_MKL])
AC_SUBST([WITH_BLACS])
AC_SUBST([with_amd_bulldozer_kernel])
AC_SUBST([FC_MODINC])
AC_SUBST([FC_MODOUT])
#AC_SUBST(OPT_FCFLAGS)

655
rm -rf modules/ .fortran_dependencies/
656
657
658
659
660
661
662
663
664
665
666
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])

667
668
669
670
671
672
673
674
675

# 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')
676
677
678
679
680
681
682

if test x"${with_openmp}" = x"yes"; then
	MT="_mt"
else
	MT=""
fi
AC_SUBST([PKG_CONFIG_FILE],[elpa${MT}-${PACKAGE_VERSION}.pc])
683

684
685
AC_CONFIG_FILES([
  Makefile
686
  ${PKG_CONFIG_FILE}:elpa.pc.in
687
688
689
])
AC_OUTPUT
grep "^#define" config.h > config-f90.h