blob: d33f5835d64c064ddd4a6ee3f07f059ea078e8a8 [file] [log] [blame]
Benny Prijonodd859a62005-11-01 16:42:51 +00001LIBDIR = ../lib
2BINDIR = ../bin
3
4#
5# The full path of output lib file (e.g. ../lib/libapp.a).
6#
7LIB = $($(APP)_LIB)
8
9#
10# The full path of output executable file (e.g. ../bin/app.exe).
11#
12EXE = $($(APP)_EXE)
13
14#
15# Source directory
16#
17SRCDIR = $($(APP)_SRCDIR)
18
19#
20# SRCEXT is .c
21# SRCS is file.c
22# FULL_SRCS is ../src/app/file.c
23#
24SRCEXT = $($(APP)_SRCEXT)
25SRCS = $($(APP)_SRCS)
26FULL_SRCS = $(foreach file, $(SRCS), $(SRCDIR)/$(file))
27
28
29#
30# Output directory for object files (i.e. output/target)
31#
32OBJDIR = ./output/$(app)-$(TARGET)
33
34#
35# OBJS1 is ./output/target/file.c
36# OBJS is ./output/target/file.o
37#
38OBJS1 = $(foreach file, $(SRCS), $(OBJDIR)/$(file))
39OBJS = $(OBJS1:%$(SRCEXT)=%$(OBJEXT))
40OBJDIRS := $(sort $(foreach file, $(SRCS), $(dir $(OBJDIR)/$(file))))
41
42
43#
44# When generating dependency (gcc -MM), ideally we use only either
45# CFLAGS or CXXFLAGS (not both). But I just couldn't make if/ifeq to work.
46#
47DEPFLAGS = $($(APP)_CXXFLAGS) $($(APP)_CFLAGS)
48
49print_common:
50 @echo "###"
51 @echo "### DUMPING MAKE VARIABLES (I WON'T DO ANYTHING ELSE):"
52 @echo "###"
53 @echo APP=$(APP)
54 @echo SRCEXT=$(SRCEXT)
55 @echo OBJDIR=$(OBJDIR)
56 @echo OBJS=$(OBJS)
57 @echo SRCDIR=$(SRCDIR)
58 @echo FULL_SRCS=$(FULL_SRCS)
59 @echo $(APP)_CFLAGS=$($(APP)_CFLAGS)
60 @echo $(APP)_CXXFLAGS=$($(APP)_CXXFLAGS)
61 @echo $(APP)_LDFLAGS=$($(APP)_LDFLAGS)
62 @echo DEPFLAGS=$(DEPFLAGS)
63
64print_bin: print_common
65 @echo EXE=$(EXE)
66 @echo BINDIR=$(BINDIR)
67
68print_lib: print_common
69 @echo LIB=$(LIB)
70 @echo LIBDIR=$(LIBDIR)
71
72$(LIB): $(LIBDIR) $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
73 $(AR) $(LIB) $(OBJS)
74 $(RANLIB) $(LIB)
75
76$(EXE): $(BINDIR) $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
77 $(LD) $(LDOUT) $(EXE) $(OBJS) $($(APP)_LDFLAGS)
78
79$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c
80 $(CC) $($(APP)_CFLAGS) $< $(CCOUT) $@
81
82$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp
83 $(CC) $($(APP)_CXXFLAGS) $< $(CCOUT) $@
84
85#$(OBJDIR):
86# $(MKDIR) $(OBJDIR)
87$(OBJDIRS):
88 $(MKDIR) $@
89
90$(LIBDIR):
91 $(MKDIR) $(LIBDIR)
92
93$(BINDIR):
94 $(MKDIR) $(BINDIR)
95
96clean:
97 $(RM) -r $(OBJDIR)/*
98 $(RMDIR) $(OBJDIR)
99
100realclean: clean
101 $(RM) $(LIB) $(EXE)
102 $(RM) .$(app).depend
103
104depend:
105 $(RM) .$(app).depend
106 for F in $(FULL_SRCS); do \
107 echo -n $(OBJDIR)/ >> .$(app).depend; \
108 if gcc -MM $(DEPFLAGS) $$F >> .$(app).depend; then \
109 true; \
110 else \
111 echo 'err:' >> .$(app).depend; \
112 exit 1; \
113 fi; \
114 done
115
116dep: depend
117
118-include .$(app).depend
119