Annotation of prex-old/mk/Makefile.inc, Revision 1.1.1.1
1.1 nbrk 1: #
2: # Makefile.inc - common make rules to build Prex
3: #
4:
5: # Supported environment variables
6: #
7: # SRCDIR ... Root directory of source tree
8: # ARCH ... Architecture name
9: # PLATFORM ... Platform name
10: # NDEBUG ... 0 for debug, 1 for release (default: 0)
11: # LIBGCC_PATH ... Full path for libgcc.a
12: # CROSS_COMPILE ... Prefix of tools for cross compile
13: #
14: # Variables in local Makefile
15: #
16: # TARGET ... Target file name
17: # TYPE ... Traget type
18: # e.g. OBJECT,LIBRARY,KERNEL,BINARY,EXEC,DRIVER,OS_IMAGE
19: # SUBDIR ... List of subdirectories
20: # OBJS ... Object files
21: # OBJS-y ... Object files (for drivers)
22: # LIBS ... Libraries
23: # MAP ... Name of map file
24: # DISASM ... Disassemble list file
25: # SYMBOL ... Symbol files
26: #
27:
28: #
29: # Option for cross compile
30: #
31: #CROSS_COMPILE=
32: #CROSS_COMPILE= i386-elf-
33: #CROSS_COMPILE= arm-elf-
34: #CROSS_COMPILE= powerpc-eabi-
35: #CROSS_COMPILE= sh-elf-
36: #CROSS_COMPILE= mips-elf-
37:
38: #
39: # Tools
40: #
41: CC= $(CROSS_COMPILE)gcc
42: CPP= $(CROSS_COMPILE)cpp
43: AS= $(CROSS_COMPILE)as
44: LD= $(CROSS_COMPILE)ld
45: AR= $(CROSS_COMPILE)ar
46: OBJCOPY= $(CROSS_COMPILE)objcopy
47: OBJDUMP= $(CROSS_COMPILE)objdump
48: STRIP= $(CROSS_COMPILE)strip
49: LINT= splint
50: MAKE= make
51: #SHELL= /bin/sh
52: ifdef SHELL_PATH
53: SHELL= $(SHELL_PATH)
54: endif
55: ifdef DISASM
56: ASMGEN= $(OBJDUMP) $@ --disassemble-all > $(DISASM)
57: endif
58:
59: #
60: # System dependent options
61: #
62: include $(SRCDIR)/mk/own.mk
63:
64: #
65: # Flags
66: #
67: DEFS= -D__$(ARCH)__ -D__$(PLATFORM)__ \
68: -D__ARCH__=$(ARCH) -D__PLATFORM__=$(PLATFORM) \
69: -U$(ARCH) -U$(PLATFORM)
70:
71: CFLAGS+= -Os -ansi -pedantic -fno-strict-aliasing \
72: -Wall -Wundef -Wstrict-prototypes -Wpointer-arith \
73: $(CONFIG_CFLAGS) $(DEFS)
74:
75: ifeq ($(NDEBUG),1)
76: CFLAGS+= -fomit-frame-pointer
77: else
78: CFLAGS+= -fno-omit-frame-pointer -DDEBUG -g
79: endif
80:
81: CPPFLAGS+= $(DEFS)
82: ASFLAGS+= $(DEFS) -D__ASSEMBLY__
83: ifdef MAP
84: LDFLAGS+= -Map $(MAP)
85: endif
86: LDFLAGS+=
87: MAKEFLAGS+= -rR --no-print-directory
88: LINTFLAGS+= -D__lint__ $(DEFS) -nolib -weak -fcnuse -nestcomment \
89: -retvalother -fullinitblock
90:
91: #
92: # Specify path for libgcc.a
93: #
94: ifndef LIBGCC_PATH
95: LIBGCC_PATH := $(dir $(shell $(CC) $(GLOBAL_CFLAGS) -print-libgcc-file-name))
96: endif
97: LIBGCC = $(LIBGCC_PATH)libgcc.a
98:
99: #
100: # Inference rules
101: #
102: %.o: %.c
103: $(CC) $(CFLAGS) -c -o $@ $<
104:
105: %.o: %.s
106: $(AS) -o $@ $<
107:
108: %.o: %.S
109: $(CPP) $(ASFLAGS) $< $*.tmp
110: $(AS) -o $@ $*.tmp
111: rm -f $*.tmp
112:
113: #
114: # Target
115: #
116: all: $(SUBDIR) $(TARGET)
117:
118: #
119: # Check configuration
120: #
121: ifeq (0, ${MAKELEVEL})
122: # add dependency on config.h
123: $(SUBDIR):$(SRCDIR)/conf/config.h
124:
125: $(SRCDIR)/conf/config.h: dummy
126: @if [ ! -f $@ ]; then \
127: echo 'You must run `configure` before make.' ;\
128: exit 1 ;\
129: fi
130: endif
131:
132: #
133: # Rules to process sub-directory
134: #
135: ifdef SUBDIR
136: .PHONY: $(SUBDIR)
137: $(SUBDIR): dummy
138: $(MAKE) -C $@
139: endif
140:
141: #
142: # Rules to link a set of .o files into one .o file
143: #
144: ifeq ($(TYPE),OBJECT)
145: $(TARGET): $(OBJS) $(OBJS-y)
146: $(LD) $(LDFLAGS) -r -o $@ $^
147: endif
148:
149: #
150: # Rules to compile library
151: #
152: ifeq ($(TYPE),LIBRARY)
153: $(TARGET): $(OBJS) ar-target
154:
155: .PHONY: ar-target
156: ar-target: $(OBJS)
157: $(AR) rucs $(TARGET) $?
158: $(STRIP) -x -R .comment -R .note $(TARGET)
159: endif
160:
161: #
162: # Rules to compile kernel
163: #
164: ifeq ($(TYPE),KERNEL)
165: $(TARGET): $(OBJS) $(LIBS) $(LDS_SCRIPT)
166: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
167: $(ASMGEN)
168: ifdef SYMBOL
169: cp $@ $(SYMBOL)
170: endif
171: $(STRIP) -s $@
172: endif
173:
174: #
175: # Rules to compile device driver
176: #
177: ifeq ($(TYPE),DRIVER)
178: $(TARGET): $(OBJS) $(OBJS-y) $(LDS_SCRIPT)
179: $(LD) --error-unresolved-symbols $(LDFLAGS) -T $(LD_SCRIPT) -o $@.tmp $(OBJS) $(LIBS) $(LIBGCC)
180: rm -f $@.tmp
181: $(LD) -r $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
182: $(ASMGEN)
183: ifdef SYMBOL
184: cp $@ $(SYMBOL)
185: endif
186: $(STRIP) --strip-debug --strip-unneeded $@
187: endif
188:
189: #
190: # Rules to compile binary file
191: #
192: ifeq ($(TYPE),BINARY)
193: $(TARGET): $(OBJS) $(LDS_SCRIPT)
194: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
195: $(ASMGEN)
196: ifdef SYMBOL
197: cp $@ $(SYMBOL)
198: endif
199: $(OBJCOPY) $(OBJCOPYFLAGS) $@
200: endif
201:
202: #
203: # Rules to compile executable file
204: #
205: ifeq ($(TYPE),EXEC)
206: $(TARGET): $(OBJS) $(LIBS) $(LDS_SCRIPT)
207: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ \
208: $(CRT0) $(OBJS) $(LIBS) $(LIBC) $(LIBGCC)
209: $(ASMGEN)
210: ifdef SYMBOL
211: cp $@ $(SYMBOL)
212: endif
213: $(STRIP) --strip-debug --strip-unneeded $@
214: endif
215:
216: #
217: # Rules to create OS image
218: #
219: ifeq ($(TYPE),OS_IMAGE)
220: $(TARGET): dummy
221: ifdef BOOTFILES
222: $(AR) rcS ramdisk.a $(BOOTFILES)
223: $(AR) t ramdisk.a
224: $(AR) rcS tmp.a $(KERNEL) $(DRIVER) $(BOOTTASKS) ramdisk.a
225: rm ramdisk.a
226: else
227: $(AR) rcS tmp.a $(KERNEL) $(DRIVER) $(BOOTTASKS)
228: endif
229: $(AR) t tmp.a
230: cat $(LOADER) tmp.a > $@
231: rm tmp.a
232: endif
233:
234:
235: -include Makefile.dep
236:
237: C_SRCS = $(wildcard *.c) $(wildcard *.S)
238:
239: #
240: # Depend
241: #
242: .PHONY: depend dep
243: depend dep:
244: ifdef SUBDIR
245: @(for d in $(SUBDIR) _ ; do \
246: if [ "$$d" != "_" ] ; then $(MAKE) -C $$d depend; fi; \
247: done);
248: endif
249: rm -f Makefile.dep
250: @(for d in $(C_SRCS) _ ; do \
251: if [ "$$d" != "_" ] ; then \
252: $(CPP) -M $(CPPFLAGS) $$d >> Makefile.dep; fi; \
253: done);
254: #
255: # Lint
256: #
257: .PHONY: lint
258: lint:
259: @(for d in $(C_SRCS) _ ; do \
260: if [ "$$d" != "_" ] ; then \
261: $(LINT) $(LINTFLAGS) $(INCLUDE) $$d; fi; \
262: done);
263:
264: #
265: # Clean up
266: #
267: .PHONY: clean
268: clean:
269: ifdef SUBDIR
270: @(for d in $(SUBDIR) _ ; do \
271: if [ "$$d" != "_" ] ; then $(MAKE) -C $$d clean; fi; \
272: done);
273: endif
274: rm -f Makefile.dep $(TARGET) $(OBJS) $(OBJS-y) $(DISASM) $(MAP) $(SYMBOL) $(CLEANS)
275:
276: .PHONY: dummy
CVSweb