1 # Makefile.tail -- see Makefile.head for usage information
3 ASSRCS := $(ASFILES:%=%.S)
4 CSRCS := $(CFILES:%=%.c)
5 CXXSRCS := $(CXXFILES:%=%.cc)
7 ASOBJS := $(ASFILES:%=$(BUILDDIR)/%.o)
8 GENASOBJS := $(GENASFILES:%=$(BUILDDIR)/%.o)
9 COBJS := $(CFILES:%=$(BUILDDIR)/%.o)
10 GENCOBJS := $(GENCFILES:%=$(BUILDDIR)/%.o)
11 CXXOBJS := $(CXXFILES:%=$(BUILDDIR)/%.o)
12 GENCXXOBJS := $(GENCXXFILES:%=$(BUILDDIR)/%.o)
14 # ASOBJS must come first, so that the kernel entry code can be
15 # at the beginning of the output image.
17 FILES := $(ASFILES) $(CFILES) $(CXXFILES)
18 OBJS := $(ASOBJS) $(COBJS) $(CXXOBJS) $(GENASOBJS) $(GENCOBJS) $(GENCXXOBJS)
19 GENSRCS := $(GENASFILES:%=$(BUILDDIR)/%.S) $(GENCFILES:%=$(BUILDDIR)/%.c) \
20 $(GENCXXFILES:%=$(BUILDDIR)/%.cc)
21 SRCS := $(ASFILES:%=%.S) $(CFILES:%=%.c) $(CXXFILES:%=%.cc)
23 BUILDCOBJS := $(BUILDCFILES:%=$(BUILDDIR)/%.o)
24 BUILDGENCOBJS := $(BUILDGENCFILES:%=$(BUILDDIR)/%.o)
25 BUILDCXXOBJS := $(BUILDCXXFILES:%=$(BUILDDIR)/%.o)
26 BUILDGENCXXOBJS := $(BUILDGENCXXFILES:%=$(BUILDDIR)/%.o)
28 BUILDOBJS := $(BUILDCOBJS) $(BUILDCXXOBJS) $(BUILDGENCOBJS) $(BUILDGENCXXOBJS)
29 BUILDGENSRCS := $(BUILDGENCFILES:%=$(BUILDDIR)/%.c) $(BUILDGENCXXFILES:%=$(BUILDDIR)/%.cc)
30 BUILDSRCS := $(BUILDCFILES:%=%.c) $(BUILDCXXFILES:%=%.cc)
32 $(ASOBJS): $(BUILDDIR)/%.o: %.S
35 @$(CC) $(ASFLAGS) -c -o "$@" "$<"
37 $(COBJS): $(BUILDDIR)/%.o: %.c
40 @$(CC) $(CFLAGS) -c -o "$@" "$<"
42 $(CXXOBJS): $(BUILDDIR)/%.o: %.cc
45 @$(CXX) $(CXXFLAGS) -c -o "$@" "$<"
47 $(GENASOBJS): %.o: %.S
50 @$(CC) $(ASFLAGS) -c -o "$@" "$<"
55 @$(CC) $(CFLAGS) -c -o "$@" "$<"
57 $(GENCXXOBJS): %.o: %.cc
60 @$(CXX) $(CXXFLAGS) -c -o "$@" "$<"
62 $(BUILDCOBJS): $(BUILDDIR)/%.o: %.c
65 @$(BUILDCC) $(BUILDCFLAGS) -c -o "$@" "$<"
67 $(BUILDCXXOBJS): $(BUILDDIR)/%.o: %.cc
70 @$(BUILDCXX) $(BUILDCXXFLAGS) -c -o "$@" "$<"
72 $(BUILDGENCOBJS): %.o: %.c
75 @$(BUILDCC) $(BUILDCFLAGS) -c -o "$@" "$<"
77 $(BUILDGENCXXOBJS): %.o: %.cc
80 @$(BUILDCXX) $(BUILDCXXFLAGS) -c -o "$@" "$<"
83 $(RM) $(foreach dir,$(DIRS),$(BUILDDIR)/$(dir)*.o)
84 $(RMDIR) $(BUILDDIR)/include/servers
85 $(RMDIR) $(TARGETS) $(GENSRCS) $(BUILDGENSRCS)
87 distclean: clean $(EXTRADISTCLEAN)
91 # Every .o file which has a corresponding .cdl file will
92 # depend on the server stubs.
94 SERVERS := $(wildcard $(FILES:%=%.cdl))
95 SERVERS := $(SERVERS:%.cdl=%)
97 $(SERVERS:%=$(SERVERDIR)/%): $(SERVERDIR)/%: %.cdl $(IFACES)
100 @if ! $(IDLC) -t $(ARCH) -l c++ -r -i "$(IFACES)" -o "$@" "$<"; then \
105 .DELETE_ON_ERROR: $(SERVERS:%=$(SERVERDIR)/%)
107 $(SERVERS:%=%.cc): %.cc: $(SERVERDIR)/%
108 servers: $(SERVERS:%=$(SERVERDIR)/%)
111 dep: servers $(PREDEP)
112 @echo $(COMP): Generating dependencies
113 @$(RM) "$(BUILDDIR)"/.depend
114 @$(MKDIR) "$(BUILDDIR)"
115 @$(TOUCH) "$(BUILDDIR)"/.depend
116 @for i in $(SRCS); do if [ -f "$$i" ]; then \
117 OBJ=`echo "$$i" | sed s/\\.\[^.\]*$$//`.o; \
118 $(CXX) $(CXXFLAGS) -DMAKEDEP -M -MT "$(BUILDDIR)/$$OBJ" "$$i" >> "$(BUILDDIR)"/.depend; \
120 @for i in $(GENSRCS); do if [ -f "$$i" ]; then \
121 OBJ=`echo "$$i" | sed s/\\.\[^.\]*$$//`.o; \
122 $(CXX) $(CXXFLAGS) -DMAKEDEP -M -MT "$$OBJ" "$$i" >> "$(BUILDDIR)"/.depend; \
124 @for i in $(BUILDSRCS); do if [ -f "$$i" ]; then \
125 OBJ=`echo "$$i" | sed s/\\.\[^.\]*$$//`.o; \
126 $(BUILDCXX) $(BUILDCXXFLAGS) -DMAKEDEP -M -MT "$(BUILDDIR)/$$OBJ" "$$i" >> "$(BUILDDIR)"/.depend; \
128 @for i in $(BUILDGENSRCS); do if [ -f "$$i" ]; then \
129 OBJ=`echo "$$i" | sed s/\\.\[^.\]*$$//`.o; \
130 $(BUILDCXX) $(BUILDCXXFLAGS) -DMAKEDEP -M -MT "$$OBJ" "$$i" >> "$(BUILDDIR)"/.depend; \
132 @for i in $(SERVERS); do \
133 $(IDLC) -M -l c++ -r -i "$(IFACES)" -o "$(SERVERDIR)/$$i" \
134 "$$i.cdl" >> "$(BUILDDIR)"/.depend; \
139 ifeq ($(BUILDDIR)/.depend,$(wildcard $(BUILDDIR)/.depend))
140 include $(BUILDDIR)/.depend