ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/make_basic.mk
Revision: 1.20
Committed: Tue May 20 17:19:20 2008 UTC (15 years, 4 months ago) by tplarson
Branch: MAIN
CVS Tags: Ver_4-4, Ver_4-3, NetDRMS_Ver_0-9
Changes since 1.19: +10 -0 lines
Log Message:
ART: Add general make rules to support C modules that require linking with Fortran object files/libraries - use when must link with ifort

File Contents

# User Rev Content
1 arta 1.1 VPATH = $(SRCDIR)
2     STATIC =
3     DBNAME = POSTGRESQL
4    
5 arta 1.7 # USED BY NEITHER linux_x86_64 nor linux_ia32
6 arta 1.1 PGIPATH = /usr/include/pgsql
7    
8 arta 1.7
9 karen 1.18 COMPILER = icc
10 arta 1.1
11     # Check for debug vs. release build - release is default.
12     # To do a debug build, either set the environment variable JSOC_DEBUG to 1, OR
13     # modify the following line so that DEBUG = 1. The environment variable takes precedence.
14 karen 1.18 DEBUG = 0
15 arta 1.1
16     ifdef JSOC_DEBUG
17     ifeq ($(JSOC_DEBUG), 1)
18     DEBUG = 1
19     else
20     DEBUG = 0
21     endif
22     endif
23    
24     # No warnings are displayed, by default, for a release build.
25     WARN = 0
26    
27     # Builder can request warnings via environment variable (setenv JSOC_WARN 1). The
28     # environment variable takes precedence.
29     ifdef JSOC_WARN
30     ifeq ($(JSOC_WARN), 1)
31     WARN = 1
32     else
33     WARN = 0
34     endif
35     endif
36    
37     # Warnings are always displayed for a debug build.
38     ifeq ($(DEBUG), 1)
39     WARN = 1
40     endif
41    
42     _JSOCROOT_ = ..
43    
44     F77 = ifort
45     # if fortran compiler
46     D_GCC_FORT =
47     ifeq ($(F77), ifort)
48     D_GCC_FORT = -DINTEL_FORTRAN
49     endif
50    
51     ifeq ($(JSOC_MACHINE), linux_x86_64)
52     F77 = ifort -mcmodel=medium
53     endif
54    
55     # Path to 3rd-party library headers
56     FMATHLIBSH = -I$(_JSOCROOT_)/lib_third_party/include
57 arta 1.6 CFITSIOH = -I$(_JSOCROOT_)/lib_third_party/include
58 arta 1.16 GSLH = -I$(_JSOCROOT_)/lib_third_party/include
59 arta 1.1
60 arta 1.14 ifeq ($(JSOC_MACHINE), linux_x86_64)
61 arta 1.5 # FMATHLIBS = -lmkl_lapack -lmkl -L$(_JSOCROOT_)/lib_third_party/lib/linux-x86_64/ -lfftw3f -lcfitsio
62 arta 1.13 # Path to 64-bit 3rd-party libraries
63     FMATHLIBSL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_x86_64/
64     CFITSIOL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_x86_64/
65 arta 1.16 GSLL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_x86_64/
66 arta 1.15 ECPGL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_x86_64/
67 arta 1.14 endif
68     ifeq ($(JSOC_MACHINE), linux_ia32)
69 arta 1.5 # FMATHLIBS = -lmkl_lapack -lmkl -L$(_JSOCROOT_)/lib_third_party/lib/linux-ia32/ -lfftw3f -lcfitsio
70 arta 1.13 # Path to 32-bit 3rd-party libraries
71     FMATHLIBSL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_ia32/
72     CFITSIOL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_ia32/
73 arta 1.16 GSLL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_ia32/
74 arta 1.15 ECPGL = -L$(_JSOCROOT_)/lib_third_party/lib/linux_ia32/
75 arta 1.1 endif
76 arta 1.14 ifeq ($(JSOC_MACHINE), mac_osx)
77     # FMATHLIBS = -lmkl_lapack -lmkl -L$(_JSOCROOT_)/lib_third_party/lib/linux-ia32/ -lfftw3f -lcfitsio
78     # Path to 32-bit 3rd-party libraries
79     FMATHLIBSL = -L$(_JSOCROOT_)/lib_third_party/lib/mac_osx/
80     CFITSIOL = -L$(_JSOCROOT_)/lib_third_party/lib/mac_osx/
81 arta 1.16 GSLL = -L$(_JSOCROOT_)/lib_third_party/lib/mac_osx/
82 arta 1.15 ECPGL = -L$(_JSOCROOT_)/lib_third_party/lib/mac_osx/
83     endif
84 arta 1.14
85 arta 1.15 # All 3rd-party math libraries - local rules can define a subset
86     FMATHLIBS = $(FMATHLIBSL) -lfftw3f -lcfitsio
87     CFITSIOLIBS = $(CFITSIOL) -lcfitsio
88 arta 1.16 GSLLIBS = $(GSLL) -lgsl -lgslcblas
89 arta 1.1
90     ### Build flags for all targets
91     #
92     LL_ALL = $(SYSLIBS)
93    
94     GCC_LF_ALL = $(STATIC) -g
95 arta 1.10 ifeq ($(JSOC_MACHINE), linux_ia64)
96     ICC_LF_ALL = $(STATIC)
97     else
98     ICC_LF_ALL = $(STATIC) -xW
99     endif
100 arta 1.1
101     GCC_CF_GCCCOMP = -DGCCCOMP $(D_GCC_FORT)
102     ICC_CF_ICCCOMP = -DICCCOMP $(D_GCC_FORT)
103    
104    
105     # Disable several warnings/remarks when compiling with icc - icc's Wall is a bit picky, it
106     # complains about extern declarations in .c files.
107     # 1418 (remark) - external function definition with no prior declaration
108     # 1419 (warning) - external declaration in primary source file
109     # 310 (remark) - old style function declaration (pre-ANSI)
110     # 981 (remark) - operands are evaluted in unspecified order
111    
112     ifeq ($(WARN), 1)
113     # Show warnings (always true for a debug build).
114     ICC_WARN = -Winline -Wall -wd1418 -wd1419 -wd310 -wd279 -wd981 -Wno-comment
115     GCC_WARN = -Winline -Wall -Wno-comment
116     F77_WARN =
117     else
118     # Don't show warnings.
119     ICC_WARN = -w0 -vec-report0 -Wno-comment
120     GCC_WARN = -Wno-comment
121     F77_WARN = -vec-report0
122     endif
123    
124 arta 1.7 # can't figure out how to get stupid make to do if/else if/else
125 arta 1.1 ifeq ($(DEBUG), 0)
126 arta 1.10 GCC_CF_ALL = -I$(SRCDIR)/base/include -std=gnu99 -O2 $(GCC_WARN) $(GCC_CF_GCCCOMP)
127 rick 1.9 ICC_CF_ALL = -I$(SRCDIR)/base/include -std=c99 -xW $(ICC_WARN) $(ICC_CF_ICCCOMP)
128 arta 1.7
129 arta 1.1 ifeq ($(JSOC_MACHINE), linux_x86_64)
130 arta 1.3 GCC_CF_ALL = -I$(SRCDIR)/base/include -std=gnu99 -O2 -march=opteron $(GCC_WARN) $(GCC_CF_GCCCOMP)
131 arta 1.7 endif
132    
133     ifeq ($(JSOC_MACHINE), linux_ia64)
134 arta 1.8 GCC_CF_ALL = -I$(SRCDIR)/base/include -std=gnu99 -O2 $(GCC_WARN) $(GCC_CF_GCCCOMP)
135 arta 1.7 ICC_CF_ALL = -I$(SRCDIR)/base/include -std=c99 $(ICC_WARN) $(ICC_CF_ICCCOMP)
136     endif
137    
138     ifeq ($(JSOC_MACHINE), linux_ia32)
139 arta 1.3 GCC_CF_ALL = -I$(SRCDIR)/base/include -std=gnu99 -O2 -march=i686 $(GCC_WARN) $(GCC_CF_GCCCOMP)
140 arta 1.1 endif
141    
142     else
143    
144 rick 1.9 GCC_CF_ALL = -I$(SRCDIR)/base/include -std=gnu99 -g $(GCC_WARN) $(GCC_CF_GCCCOMP)
145     ICC_CF_ALL = -I$(SRCDIR)/base/include -std=c99 -g $(ICC_WARN) $(ICC_CF_ICCCOMP)
146 arta 1.1
147     endif
148    
149     # Fortran global LINK flags
150     F_LF_ALL = -nofor_main -no-ipo
151    
152     # Fortran global COMPILE flags
153     ifeq ($(DEBUG), 0)
154     FF_ALL = -xW -ftrapuv $(F77_WARN)
155     else
156     FF_ALL = -ftrapuv $(F77_WARN)
157     endif
158    
159     ### Build tools
160     #
161     # The C compiler named here must output full (header) dependencies in $(@).d.
162     # It may be necessary to create a script similar to ccd-gcc for your compiler.
163     #
164     GCC_CMPLR = $(SRCDIR)/build/ccd-gcc
165     ICC_CMPLR = $(SRCDIR)/build/ccd-icc
166     ARCHIVE = ar crus $@ $^
167    
168     ECPG = ecpg -o $@ -c $<
169 karen 1.17 SWIG = swig -perl5 -o $@ $<
170 arta 1.1
171     GCC_COMP = $(GCC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) -o $@ -c $<
172     ICC_COMP = $(ICC_CMPLR) $(ICC_CF_ALL) $(CF_TGT) -o $@ -c $<
173    
174     GCC_LINK = $(GCC_CMPLR) $(GCC_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
175     ICC_LINK = $(ICC_CMPLR) $(ICC_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
176    
177     GCC_COMPLINK = $(GCC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) $(GCC_LF_ALL) $(LF_TGT) -o $@ $< $(LL_TGT) $(LL_ALL)
178     ICC_COMPLINK = $(ICC_CMPLR) $(GCC_CF_ALL) $(CF_TGT) $(ICC_LF_ALL) $(LF_TGT) -o $@ $< $(LL_TGT) $(LL_ALL)
179    
180     ifneq ($(COMPILER), icc)
181     COMP = $(GCC_COMP)
182     LINK = $(GCC_LINK)
183     COMPLINK = $(GCC_COMPLINK)
184     else
185     COMP = $(ICC_COMP)
186     LINK = $(ICC_LINK)
187     COMPLINK = $(ICC_COMPLINK)
188     endif
189    
190     FCOMP = $(F77) $(FF_ALL) $(FF_TGT) -o $@ -c $<
191     FLINK = $(F77) $(F_LF_ALL) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LL_ALL)
192    
193     SLBIN = ln -sf ../../_$(JSOC_MACHINE)/$@ ../bin/$(JSOC_MACHINE)/
194     SLLIB = ln -sf ../../_$(JSOC_MACHINE)/$@ ../lib/$(JSOC_MACHINE)/
195    
196 arta 1.11 ALL_LIBS_FPIC = $(LIBDRMSCLIENT_FPIC) $(LIBDBCLIENT_FPIC) $(LIBCMDPARAMS_FPIC) $(LIBTHREADUTIL_FPIC) $(LIBRICECOMP_FPIC) $(LIBDSTRUCT_FPIC) $(LIBMISC_FPIC) $(LIBTIMEIO_FPIC) $(LIBFITSRW_FPIC)
197 arta 1.1
198     ### Standard parts
199     #
200     include $(SRCDIR)/Rules.mk
201    
202     # Libraries from src/util linked with all programs.
203 arta 1.12 ifneq ($(COMPILER), icc)
204     SYSLIBS = -lz -ldl -lpthread -lm
205     else
206     SYSLIBS = -lz -ldl -lpthread
207     endif
208 arta 1.19 SRCLIBS = $(LIBTHREADUTIL) $(LIBRICECOMP) $(LIBCMDPARAMS) $(LIBMISC) $(LIBDSTRUCT) $(LIBTIMEIO) $(LIBFITSRW) $(LIBERRLOG)
209     FSRCLIBS = $(LIBTHREADUTIL) $(LIBRICECOMP) $(LIBCMDPARAMSF) $(LIBMISC) $(LIBDSTRUCT) $(LIBTIMEIO) $(LIBFITSRW) $(LIBERRLOG)
210 arta 1.1
211     ########## Libraries to link for server executables, ##############
212     ########## standalone executables and pipeline modules. ##############
213    
214     # SERVERLIBS: Libraries linked with "server" programs that
215     # need direct access to the DRMS databases.
216     SERVERLIBS = $(LIBDRMS) $(LIBDB) $(LIBSUMSAPI) $(SRCLIBS)
217    
218     # EXELIBS: Libraries linked with standalone executables.
219     EXELIBS = $(LIBDRMSCLIENT) $(LIBDBCLIENT) $(SRCLIBS)
220    
221     # MODLIBS: Libraries linked with DRMS modules.
222     MODLIBS = $(LIBJSOC_MAIN) $(SERVERLIBS)
223    
224     # MODLIBS_SOCK: Libraries linked with DRMS modules with socket connection to a drms_server
225     MODLIBS_SOCK = $(LIBJSOC_MAIN_SOCK) $(LIBDRMSCLIENT) $(LIBDBCLIENT) $(SRCLIBS)
226    
227     # FMODLIBS: Libraries linked with DRMS Fortran modules
228     FMODLIBS_SOCK = $(LIBJSOC_MAIN_SOCK_F) $(LIBINTHANDLESF) $(LIBDRMSCLIENT) $(LIBDBCLIENT) $(FSRCLIBS)
229    
230     MATHLIBS = $(LIBLSQR) $(LIBBLAS) $(LIBLAPACK)
231    
232     # Make rules that apply to all projects outside of the base DRMS/SUMS system
233 arta 1.3 -include $(SRCDIR)/proj/make_basic.mk
234 arta 1.1
235     # Make rules that apply to all projects, inside and outside of the base DRMS/SUMS system
236     $(CEXE): %: %.o $(EXELIBS)
237     $(LINK)
238     $(SLBIN)
239    
240     $(FEXE): %: %.o $(MATHLIBS)
241     $(FLINK)
242     $(SLBIN)
243    
244 arta 1.11 $(SERVEREXE): LL_TGT := $(LL_TGT) -lpq $(CFITSIOLIBS)
245 arta 1.1 $(SERVEREXE): %: %.o $(SERVERLIBS)
246     $(LINK)
247     $(SLBIN)
248    
249 arta 1.11 $(MODEXE): LL_TGT := $(LL_TGT) -lpq $(CFITSIOLIBS)
250 arta 1.1 $(MODEXE): %: %.o $(MODLIBS)
251     $(LINK)
252     $(SLBIN)
253    
254 arta 1.11 $(MODEXE_SOCK): LL_TGT := $(LL_TGT) $(CFITSIOLIBS)
255 arta 1.1 $(MODEXE_SOCK): %_sock: %.o $(MODLIBS_SOCK)
256     $(LINK)
257     $(SLBIN)
258    
259 arta 1.11 $(FMODEXE): LL_TGT := $(LL_TGT) $(CFITSIOLIBS)
260 arta 1.1 $(FMODEXE): %_sock: %.o $(FMODLIBS_SOCK)
261     $(FLINK)
262     $(SLBIN)
263 tplarson 1.20
264     $(MODEXE_USEF): LL_TGT := $(LL_TGT) -lpq $(CFITSIOLIBS)
265     $(MODEXE_USEF): %: %.o $(MODLIBS)
266     $(FLINK)
267     $(SLBIN)
268    
269     $(MODEXE_USEF_SOCK): LL_TGT := $(LL_TGT) $(CFITSIOLIBS)
270     $(MODEXE_USEF_SOCK): %_sock: %.o $(MODLIBS_SOCK)
271     $(FLINK)
272     $(SLBIN)