1 arta 1.1 # Define WORKINGDIR so that we don't get that '/auto/home1' crud
2 WORKINGDIR = $(PWD)
3 VPATH = $(SRCDIR)
4
5 ###########################################
6 # #
7 # COMPILER SELECTION #
8 # #
9 ###########################################
10 COMPILER = icc
11 FCOMPILER = ifort
12
13 # Can override compiler selection
14 ifneq ($(DRMS_COMPILER),)
15 COMPILER = $(DRMS_COMPILER)
16 endif
17
18 ifneq ($(DRMS_FCOMPILER),)
19 FCOMPILER = $(DRMS_FCOMPILER)
20 endif
21
22 arta 1.1 ###########################################
23 # #
24 # DEBUGGING #
25 # #
26 ###########################################
27 DEBUG = 0
28
29 ifdef DRMS_DEBUG
30 ifeq ($(DRMS_DEBUG), 1)
31 DEBUG = 1
32 else
33 DEBUG = 0
34 endif
35 endif
36
37 ###########################################
38 # #
39 # DRMS LIBRARIES #
40 # #
41 ###########################################
42 DRMS_INCS = /home/jsoc/cvs/Development/JSOC/base/include
43 arta 1.1
44 ifeq ($(MACHINE), linux_x86_64)
45 DRMS_LIBS = -L/home/jsoc/cvs/Development/JSOC/lib/linux_x86_64 -ldrms
46 endif
47
48 ifeq ($(MACHINE), linux_avx)
49 DRMS_LIBS = -L/home/jsoc/cvs/Development/JSOC/lib/linux_avx -ldrms
50 endif
51
52 ###########################################
53 # #
54 # OTHER LIBRARIES #
55 # #
56 ###########################################
57 EXELIBS =
58
59 ###########################################
60 # #
61 # THIRD-PARTY LIBRARIES #
62 # #
63 ###########################################
64 arta 1.1 ifeq ($(MACHINE), linux_x86_64)
65 CFITSIO_INCS = /home/jsoc/include
66 CFITSIO_LIBS = /home/jsoc/lib/linux-x86_64
67 MPI_INCS = /home/jsoc/mpich2/include
68 MPI_LIBS = /home/jsoc/mpich2/lib
69 MPI_PATH = /home/jsoc/mpich2/bin
70 POSTGRES_INCS = /usr/include
71 POSTGRES_LIBS = /usr/lib64
72 FFTW_INCS = /home/jsoc/include
73 FFTW_LIBS = /home/jsoc/lib/linux-x86_64
74 GSL_INCS = /home/jsoc/include
75 GSL_LIBS = /home/jsoc/lib/linux-x86_64
76 endif
77
78 ifeq ($(MACHINE), linux_avx)
79 CFITSIO_INCS = /home/jsoc/avx/include
80 CFITSIO_LIBS = /home/jsoc/avx/lib
81 MPI_INCS = /home/jsoc/avx/include
82 MPI_LIBS = /home/jsoc/avx/lib
83 MPI_PATH = /home/jsoc/avx/bin
84 POSTGRES_INCS = /usr/include
85 arta 1.1 POSTGRES_LIBS = /usr/lib64
86 FFTW_INCS = /home/jsoc/avx/include
87 FFTW_LIBS = /home/jsoc/avx/lib
88 GSL_LIBS = /home/jsoc/avx/lib
89 GSL_INCS = /home/jsoc/avx/include
90 endif
91
92 # PostgreSQL
93 PGH = -I$(POSTGRES_INCS)
94 PGL = -L$(POSTGRES_LIBS)
95 PGLIBS = $(PGL) -lpq
96
97 # CFITSIO
98 CFITSIOH = -I$(CFITSIO_INCS)
99 CFITSIOL = -L$(CFITSIO_LIBS)
100 CFITSIOLIBS = $(CFITSIOL) -lcfitsio
101
102 # GSL
103 GSLH = -I$(GSL_INCS)
104 GSLL = -L$(GSL_LIBS)
105 GSLLIBS = $(GSLL) -lgsl
106 arta 1.1
107 # FFTW
108 FFTWH = -I$(FFTW_INCS)
109 FFTWL = -L$(FFTW_LIBS)
110 FFTW3LIBS = $(FFTWL) -lfftw3
111 FFTW3FLIBS = $(FFTWL) -lfftw3f
112
113 ###########################################
114 # #
115 # WARNINGS #
116 # #
117 ###########################################
118 GCC_WARN = -Wno-comment
119 ICC_WARNTOERR = -we266
120 FCOMPILER_WARN = -vec-report0
121
122 ###########################################
123 # #
124 # GLOBAL LINK FLAGS #
125 # #
126 ###########################################
127 arta 1.1 # Libraries from src/util linked with all programs.
128 ifneq ($(COMPILER), icc)
129 SYSLIBS = -lz -ldl -lpthread -lm -lutil
130 else
131 SYSLIBS = -lz -ldl -lpthread -lutil
132 endif
133
134 LL_ALL = $(SYSLIBS)
135 GCC_LF_ALL =
136 ICC_LF_ALL = -diag-disable 10237 -openmp -static-intel -Wl,-export-dynamic
137
138 # Fortran global LINK flags
139 ifeq ($(FCOMPILER), ifort)
140 F_LF_ALL = -diag-disable 10237 -nofor-main -openmp -static-intel -Wl,-export-dynamic
141 endif
142
143 ###########################################
144 # #
145 # GLOBAL COMPILE FLAGS #
146 # #
147 ###########################################
148 arta 1.1 GCC_CF_GCCCOMP = -DGCCCOMP
149 ICC_CF_ICCCOMP = -DICCCOMP -openmp
150 GLOBALSW =
151
152 ifeq ($(DEBUG), 0)
153 GCC_CF_ALL = -I$(DRMS_INCS) -std=gnu99 -O2 $(GCC_WARN) $(GCC_CF_GCCCOMP) $(GLOBALSW) -DNDEBUG
154
155 ifeq ($(MACHINE), linux_x86_64)
156 ICC_CF_ALL = -I$(DRMS_INCS) -std=c99 -D_GNU_SOURCE $(ICC_WARN) $(ICC_CF_ICCCOMP) $(GLOBALSW) -DNDEBUG
157 GCC_CF_ALL = -I$(DRMS_INCS) -std=gnu99 -O2 -march=opteron $(GCC_WARN) $(GCC_CF_GCCCOMP) $(GLOBALSW)
158 endif
159
160 ifeq ($(MACHINE), linux_avx)
161 ICC_CF_ALL = -xavx -I$(DRMS_INCS) -std=c99 -D_GNU_SOURCE $(ICC_WARN) $(ICC_CF_ICCCOMP) $(GLOBALSW) -DNDEBUG
162 endif
163 else
164 # -g tells the icc and gcc compilers to generate full debugging information
165 GCC_CF_ALL = -I$(DRMS_INCS) -std=gnu99 -g $(GCC_WARN) $(GCC_CF_GCCCOMP) $(GLOBALSW)
166 ICC_CF_ALL = -I$(DRMS_INCS) -std=c99 -D_GNU_SOURCE -g $(ICC_WARN) $(ICC_CF_ICCCOMP) $(GLOBALSW)
167 endif
168
169 arta 1.1 # Fortran global COMPILE flags
170 ifeq ($(MACHINE), linux_avx)
171 ifeq ($(FCOMPILER), ifort)
172 F_CF_ALL := -xavx -openmp
173 endif
174 endif
175
176 ifeq ($(MACHINE), linux_x86_64)
177 ifeq ($(FCOMPILER), ifort)
178 F_CF_ALL := -openmp
179 endif
180 endif
181
182 # Other compiler-specific Fortran COMPILE flags
183 ifeq ($(FCOMPILER), ifort)
184 FCFLAGS_INIT := -ftrapuv
185 else
186 # must be gfortran
187 FCFLAGS_INIT :=
188 endif
189
190 arta 1.1 ifeq ($(DEBUG), 0)
191 # -xW optimizes ifort compilation for Pentium 4
192 # -ftrapuv initializes stack local variables to an unusual value to aid error detection.
193 F_CF_ALL := $(F_CF_ALL) $(FCOMPILER_WARN)
194 else
195 F_CF_ALL := $(F_CF_ALL) -g $(FCFLAGS_INIT) $(FCOMPILER_WARN)
196 endif
197
198 ICC_CMPLR = icc
199 GCC_CMPLR = gcc
200
201 GCC_COMP = $(GCC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) -o $@ -c $<
202 ICC_COMP = $(ICC_CMPLR) $(ICC_CF_ALL) $(CF_TGT) -o $@ -c $<
203
204 GCC_LINK = $(GCC_CMPLR) $(GCC_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
205 ICC_LINK = $(ICC_CMPLR) $(ICC_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
206
207 GCC_COMPLINK = $(GCC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) $(GCC_LF_ALL) $(LF_TGT) -o $@ $< $(LL_TGT) $(LL_ALL)
208 ICC_COMPLINK = $(ICC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) $(ICC_LF_ALL) $(LF_TGT) -o $@ $< $(LL_TGT) $(LL_ALL)
209
210 ifneq ($(COMPILER), icc)
211 arta 1.1 COMP = $(GCC_COMP)
212 LINK = $(GCC_LINK)
213 COMPLINK = $(GCC_COMPLINK)
214 else
215 COMP = $(ICC_COMP)
216 LINK = $(ICC_LINK)
217 COMPLINK = $(ICC_COMPLINK)
218 endif
219
220 FCOMP = $(FCOMPILER) $(F_CF_ALL) $(FF_TGT) -o $@ -c $<
221 FLINK = $(FCOMPILER) $(F_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
222
223 ###########################################
224 # #
225 # RECIPES #
226 # #
227 ###########################################
228 %.o: %.f
229 $(FCOMP)
230
231 %.o: %.f90
232 arta 1.1 $(FCOMP)
233
234 %.o: %.c
235 $(COMP)
236
237 $(CEXE): %: %.o $(EXELIBS)
238 $(LINK)
239
240 $(FEXE): %: %.o
241 $(FLINK)
242
243 $(MODEXE): LL_TGT := $(LL_TGT) $(DRMS_LIBS) $(PGLIBS) $(CFITSIOLIBS)
244 $(MODEXE): %: %.o $(BLAH)
245 $(LINK)
246
247 # MODEXE_USEF contains all C direct-connect modules that use third-party Fortran libraries.
248 $(MODEXE_USEF): LL_TGT := $(LL_TGT) $(DRMS_LIBS) $(PGLIBS) $(CFITSIOLIBS)
249 $(MODEXE_USEF): %: %.o $(BLAH)
250 $(FLINK)
251
252 .PHONY: clean
253 arta 1.1 clean:
254 rm -f $(CLEAN)
|