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