1
2 # auto-dependency generation makefile
3
4
5 #### Default values
6
7 SRCEXTENSIONS := c C cpp
8 CC := gcc
9 CPP := g++
10 LD := ld
11 AR := ar
12
13 #### build object directory token
14
15 CPU := $(shell uname -m)
16 OS := $(shell uname -s | tr '[A-Z]' '[a-z]')
17
18 DEFAULT_ARCH := $(CPU)-$(OS)
19
20 ifeq ($(strip $(ARCH)),)
21 ARCH := $(DEFAULT_ARCH)
22 endif
23
24 OBJTOKEN := obj.$(ARCH)
25
26 #
27 # Under most circumstances, paths are simple
28 #
29
30 ifeq ($(POSTROOT),..)
31 MODPATH := .
32 OBJDIR := $(OBJTOKEN)
33 else
34 MODPATH := $(POSTROOT)/$(MODULENAME)
35 OBJDIR := $(MODPATH)/$(OBJTOKEN)
36 endif
37
38
39 #
40 # Directories
41 #
42
43 MODLIBS := \
44 -L$(OBJDIR) \
45 $(foreach dir, $(MODULES), -L$(POSTROOT)/$(dir)/$(OBJTOKEN))
46 MODINCLUDES := \
47 -I$(MODPATH)/include \
48 $(foreach dir, $(MODULES), -I$(POSTROOT)/$(dir)/include)
49 ALLTARGETS := \
50 $(foreach targ, $(TARGETS), $(OBJDIR)/$(targ))
51 VPATH := \
52 $(MODPATH)/include \
53 $(foreach dir, $(SRCDIRS), $(MODPATH)/$(dir)) \
54 $(foreach dir, $(MODULES), $(POSTROOT)/$(dir)/include)
55
56
57 #### include paths
58
59 LIBPATH := $(MODLIBS)
60 INCLUDEPATH += -I. -Iinclude $(MODINCLUDES)
61 KCFLAGS = -O2 \
62 -Wall -Werror -Wstrict-prototypes \
63 -fno-strict-aliasing -fomit-frame-pointer \
64 -DMODULE -D__KERNEL__
65
66 CFLAGS := -fPIC -Wall -O2 -g
67 CCFLAGS := -Werror
68 CPPFLAGS := -ftemplate-depth-30
69
70 #### Architecture deps
71
72 KERNEL_INCLUDE := $(KERNEL_HOME)/include
73 BINSTRIP := strip
74
75 KCFLAGS += -I$(KERNEL_INCLUDE) $(INCLUDEPATH)
76 CFLAGS += $(INCLUDEPATH) $(LIBPATH)
77
78 CCFLAGS += $(CFLAGS)
79 CPPFLAGS += $(CFLAGS)
80
81 #
82 # targets
83 #
84
85 default: $(ALLTARGETS)
86
87 ####################################################
88
89
90 #
91 # Dependency generation
92 #
93
94
95 # Get list of all source files
96 SOURCES := \
97 $(notdir $(wildcard \
98 $(foreach dir, $(SRCDIRS), \
99 $(foreach ext, $(SRCEXTENSIONS), $(dir)/*.$(ext)))))
100
101 # Convert all .c, .cpp, .C to .d
102 SRC_AND_DEPENDS := $(foreach ext, $(SRCEXTENSIONS),\
103 $(patsubst %.$(ext),%.d,$(SOURCES)))
104
105 DEPENDS := $(foreach file, $(filter %.d,$(SRC_AND_DEPENDS)), $(OBJDIR)/$(file))
106
107
108
109 BASE = $(subst /,\/,$*)
110 ODIR = $(subst /,\/,$(OBJDIR))
111
112 # This magic is from the 'make' manual (with mods by jelson)
113 $(OBJDIR)/%.d: %.c
114 @mkdir -p $(OBJDIR)
115 set -e; $(CC) -MM -I$(KERNEL_INCLUDE) $(CFLAGS) $< \
116 | sed 's/\($(BASE)\)\.o[ :]*/$(ODIR)\/$(BASE).o $(ODIR)\/$(BASE).d : /g' > $@; \
117 [ -s $@ ] || rm -f $@
118
119 $(OBJDIR)/%.d: %.C
120 @mkdir -p $(OBJDIR)
121 set -e; $(CC) -MM $(CPPFLAGS) $< \
122 | sed 's/\($(BASE)\)\.o[ :]*/$(ODIR)\/$(BASE).o $(ODIR)\/$(BASE).d : /g' > $@; \
123 [ -s $@ ] || rm -f $@
124
125 $(OBJDIR)/%.d: %.cpp
126 @mkdir -p $(OBJDIR)
127 set -e; $(CC) -MM $(CPPFLAGS) $< \
128 | sed 's/\($(BASE)\)\.o[ :]*/$(ODIR)\/$(BASE).o $(ODIR)\/$(BASE).d : /g' > $@; \
129 [ -s $@ ] || rm -f $@
130
131
132 #
133 # Rules
134 #
135
136 $(OBJDIR)/%.o: %.cpp
137 $(CPP) $(CPPFLAGS) $< -c -o $@
138
139 $(OBJDIR)/%.o: %.C
140 $(CPP) $(CPPFLAGS) $< -c -o $@
141
142 $(OBJDIR)/%.o: %.c
143 $(CC) $(CCFLAGS) $< -c -o $@
144
145 clean:
146 rm -f $(ALLTARGETS) $(OBJDIR)/*.[oa] $(OBJDIR)/*.so.* $(DEPENDS)
147
148
149 include $(DEPENDS)
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.