1include ../../make.inc
2
3# Stripped version of F90FLAGS to remove GPU details added explicitly below.
4F90FLAGSS := $(filter-out $(CUDA_F90FLAGS),$(F90FLAGS))
5
6FLAGS = -O3 -pgf90libs -Mcuda=cc$(GPU_ARCH),cuda$(CUDA_RUNTIME),ptxinfo $(F90FLAGSS)
7FLAGS2 = -O3 -pgf90libs -Mcuda=cc$(GPU_ARCH),cuda$(CUDA_RUNTIME),ptxinfo,maxregcount:64 $(F90FLAGSS)
8
9# For performance reasons, cc of FLAGS3 must be <= 60
10define MIN
11$(firstword $(sort ${1} ${2}))
12endef
13FLAGS3 = -O3 -pgf90libs -Mcuda=cc$(call MIN,${GPU_ARCH},60),cuda$(CUDA_RUNTIME),ptxinfo,nordc,maxregcount:255  $(F90FLAGSS)
14
15# Uncomment to enable NVTX markers
16#OPTFLAGS = -DUSE_NVTX
17
18all: lib_eigsolve.a
19
20OBJS = cusolverDn_m.o eigsolve_vars.o toolbox.o zhegst_gpu.o zhemv_gpu.o zhetd2_gpu.o zhetrd_gpu.o zheevd_gpu.o zhegvdx_gpu.o \
21       dsygst_gpu.o dsymv_gpu.o dsytd2_gpu.o dsytrd_gpu.o dsyevd_gpu.o dsygvdx_gpu.o
22
23zhetd2_gpu.o : zhetd2_gpu.F90
24	pgf90 -c ${FLAGS2} ${OPTFLAGS}  $*.F90 -o $*.o
25zhemv_gpu.o : zhemv_gpu.F90
26	pgf90 -c ${FLAGS3} ${OPTFLAGS}  $*.F90 -o $*.o
27dsytd2_gpu.o : dsytd2_gpu.F90
28	pgf90 -c ${FLAGS2} ${OPTFLAGS}  $*.F90 -o $*.o
29dsymv_gpu.o : dsymv_gpu.F90
30	pgf90 -c ${FLAGS3} ${OPTFLAGS}  $*.F90 -o $*.o
31%.o: %.cuf
32	pgf90 -c ${FLAGS} ${OPTFLAGS} $*.cuf -o $*.o
33%.o: %.F90
34	pgf90 -c ${FLAGS} ${OPTFLAGS} $*.F90 -o $*.o
35
36lib_eigsolve.a: $(OBJS)
37	ar -cr lib_eigsolve.a $(OBJS)
38
39clean:
40	rm -f lib_eigsolve.a *.mod *.o
41
42# Dependencies
43dsyevd_gpu.o : dsytrd_gpu.o
44dsyevd_gpu.o : eigsolve_vars.o
45dsyevd_gpu.o : toolbox.o
46dsygst_gpu.o : eigsolve_vars.o
47dsygvdx_gpu.o : dsyevd_gpu.o
48dsygvdx_gpu.o : dsygst_gpu.o
49dsygvdx_gpu.o : eigsolve_vars.o
50dsygvdx_gpu.o : toolbox.o
51dsytrd_gpu.o : dsymv_gpu.o
52dsytrd_gpu.o : dsytd2_gpu.o
53dsytrd_gpu.o : eigsolve_vars.o
54eigsolve_vars.o : cusolverDn_m.o
55zheevd_gpu.o : eigsolve_vars.o
56zheevd_gpu.o : toolbox.o
57zheevd_gpu.o : zhetrd_gpu.o
58zhegst_gpu.o : eigsolve_vars.o
59zhegvdx_gpu.o : eigsolve_vars.o
60zhegvdx_gpu.o : toolbox.o
61zhegvdx_gpu.o : zheevd_gpu.o
62zhegvdx_gpu.o : zhegst_gpu.o
63zhetrd_gpu.o : eigsolve_vars.o
64zhetrd_gpu.o : zhemv_gpu.o
65zhetrd_gpu.o : zhetd2_gpu.o
66