1
# ----------------------------------------------------------------------------
3
# - afnix generic rule makefile configuration -
4
# ----------------------------------------------------------------------------
5
# - This program is free software; you can redistribute it and/or modify -
6
# - it provided that this copyright notice is kept intact. -
8
# - This program is distributed in the hope that it will be useful, but -
9
# - without any warranty; without even the implied warranty of -
10
# - merchantability or fitness for a particular purpose. In not event shall -
11
# - the copyright holder be liable for any direct, indirect, incidental or -
12
# - special damages arising in any way out of the use of this software. -
13
# ----------------------------------------------------------------------------
14
# - copyright (c) 1999-2011 amaury darsch -
15
# ----------------------------------------------------------------------------
17
ifeq ($(CCMODE),debug)
18
ENVFLAGS = $(STDEVFLAGS) $(PLTEVFLAGS)
19
CPPFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(DEBUGFLAGS)
20
CXXFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(DEBUGFLAGS)
21
CCDEFINE = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
24
ifeq ($(CCMODE),optimized)
25
ENVFLAGS = $(STDEVFLAGS) $(PLTEVFLAGS)
26
CPPFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(OPTCCFLAGS)
27
CXXFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(OPTCCFLAGS)
28
CCDEFINE = $(STDDEFINES) $(PLTDEFINES) $(OPTDEFINES)
31
ifeq ($(CCMODE),profiled)
32
ENVFLAGS = $(STDEVFLAGS) $(PLTEVFLAGS)
33
CPPFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(PFLCCFLAGS)
34
CXXFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(PFLCCFLAGS)
35
CCDEFINE = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
38
ifeq ($(CCMODE),coverage)
39
ENVFLAGS = $(STDEVFLAGS) $(PLTEVFLAGS)
40
CPPFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(COVCCFLAGS)
41
CXXFLAGS = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(COVCCFLAGS)
42
CCDEFINE = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
45
PPFLAGS = $(CPPFLAGS) $(EXTCPPFLAGS)
46
XXFLAGS = $(CXXFLAGS) $(EXTCXXFLAGS)
47
DEFINES = $(CCDEFINE) $(EXTCCDEFINE)
48
PPINCLS = $(STDINCLUDE) $(INCLUDE)
49
XXINCLS = $(STDINCLUDE) $(EXTINCLUDES) $(INCLUDE)
51
# ----------------------------------------------------------------------------
52
# - project file rules -
53
# ----------------------------------------------------------------------------
55
HPPSRCS = $(wildcard *.hpp)
56
CPPSRCS = $(wildcard *.cpp)
57
CXXSRCS = $(wildcard *.cxx)
59
CPPOBJS = $(CPPSRCS:.cpp=.o)
60
CXXOBJS = $(CXXSRCS:.cxx=.o)
61
CPPLOBJ = $(CPPLSRC:.cpp=.o)
62
CXXLOBJ = $(CXXLSRC:.cxx=.o)
63
OBJECTS = $(CPPOBJS) $(CXXOBJS) $(CPPLOBJ) $(CXXLOBJ)
66
ARLIB = lib$(TRGLIB).$(AREXT)
67
DYLIB = lib$(TRGLIB).$(DYEXT)
70
ifeq ($(LKMODE),soname)
71
SOMAJ = $(DYLIB).$(MAJOR)
72
SOMIN = $(DYLIB).$(MAJOR).$(MINOR)
74
SOVRS = $(DYLIB).$(MAJOR).$(MINOR).$(PATCH)
77
ifeq ($(LKMODE),dylib)
78
DYMAJ = lib$(TRGLIB).$(MAJOR).$(DYEXT)
79
DYMIN = lib$(TRGLIB).$(MAJOR).$(MINOR).$(DYEXT)
80
DYVRS = lib$(TRGLIB).$(MAJOR).$(MINOR).$(PATCH).$(DYEXT)
83
# mark the file as loaded
84
ifeq ($(AFNIX-RULE-LOAD),)
88
# ----------------------------------------------------------------------------
89
# - compilation rules -
90
# ----------------------------------------------------------------------------
99
$(ENVFLAGS) $(CC) $(PPFLAGS) $(DEFINES) $(PPINCLS) -o $@ -c $<
102
$(ENVFLAGS) $(CC) $(XXFLAGS) $(DEFINES) $(XXINCLS) -o $@ -c $<
105
# ----------------------------------------------------------------------------
107
# ----------------------------------------------------------------------------
111
ifeq ($(PLATNAME),darwin)
112
$(ARLIB) : $(OBJECTS)
114
$(ENVFLAGS) $(AR) $(ARFLAGS) $@ $(OBJECTS)
115
$(ENVFLAGS) $(RANLIB) $@
119
$(ARLIB) : $(OBJECTS)
121
$(ENVFLAGS) $(AR) $(ARFLAGS) $@ $(OBJECTS)
126
install-arlib: $(ARLIB)
128
@$(CP) $(ARLIB) $(LIBDIR)
129
.PHONY: install-arlib
131
install-arlib: $(ARLIB)
133
.PHONY: install-arlib
136
# ----------------------------------------------------------------------------
137
# - dynamic linking rules -
138
# ----------------------------------------------------------------------------
140
# dynamic linking rules
141
ifeq ($(LKTYPE),dynamic)
143
# use generic linking mode
144
ifeq ($(LKMODE),generic)
145
$(DYLIB) : $(OBJECTS)
146
$(ENVFLAGS) $(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(EXTLIB)
150
install-dylib : $(DYLIB)
152
@$(CP) $(DYLIB) $(LIBDIR)
153
.PHONY: install-dylib
156
# use soname linking mode
157
ifeq ($(LKMODE),soname)
158
$(SOVRS) : $(OBJECTS)
159
$(ENVFLAGS) $(LD) $(LDFLAGS) -o $(SOVRS) $(OBJECTS) $(EXTLIB)
163
@$(CP) $(SOVRS) $(BLDLIB)
164
@$(RM) $(BLDLIB)/$(DYLIB)
165
@$(RM) $(BLDLIB)/$(SOMIN)
166
@$(LN) $(SOVRS) $(BLDLIB)/$(SOMIN)
167
@$(LN) $(SOMIN) $(BLDLIB)/$(DYLIB)
169
install-dylib : $(DYLIB)
171
@$(CP) $(SOVRS) $(LIBDIR)
172
@$(RM) $(LIBDIR)/$(SOMIN)
173
@$(RM) $(LIBDIR)/$(DYLIB)
174
@$(LN) $(SOVRS) $(LIBDIR)/$(SOMIN)
175
@$(LN) $(SOMIN) $(LIBDIR)/$(DYLIB)
176
.PHONY: install-dylib
179
# use dylib linking mode
180
ifeq ($(LKMODE),dylib)
181
$(DYVRS) : $(OBJECTS)
183
$(ENVFLAGS) $(LD) $(LDFLAGS) -install_name $(DYMAJ) -o $(DYVRS) \
188
@$(CP) $(DYVRS) $(BLDLIB)
189
@$(RM) $(BLDLIB)/$(DYLIB)
190
@$(RM) $(BLDLIB)/$(DYMAJ)
191
@$(RM) $(BLDLIB)/$(DYMIN)
192
@$(LN) $(DYVRS) $(BLDLIB)/$(DYLIB)
193
@$(LN) $(DYVRS) $(BLDLIB)/$(DYMAJ)
194
@$(LN) $(DYVRS) $(BLDLIB)/$(DYMIN)
196
install-dylib : $(DYLIB)
198
@$(CP) $(DYVRS) $(LIBDIR)
199
@$(RM) $(LIBDIR)/$(DYLIB)
200
@$(RM) $(LIBDIR)/$(DYMAJ)
201
@$(RM) $(LIBDIR)/$(DYMIN)
202
@$(LN) $(DYVRS) $(LIBDIR)/$(DYLIB)
203
@$(LN) $(DYVRS) $(LIBDIR)/$(DYMAJ)
204
@$(LN) $(DYVRS) $(LIBDIR)/$(DYMIN)
205
.PHONY: install-dylib
208
# else clause for dynamic linking
212
.PHONY: install-dylib
215
install-lib: install-arlib install-dylib
218
# ----------------------------------------------------------------------------
220
# ----------------------------------------------------------------------------
223
build-hpp : $(HPPSRCS)
224
@$(MKDIR) $(BLDHDR)/$(TRGDIR)
226
$(CMP) $$i $(BLDHDR)/$(TRGDIR)/$$i || \
227
$(CP) $$i $(BLDHDR)/$(TRGDIR)/$$i; \
235
ifeq ($(LKTYPE),dynamic)
236
$(TRGLIB) : $(ARLIB) $(DYLIB) build-hpp
238
ifeq ($(LKTYPE),static)
239
$(TRGLIB) : $(ARLIB) build-hpp
243
# ----------------------------------------------------------------------------
245
# ----------------------------------------------------------------------------
250
@$(CP) $(TARGETS) $(BLDBIN)
253
ifeq ($(LKTYPE),dynamic)
254
$(TARGETS) : $(OBJECTS)
255
$(ENVFLAGS) $(LK) -Wl,-rpath=/usr/lib/afnix,-rpath-link,/usr/lib/afnix $(LKFLAGS) -o $@ $(OBJECTS) $(EXELIBS) $(EXESLIB)
257
ifeq ($(LKTYPE),static)
258
$(TARGETS) : $(OBJECTS)
259
$(ENVFLAGS) $(LK) $(LKFLAGS) -o $@ $(OBJECTS) $(STALIBS) $(EXESLIB)
263
# ----------------------------------------------------------------------------
265
# ----------------------------------------------------------------------------
269
@$(AEXEC) -v --prefix=$(BLDDIR) \
270
--binexe=$(AXIEXE) --binopt=$(AXIOPT) $@
279
$(LK) $(LKFLAGS) -o $@ $@.o $(EXELIBS) $(EXESLIB)
281
test: $(TESTERS:%=%.exe)
283
$(TESTERS:%=%.exe): %.exe : %
284
@$(BEXEC) -v --prefix=$(BLDDIR) $<
286
$(TESTERS:%=%.exe): %.exe : %
287
@$(BEXEC) -v --prefix=$(BLDDIR) --libdir=$(DLYPATH) $<
289
.PHONY: test $(TESTERS:%=%.exe)
292
# ----------------------------------------------------------------------------
294
# ----------------------------------------------------------------------------
297
@echo 'build version :' $(VERSION)
298
@echo 'prefix :' $(PREFIX)
299
@echo 'bin directory (BINDIR) :' $(BINDIR)
300
@echo 'lib directory (LIBDIR) :' $(LIBDIR)
301
@echo 'hdr directory (HDRDIR) :' $(HDRDIR)
302
@echo 'doc directory (DOCDIR) :' $(DOCDIR)
303
@echo 'man directory (MANDIR) :' $(MANDIR)
304
@echo 'etc directory (ETCDIR) :' $(ETCDIR)
305
@echo 'prj directory (PRJDIR) :' $(PRJDIR)
308
# ----------------------------------------------------------------------------
310
# ----------------------------------------------------------------------------
313
@$(RM) *.o *.d *~ core *.so *.so.* *.a *.dylib *.bb *.bbg *.da
314
@$(RM) core *.core core.* .gdb_history gmon.out