(file) Return to rules.mak CVS log (file) (dir) Up to [OMI] / omi / mak

  1 mike  1.1 ##==============================================================================
  2           ##
  3           ## Phony targets.
  4           ##
  5           ##==============================================================================
  6           
  7           .PHONY: gen all clean depend memcheck cachegrind proj
  8           
  9           ##==============================================================================
 10           ##
 11           ## OpenSSL
 12           ##
 13           ##==============================================================================
 14           
 15           ifdef CONFIG_TOOLCHAIN
 16               OPENSSL_CFLAGS=-I$(CONFIG_TOOLCHAIN)/usr/include
 17               OPENSSL_LIBS=-L$(CONFIG_TOOLCHAIN)/usr/lib -lssl -lcrypto
 18               OPENSSL_LIBDIR=$(CONFIG_TOOLCHAIN)/usr/lib
 19               export LD_LIBRARY_PATH=$(CONFIG_TOOLCHAIN)/lib:$(CONFIG_TOOLCHAIN)/usr/lib
 20           else
 21               OPENSSL_CFLAGS=$(shell $(PKGCONFIG) --cflags openssl)
 22 mike  1.1     OPENSSL_LIBS=$(shell $(PKGCONFIG) --libs openssl)
 23               OPENSSL_LIBDIR=$(shell $(PKGCONFIG) --variable=libdir openssl)
 24           endif
 25           
 26           ##==============================================================================
 27           ##
 28           ## OBJDIRPATH -- resolve directory where objects will go.
 29           ##
 30           ##==============================================================================
 31           
 32           OBJDIRPATH=$(OBJDIR)$(subst $(ROOT),,$(CURDIR))
 33           
 34           ifeq ($(subst $(ROOT),,$(CURDIR)), $(ROOT))
 35             $(error "current directory seems to be a symbolic link")
 36           endif
 37           
 38           ##==============================================================================
 39           ##
 40           ## Obtain build flags with 'buildtool'.
 41           ##
 42           ##==============================================================================
 43 mike  1.1 
 44           BUILDTOOL=$(ROOT)/buildtool
 45           
 46           CC=$(shell $(BUILDTOOL) cc)
 47           
 48           CXX=$(shell $(BUILDTOOL) cxx)
 49           
 50           __OPTS=
 51           
 52           ifeq ($(ENABLE_DEBUG),1)
 53             __OPTS += --debug
 54           endif
 55           
 56           ifeq ($(ENABLE_WERROR),1)
 57             __OPTS += --errwarn
 58           endif
 59           
 60           __OPTS += --pic
 61           
 62           CFLAGS=$(shell $(BUILDTOOL) cflags $(__OPTS))
 63           CFLAGS+=$(OPENSSL_CFLAGS)
 64 mike  1.1 
 65           CXXFLAGS=$(shell $(BUILDTOOL) cxxflags $(__OPTS))
 66           CXXFLAGS+=$(OPENSSL_CFLAGS)
 67           
 68           ifdef DISABLE_LIBPATH
 69             LIBPATHFLAGS=$(shell $(BUILDTOOL) libpath $(OPENSSL_LIBDIR))
 70           else
 71             LIBPATHFLAGS=$(shell $(BUILDTOOL) libpath $(CONFIG_LIBDIR) $(OPENSSL_LIBDIR))
 72           endif
 73           
 74           CSHLIBFLAGS=$(shell $(BUILDTOOL) cshlibflags)
 75           CSHLIBFLAGS+=$(shell $(BUILDTOOL) syslibs)
 76           CSHLIBFLAGS+=$(OPENSSL_LIBS)
 77           CSHLIBFLAGS+=$(LIBPATHFLAGS)
 78           
 79           CXXSHLIBFLAGS=$(shell $(BUILDTOOL) cxxshlibflags)
 80           CXXSHLIBFLAGS+=$(shell $(BUILDTOOL) syslibs)
 81           CXXSHLIBFLAGS+=$(OPENSSL_LIBS)
 82           CXXSHLIBFLAGS+=$(LIBPATHFLAGS)
 83           
 84           CPROGFLAGS=$(shell $(BUILDTOOL) cprogflags)
 85 mike  1.1 CPROGFLAGS+=$(shell $(BUILDTOOL) syslibs)
 86           CPROGFLAGS+=$(OPENSSL_LIBS)
 87           CPROGFLAGS+=$(LIBPATHFLAGS)
 88           
 89           CXXPROGFLAGS=$(shell $(BUILDTOOL) cxxprogflags)
 90           CXXPROGFLAGS+=$(shell $(BUILDTOOL) syslibs)
 91           CXXPROGFLAGS+=$(OPENSSL_LIBS)
 92           CXXPROGFLAGS+=$(LIBPATHFLAGS)
 93           
 94           ##==============================================================================
 95           ##
 96           ## OBJECTS:
 97           ##
 98           ##==============================================================================
 99           
