1 | # Emacs should use -*- Makefile -*- mode.
|
---|
2 |
|
---|
3 | #################################################
|
---|
4 | #
|
---|
5 | # the user can specify the following targets
|
---|
6 | #
|
---|
7 | # install_inc::
|
---|
8 | # installs the include files
|
---|
9 | #
|
---|
10 | # default::
|
---|
11 | #
|
---|
12 | # the user must define the following:
|
---|
13 | #
|
---|
14 | #
|
---|
15 | # TARGET_TO_MAKE
|
---|
16 | #
|
---|
17 | # BIN_OR_LIB = BIN or LIB
|
---|
18 | #
|
---|
19 | # TRUESRC
|
---|
20 | #
|
---|
21 | # DEPENDINCLUDE
|
---|
22 | #
|
---|
23 | # TRUEINCLUDES
|
---|
24 | #
|
---|
25 | # OTHERFILES
|
---|
26 | #
|
---|
27 | # LIBOBJ
|
---|
28 | # BINOBJ
|
---|
29 | #
|
---|
30 | # LIBS
|
---|
31 | #
|
---|
32 | # SABER_FILES
|
---|
33 | #
|
---|
34 | #################################################
|
---|
35 |
|
---|
36 | .PHONY: default install install_devel install_inc install_target clean
|
---|
37 |
|
---|
38 | default::
|
---|
39 |
|
---|
40 | install::
|
---|
41 |
|
---|
42 | install_devel::
|
---|
43 |
|
---|
44 | .PHONY: testbuild testrun
|
---|
45 |
|
---|
46 | testbuild: $(TESTPROGS)
|
---|
47 |
|
---|
48 | testrun: $(TESTPROGS:%=%.testrun)
|
---|
49 |
|
---|
50 | # The target specific variable can be set to control testrun:
|
---|
51 | # To skip testrun:
|
---|
52 | # %.testrun: DO_TESTRUN=no
|
---|
53 | # To give arguments to the command
|
---|
54 | # %.testrun: TESTRUN_ARGS=arglist
|
---|
55 | %.testrun: %
|
---|
56 | if test "$(DO_TESTRUN)" != no; then \
|
---|
57 | echo ----------- Running $< $(TESTRUN_ARGS) -----------; \
|
---|
58 | if test -f $(SRCDIR)/$<.out; then \
|
---|
59 | ./$< $(TESTRUN_ARGS) > $<.out.testrun 2>&1 || exit 1; \
|
---|
60 | diff -u $<.out.testrun $(SRCDIR)/$<.out || exit 1; \
|
---|
61 | else \
|
---|
62 | ./$< $(TESTRUN_ARGS) || exit 1; \
|
---|
63 | fi \
|
---|
64 | else \
|
---|
65 | echo ----------- Skipping run of $< -----------; \
|
---|
66 | fi
|
---|
67 |
|
---|
68 | ifeq ($(BIN_OR_LIB),LIB)
|
---|
69 |
|
---|
70 | ifeq ($(TMPLINLIB),yes)
|
---|
71 |
|
---|
72 | $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ)
|
---|
73 | /bin/rm -f $@
|
---|
74 | $(AR) $(ARFLAGS) $@ $^ $(wildcard $(TMPLREPO)/*.o)
|
---|
75 | $(RANLIB) $@
|
---|
76 |
|
---|
77 | $(TOPDIR)/lib/$(TARGET_TO_MAKE).la: $(LIBOBJ)
|
---|
78 | $(LTLINK) $(CXX) -o $@ $^ $(wildcard $(TMPLREPO)/*.o) $(LTLINKLIBOPTS)
|
---|
79 |
|
---|
80 | else
|
---|
81 |
|
---|
82 | ifeq ($(TMPLINST),yes)
|
---|
83 |
|
---|
84 | SCLIBS := $(shell $(LISTLIBS) $(INCLUDE) $(SRCDIR)/LIBS.h)
|
---|
85 | SCLIBSOTHER := $(SCLIBS:$(TARGET_TO_MAKE).$(LIBSUF)=)
|
---|
86 | SCLIBSEXIST := $(wildcard $(SCLIBSOTHER:%=$(TOPDIR)/lib/%))
|
---|
87 |
|
---|
88 | $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ) $(SCLIBSEXIST)
|
---|
89 | @echo "Doing template instantiations (expect errors)."
|
---|
90 | -$(LD) $(LDFLAGS) -o a.out.tmplinst $^ $(SYSLIBS) 2> /dev/null
|
---|
91 | /bin/rm -f a.out.tmplinst
|
---|
92 | @echo "Finished template instantiations (errors were expected)."
|
---|
93 | /bin/rm -f $@
|
---|
94 | $(AR) $(ARFLAGS) $@ $(LIBOBJ)
|
---|
95 | $(RANLIB) $@
|
---|
96 |
|
---|
97 | else
|
---|
98 |
|
---|
99 | $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ)
|
---|
100 | /bin/rm -f $@
|
---|
101 | $(AR) $(ARFLAGS) $@ $(LIBOBJ)
|
---|
102 | $(RANLIB) $@
|
---|
103 |
|
---|
104 | endif
|
---|
105 |
|
---|
106 | $(TOPDIR)/lib/$(TARGET_TO_MAKE).la: $(LIBOBJ)
|
---|
107 | $(LTLINK) $(CXX) -o $@ $^ $(LTLINKLIBOPTS)
|
---|
108 |
|
---|
109 | endif
|
---|
110 |
|
---|
111 | default:: $(TOPDIR)/lib/$(TARGET_TO_MAKE).$(LIBSUF)
|
---|
112 |
|
---|
113 | ifneq ($(ENABLESHARED),yes)
|
---|
114 |
|
---|
115 | install_devel:: install_inc install_target
|
---|
116 |
|
---|
117 | install::
|
---|
118 |
|
---|
119 | endif
|
---|
120 |
|
---|
121 | ifeq ($(ENABLESHARED),yes)
|
---|
122 |
|
---|
123 | install_devel:: install_inc
|
---|
124 |
|
---|
125 | install:: install_target
|
---|
126 |
|
---|
127 | endif
|
---|
128 |
|
---|
129 | install_inc::
|
---|
130 | $(INSTALL) $(INSTALLDIROPT) $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%)
|
---|
131 | -$(INSTALL) $(INSTALLLIBOPT) $(SRCDIR)/*.h $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%)
|
---|
132 | -$(INSTALL) $(INSTALLLIBOPT) *.h $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%)
|
---|
133 |
|
---|
134 | install_target:: $(TOPDIR)/lib/$(TARGET_TO_MAKE).$(LIBSUF)
|
---|
135 | $(INSTALL) $(INSTALLDIROPT) $(installroot)$(libdir)
|
---|
136 | $(LTINST) $(INSTALL) $(INSTALLLIBOPT) $< $(installroot)$(libdir)
|
---|
137 | endif
|
---|
138 |
|
---|
139 | ifeq ($(BIN_OR_LIB),BIN)
|
---|
140 |
|
---|
141 | $(TARGET_TO_MAKE): $(BINOBJ) $(LIBS)
|
---|
142 | $(LD) $(LDFLAGS) $^ -o $(@F) $(SYSLIBS)
|
---|
143 |
|
---|
144 | install_devel::
|
---|
145 |
|
---|
146 | install:: install_target
|
---|
147 |
|
---|
148 | install_target:: $(TARGET_TO_MAKE)
|
---|
149 | $(INSTALL) $(INSTALLDIROPT) $(installroot)$(bindir)
|
---|
150 | $(LTINST) $(INSTALL) $(INSTALLBINOPT) $(TARGET_TO_MAKE) $(installroot)$(bindir)
|
---|
151 |
|
---|
152 | endif
|
---|
153 |
|
---|
154 | %.$(OBJSUF): %.c
|
---|
155 | $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
156 |
|
---|
157 | %.lo: %.c
|
---|
158 | $(LTCOMP) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
159 |
|
---|
160 | ifneq ($(OBJSUF),lo)
|
---|
161 |
|
---|
162 | %.$(OBJSUF): %.f
|
---|
163 | $(FC) $(FFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
164 |
|
---|
165 | %.$(OBJSUF): %.C
|
---|
166 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
167 |
|
---|
168 | %.$(OBJSUF): %.cc
|
---|
169 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
170 |
|
---|
171 | endif
|
---|
172 |
|
---|
173 | %.lo: %.C
|
---|
174 | $(LTCOMP) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
175 |
|
---|
176 | %.lo: %.cc
|
---|
177 | $(LTCOMP) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
178 |
|
---|
179 | %.lo: %.f
|
---|
180 | $(LTCOMP) $(FC) $(FFLAGS) -c $< $(OUTPUT_OPTION)
|
---|
181 |
|
---|
182 | #
|
---|
183 | # cleans
|
---|
184 | #
|
---|
185 | clean:: oclean targetclean dclean miscclean
|
---|
186 |
|
---|
187 | distclean:: oclean targetclean dclean genclean miscclean
|
---|
188 |
|
---|
189 | miscclean::
|
---|
190 | -rm -f *~
|
---|
191 |
|
---|
192 | oclean::
|
---|
193 | -rm -rf *.o $(TMPLREPO) cxx_tmpl_repo ti_files *.lo
|
---|
194 | -rm -rf *.rpo
|
---|
195 | -rm -rf .libs
|
---|
196 |
|
---|
197 | dclean::
|
---|
198 | -rm -f *.d
|
---|
199 |
|
---|
200 | genclean::
|
---|
201 | ifdef GENINC
|
---|
202 | -rm -f $(GENINC)
|
---|
203 | endif
|
---|
204 | ifdef GENSRC
|
---|
205 | -rm -f $(GENSRC)
|
---|
206 | endif
|
---|
207 |
|
---|
208 | targetclean::
|
---|
209 | ifdef TARGET_TO_MAKE
|
---|
210 | ifeq ($(BIN_OR_LIB),BIN)
|
---|
211 | -rm -f $(TARGET_TO_MAKE)
|
---|
212 | endif
|
---|
213 | ifeq ($(BIN_OR_LIB),LIB)
|
---|
214 | -rm -f $(TARGET_TO_MAKE).a
|
---|
215 | endif
|
---|
216 | endif
|
---|
217 |
|
---|
218 | targetclean::
|
---|
219 | -rm -f $(TESTPROGS) $(TESTPROGS:%=%.out.testrun)
|
---|
220 |
|
---|
221 | testclean::
|
---|
222 | /bin/rm -f $(TESTPROGS) $(TESTPROGS:%=%.out.testrun)
|
---|
223 |
|
---|
224 | #
|
---|
225 | # dependencies
|
---|
226 | #
|
---|
227 |
|
---|
228 | ifneq ($(CCDEPENDSUF),none)
|
---|
229 | %.d: %.c
|
---|
230 | $(CCDEPEND) $(CCDEPENDFLAGS) -c $(CPPFLAGS) $(CFLAGS) $< > /dev/null
|
---|
231 | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' < $(*F).$(CCDEPENDSUF) > $(@F)
|
---|
232 | /bin/rm -f $(*F).$(CCDEPENDSUF)
|
---|
233 | else
|
---|
234 | %.d: %.c
|
---|
235 | $(CCDEPEND) $(CCDEPENDFLAGS) -c $(CPPFLAGS) $(CFLAGS) $< | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' > $(@F)
|
---|
236 | endif
|
---|
237 |
|
---|
238 | ifneq ($(CXXDEPENDSUF),none)
|
---|
239 | %.d: %.cc
|
---|
240 | $(CXXDEPEND) $(CXXDEPENDFLAGS) -c $(CPPFLAGS) $(CXXFLAGS) $< > /dev/null
|
---|
241 | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' < $(*F).$(CXXDEPENDSUF) > $(@F)
|
---|
242 | /bin/rm -f $(*F).$(CXXDEPENDSUF)
|
---|
243 | else
|
---|
244 | %.d: %.cc
|
---|
245 | $(CXXDEPEND) $(CXXDEPENDFLAGS) -c $(CPPFLAGS) $(CXXFLAGS) $< | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' > $(@F)
|
---|
246 | endif
|
---|
247 |
|
---|
248 | #
|
---|
249 | # sometimes it's nice to get assembler source
|
---|
250 | #
|
---|
251 | %.s: %.c
|
---|
252 | $(CC) $(CPPFLAGS) $(CFLAGS) -S $<
|
---|
253 |
|
---|
254 | %.s: %.cc
|
---|
255 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -S $<
|
---|
256 |
|
---|
257 | #
|
---|
258 | # sometimes it's nice to get preprocessed source
|
---|
259 | #
|
---|
260 | %.i: %.c
|
---|
261 | $(CC) $(CPPFLAGS) $(CFLAGS) -E $< -o $@
|
---|
262 |
|
---|
263 | %.ii: %.cc
|
---|
264 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -E $< -o $@
|
---|
265 |
|
---|
266 | values::
|
---|
267 | @echo TOPDIR=$(TOPDIR)
|
---|
268 | @echo SRCDIR=$(SRCDIR)
|
---|
269 | @echo VPATH=$(VPATH)
|
---|
270 | @echo BIN_OR_LIB=$(BIN_OR_LIB)
|
---|
271 | @echo TARGET_TO_MAKE=$(TARGET_TO_MAKE)
|
---|
272 | ifdef LIBS
|
---|
273 | @echo LIBS=$(LIBS)
|
---|
274 | endif
|
---|
275 | ifeq ($(BIN_OR_LIB),LIB)
|
---|
276 | @echo LIBOBJ=$(LIBOBJ)
|
---|
277 | endif
|
---|
278 | ifeq ($(BIN_OR_LIB),BIN)
|
---|
279 | @echo BINOBJ=$(BINOBJ)
|
---|
280 | endif
|
---|
281 |
|
---|
282 | #
|
---|
283 | # rules for cca component code
|
---|
284 | #
|
---|
285 |
|
---|
286 | $(GEN_SRCS): .babel-stamp
|
---|
287 | @if test -f $@; then \
|
---|
288 | touch $@; \
|
---|
289 | else \
|
---|
290 | rm -f .babel-stamp; \
|
---|
291 | $(MAKE) .babel-stamp; \
|
---|
292 | fi
|
---|
293 |
|
---|
294 | $(EXTRA_CXX_SRCS): .babel-stamp
|
---|
295 |
|
---|
296 | .babel-stamp: $(SIDL_FILES)
|
---|
297 | @rm -f .babel-stamp .babel-temp; touch .babel-temp
|
---|
298 | for i in $(IMPLHDRS) $(IMPLSRCS) $(EXTRA_CXX_SRCS) $(EXTRA_INCLUDES); \
|
---|
299 | do \
|
---|
300 | if test ! -e $${i}; then \
|
---|
301 | ln -s $(SRCDIR)/$${i}; \
|
---|
302 | fi; \
|
---|
303 | done
|
---|
304 | $(INSTALL) $(INSTALLDIROPT) $(REPO)
|
---|
305 | /bin/rm -f $(REPO)/MPQC*
|
---|
306 | $(BABEL) -e'^sidl.*' -e'^gov.*' \
|
---|
307 | -R$(CCA_CHEM_REPO) -R$(CCA_SPEC_BABEL_SHARE)/xml \
|
---|
308 | -R$(CCAFE_SHARE)/xml --text=xml -o$(REPO) $(SIDL_FILES)
|
---|
309 | $(BABEL) $(BABEL_ARGS) $(BABEL_PACKAGES) $(BABEL_ENUMS) \
|
---|
310 | $(BABEL_CLASSES)
|
---|
311 | @mv -f .babel-temp $@
|
---|
312 |
|
---|
313 | clean-components: oclean targetclean dclean miscclean
|
---|
314 | rm -f $(IORHDRS) $(IORSRCS) $(STUBHDRS) $(STUBSRCS) \
|
---|
315 | $(SKELHDRS) $(SKELSRCS)
|
---|
316 | rm -f babel.make .babel-stamp
|
---|
317 | for i in $(IMPLHDRS) $(IMPLSRCS) $(EXTRA_CXX_SRCS) $(EXTRA_INCLUDES); \
|
---|
318 | do \
|
---|
319 | if test -L $${i}; then \
|
---|
320 | /bin/rm $${i}; \
|
---|
321 | fi; \
|
---|
322 | done
|
---|