100           __TMP = $(SOURCES:.c=.o)
101           __TMP2 = $(__TMP:.s=.o)
102           OBJECTS = $(__TMP2:.cpp=.o)
103           __OBJECTS = $(addprefix $(OBJDIRPATH)/,$(OBJECTS))
104           
105           ##==============================================================================
106 mike  1.1 ##
107           ## LIBRARY target
108           ##
109           ##==============================================================================
110           
111           ifdef LIBRARY
112           
113           FOUND = 1
114           
115               $(shell mkdir -p $(OBJDIRPATH))
116           
117           ifndef TOP
118               $(error "Please define TOP variable")
119           endif
120           
121           ifndef SOURCES
122               $(error "Please define SOURCES variable")
123           endif
124           
125           TARGET = $(LIBDIR)/lib$(LIBRARY).a
126           
127 mike  1.1 $(TARGET): $(__OBJECTS)
128           	mkdir -p $(LIBDIR)
129           	ar r $(TARGET) $(__OBJECTS)
130           	@ echo
131           
132           # ranlib $(TARGET)
133           
134           endif
135           
136           ##==============================================================================
137           ##
138           ## CSHLIBRARY target
139           ##
140           ##==============================================================================
141           
142           ifdef CSHLIBRARY
143           
144           FOUND = 1
145           
146               $(shell mkdir -p $(OBJDIRPATH))
147           
148 mike  1.1 ifndef TOP
149               $(error "Please define TOP variable")
150           endif
151           
152           ifndef SOURCES
153               $(error "Please define SOURCES variable")
154           endif
155           
156           TARGET = $(LIBDIR)/$(shell $(BUILDTOOL) shlibname $(CSHLIBRARY))
157           
158           __LIBRARIES = $(addprefix -l,$(LIBRARIES))
159           __LIBRARIES += $(addprefix -l,$(SYSLIBRARIES))
160           
161           ifndef DISABLE_LIBPATH
162           LIBNAMEOPT=$(shell $(BUILDTOOL) libname $(CONFIG_LIBDIR)/$(shell $(BUILDTOOL) shlibname $(CSHLIBRARY)))
163           endif
164           
165           $(TARGET): $(__OBJECTS)
166           	mkdir -p $(LIBDIR)
167           	$(CC) -o $(TARGET) $(__OBJECTS) -L$(LIBDIR) $(__LIBRARIES) $(CSHLIBFLAGS) $(LIBNAMEOPT)
168           	@ echo
169 mike  1.1 
170           chklib:
171           	$(BINDIR)/chklib $(TARGET)
172           
173           endif
174           
175           ##==============================================================================
176           ##
177           ## CXXSHLIBRARY target
178           ##
179           ##==============================================================================
180           
181           ifdef CXXSHLIBRARY
182           
183           FOUND = 1
184           
185               $(shell mkdir -p $(OBJDIRPATH))
186           
187           ifndef TOP
188               $(error "Please define TOP variable")
189           endif
190 mike  1.1 
191           ifndef SOURCES
192               $(error "Please define SOURCES variable")
193           endif
194           
195           TARGET = $(LIBDIR)/$(shell $(BUILDTOOL) shlibname $(CXXSHLIBRARY))
196           
197           __LIBRARIES = $(addprefix -l,$(LIBRARIES))
198           __LIBRARIES += $(addprefix -l,$(SYSLIBRARIES))
199           
200           ifndef DISABLE_LIBPATH
201           LIBNAMEOPT=$(shell $(BUILDTOOL) libname $(CONFIG_LIBDIR)/$(shell $(BUILDTOOL) shlibname $(CXXSHLIBRARY)))
202           endif
203           
204           $(TARGET): $(__OBJECTS)
205           	mkdir -p $(LIBDIR)
206           	$(CXX) -o $(TARGET) $(__OBJECTS) -L$(LIBDIR) $(__LIBRARIES) $(CXXSHLIBFLAGS) $(LIBNAMEOPT)
207           	@ echo
208           
209           chklib:
210           	$(BINDIR)/chklib $(TARGET)
211 mike  1.1 
212           endif
213           
214           ##==============================================================================
215           ##
216           ## CPROGRAM target
217           ##
218           ##==============================================================================
219           
220           ifdef CPROGRAM
221           
222           FOUND = 1
223           
224               $(shell mkdir -p $(OBJDIRPATH))
225           
226           ifndef TOP
227               $(error "Please define TOP variable")
228           endif
229           
230           ifndef SOURCES
231               $(error "Please define SOURCES variable")
232 mike  1.1 endif
233           
234           TARGET = $(BINDIR)/$(CPROGRAM)
235           
236           __LIBRARIES = $(addprefix -l,$(LIBRARIES))
237           __LIBRARIES += $(addprefix -l,$(SYSLIBRARIES))
238           __DEPS=$(wildcard $(addprefix $(LIBDIR)/lib,$(addsuffix .*,$(LIBRARIES))))
239           
240           $(TARGET): $(__OBJECTS) $(__DEPS)
241           	mkdir -p $(BINDIR)
242           	$(CC) -o $(TARGET) $(__OBJECTS) -L$(LIBDIR) $(__LIBRARIES) $(CPROGFLAGS)
243           	@ echo
244           
245           endif
246           
247           ##==============================================================================
248           ##
249           ## CXXPROGRAM target
250           ##
251           ##==============================================================================
252           
253 mike  1.1 ifdef CXXPROGRAM
254           
255           FOUND = 1
256           
257               $(shell mkdir -p $(OBJDIRPATH))
258           
259           ifndef TOP
260               $(error "Please define TOP variable")
261           endif
262           
263           ifndef SOURCES
264               $(error "Please define SOURCES variable")
265           endif
266           
267           TARGET = $(BINDIR)/$(CXXPROGRAM)
268           
269           __LIBRARIES = $(addprefix -l,$(LIBRARIES))
270           __LIBRARIES += $(addprefix -l,$(SYSLIBRARIES))
271           __DEPS=$(wildcard $(addprefix $(LIBDIR)/lib,$(addsuffix .*,$(LIBRARIES))))
272           
273           all: $(TARGET) $(EXTRA_RULE)
274 mike  1.1 
275           $(TARGET): $(__OBJECTS) $(__DEPS)
276           	mkdir -p $(BINDIR)
277           	$(CXX) -o $(TARGET) $(__OBJECTS) -L$(LIBDIR) $(__LIBRARIES) $(CXXPROGFLAGS)
278           	@ echo
279           
280           endif
281           
282           ##==============================================================================
283           ##
284           ## DIRECTORIES target
285           ##
286           ##==============================================================================
287           
288           ifdef DIRECTORIES
289           
290           FOUND = 1
291           
292           # define a newline macro
293           define NL
294           
295 mike  1.1 
296           endef
297           
298           all:
299           	@ $(foreach i, $(DIRECTORIES), $(MAKE) -C $i $(NL) )
300           
301           clean:
302           	@ $(foreach i, $(DIRECTORIES), $(MAKE) -C $i clean $(NL) )
303           
304           depend:
305           	@ $(foreach i, $(DIRECTORIES), $(MAKE) -C $i depend $(NL) )
306           
307           endif
308           
309           ##==============================================================================
310           ##
311           ## Check that one of the targets above was defined
312           ##
313           ##==============================================================================
314           
315           ifndef FOUND
316 mike  1.1 
317           TARGETS = \
318               LIBRARY \
319               LIBDIR \
320               CSHLIBRARY \
321               CXXSHLIBRARY \
322               CPROGRAM \
323               CXXPROGRAM \
324               DIRECTORIES
325           
326           $(error "Please define one of the following targets: $(TARGETS)")
327           
328           endif
329           
330           ##==============================================================================
331           ##
332           ## USECCACHE
333           ##
334           ##==============================================================================
335           
336           ifdef USECCACHE
337 mike  1.1     CWRAP=ccache
338               CXXWRAP=$(CWRAP)
339           endif
340           
341           ##==============================================================================
342           ##
343           ## Object file targets
344           ##
345           ##==============================================================================
346           
347           __INCLUDES = -I$(INCDIR) $(addprefix -I,$(INCLUDES))
348           __DEFINES = $(addprefix -D,$(DEFINES))
349           
350           compilec = \
351               $(CWRAP) $(CC) -c -o $@ $(CFLAGS) $(__INCLUDES) $(__DEFINES) $(1) $(2)
352           
353           compilecxx = \
354               $(CXXWRAP) $(CXX) -c -o $@ $(CXXFLAGS) $(__INCLUDES) $(__DEFINES) $(1) $(2)
355           
356           compiles = \
357               $(CC) -c -o $@ $(CFLAGS) $(__INCLUDES) $(__DEFINES) $(1) $(2)
358 mike  1.1 
359           $(OBJDIRPATH)/%.o: %.c
360           	$(call compilec,$<)
361           	@ echo
362           
363           $(OBJDIRPATH)/%.o: %.cpp
364           	$(call compilecxx,$<)
365           	@ echo
366           
367           $(OBJDIRPATH)/%.o: %.s
368           	$(call compiles,$<)
369           	@ echo
370           
371           ##==============================================================================
372           ##
373           ## clean target
374           ##
375           ##==============================================================================
376           
377           ifndef DIRECTORIES
378           clean:
379 mike  1.1 	rm -rf $(TARGET) $(__OBJECTS) $(OBJDIRPATH)/depend.mak $(CLEANFILES)
380           endif
381           
382           ##==============================================================================
383           ##
384           ## depend target
385           ##
386           ##==============================================================================
387           
388           MKDEP=$(BINDIR)/mkdep
389           
390           ifndef DIRECTORIES
391           depend: $(BINDIR)/mkdep
392           	$(MKDEP) --objdir $(OBJDIRPATH) $(__INCLUDES) $(SOURCES) > $(OBJDIRPATH)/depend.mak
393           endif
394           
395           # Only build if we are not in the mkdep source directory.
396           ifndef MAKEDEPSRCDIR
397           $(BINDIR)/mkdep:
398           	$(MAKE) -C $(ROOT)/tools/mkdep
399           endif
400 mike  1.1 
401           ##==============================================================================
402           ##
403           ## memcheck target
404           ##
405           ##==============================================================================
406           
407           MEMCHECK=valgrind --tool=memcheck --leak-check=full --error-exitcode=1 --gen-suppressions=all --track-fds=yes
408           
409           ## --trace-children=yes
410           
411           ifdef MEMCHECK_SUPPRESS
412             __MEMCHECK_SUPPRESS = --suppressions=$(MEMCHECK_SUPPRESS)
413           endif
414           
415           memcheck:
416           	$(MEMCHECK) $(__MEMCHECK_SUPPRESS) $(TARGET) $(MEMCHECK_ARGS)
417           
418           ##==============================================================================
419           ##
420           ## cachegrind target
421 mike  1.1 ##
422           ##==============================================================================
423           
424           CACHEGRIND=valgrind --tool=cachegrind
425           
426           cachegrind:
427           	$(CACHEGRIND) --cachegrind-out-file=callgrind.out $(TARGET) $(ARGUMENTS) $(MEMCHECK_ARGS)
428           	cg_annotate --auto=yes callgrind.out > cg_annotate.out
429           	rm -f callgrind.out
430           	@ echo "Created cg_annotate.out"
431           
432           ##==============================================================================
433           ##
434           ## Include depend.mak
435           ##
436           ##==============================================================================
437           
438           -include $(OBJDIRPATH)/depend.mak
439           

ViewCVS 0.9.2