|
|
1.1 root 1: #
2: # Common makefile fragment for use by driverkit-based driver projects.
3: #
4:
5: MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
6: include $(MAKEFILEDIR)/platform.make
7:
8: ifneq "" "$(wildcard /bin/mkdirs)"
9: MKDIRS = /bin/mkdirs
10: else
11: MKDIRS = /bin/mkdir -p
12: endif
13:
14: #
15: # OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
16: # source.
17: #
18: OBJROOT= .
19: SYMROOT= .
20:
21: #
22: # Macros used for compiling.
23: #
24: CFILES= $(COMMON_CFILES) $(MACHINE_COMMON_CFILES)
25: MFILES= $(COMMON_MFILES) $(MACHINE_COMMON_MFILES)
26: MD_CFILES=$(${MACHINE}_CFILES)
27: MD_MFILES=$(${MACHINE}_MFILES)
28:
29: COMMON_OFILES= $(CFILES:.c=.o) $(MFILES:.m=.o)
30: KERNEL_OFILES= $(KERNEL_CFILES:.c=.o) $(KERNEL_MFILES:.m=.o)
31: USER_OFILES= $(USER_CFILES:.c=.o) $(USER_MFILES:.m=.o)
32: MD_OFILES= $(MD_CFILES:.c=.o) $(MD_MFILES:.m=.o)
33:
34: IO_SERVER=
35: #IO_SERVER= -DIOSERVER
36:
37: #
38: # For installsrc and tags.
39: #
40: COMMONSOURCE= $(COMMON_MFILES) $(COMMON_CFILES) \
41: $(USER_MFILES) $(USER_CFILES) $(KERNEL_MFILES) $(KERNEL_CFILES) \
42: $(COMMON_PUBLIC_HFILES) $(COMMON_PRIVATE_HFILES) $(OTHER_SOURCE)
43:
44:
45: CFLAGS= -g -O -Wall -Wnoformat -I. -I.. -MD
46: VPATH = $(OBJROOT)/$(BUILD_DIR):$(SYMROOT)/$(BUILD_DIR):$(MACHINE):$(OPT_VPATH)
47: EXEC_LD= /bin/cc
48: RELOC_LD= /bin/ld
49: KL_LD= /usr/bin/kl_ld
50:
51: m88k_CFLAGS=
52: m68k_CFLAGS=
53: i386_CFLAGS=
54: MD_CFLAGS= $(${MACHINE}_CFLAGS)
55:
56: #
57: # For building user-level executable .o file.
58: #
59: # Forcing dependency on both SYMROOT and OBJROOT is necessary here to avoid
60: # making actual binary builds dependent on the modify date of the directory
61: # they are in - in such a case, successive makes would repeatedly build the
62: # binary since the modify time of one of its dependencies keeps getting
63: # changed. If SYMROOT and OBJROOT are identical (as in normal developement
64: # builds, in which case they're both '.'), we'll get a warning because
65: # there will be two rules for building '.'. This won't break anything.
66: #
67: # NRW_BUILD is currently defined to allow testing of IODeviceNRW stuff on
68: # 68k platforms.
69: #
70: release: $(SYMROOT) $(OBJROOT) always
71: @echo '********** Building $(MACHINE) release $(BUILD_NAME) **********'
72: $(MAKE) $(BUILD_NAME) \
73: "BUILD_DIR=$(MACHINE)release" \
74: "OBJROOT=$(OBJROOT)" \
75: "SYMROOT=$(SYMROOT)" \
76: "MACHINE=$(MACHINE)" \
77: "LIBS=$(RELEASE_LIBS)" \
78: "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
79: "LDFLAGS= $(RELEASE_LDFLAGS)" \
80: "OTHER_CFLAGS=$(RELEASE_CFLAGS) $(MD_CFLAGS) \
81: -arch $(MACHINE) $(IO_SERVER) "
82:
83: debug: $(SYMROOT) $(OBJROOT) always
84: @echo '********** Building $(MACHINE) debug $(BUILD_NAME) **********'
85: $(MAKE) $(BUILD_NAME) \
86: "BUILD_DIR=$(MACHINE)debug" \
87: "OBJROOT=$(OBJROOT)" \
88: "SYMROOT=$(SYMROOT)" \
89: "MACHINE=$(MACHINE)" \
90: "CFLAGS=-DDEBUG -DDDM_DEBUG $(CFLAGS)" \
91: "LIBS=$(DEBUG_LIBS)" \
92: "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
93: "LDFLAGS= $(DEBUG_LDFLAGS)" \
94: "OTHER_CFLAGS=$(DEBUG_CFLAGS) $(MD_CFLAGS) \
95: -arch $(MACHINE) $(IO_SERVER) "
96:
97: #
98: # For building kern-loadable modules.
99: #
100: relocrelease: $(SYMROOT) $(OBJROOT) always
101: @echo '******** Building $(MACHINE) $(BUILD_NAME)_reloc ********'
102: $(MAKE) $(BUILD_NAME)_reloc \
103: "BUILD_DIR=$(MACHINE)relocrelease" \
104: "OBJROOT=$(OBJROOT)" \
105: "SYMROOT=$(SYMROOT)" \
106: "MACHINE=$(MACHINE)" \
107: "LIBS=$(RELEASE_KERN_LIBS)" \
108: "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
109: "LDFLAGS= $(KL_RELEASE_FLAGS)" \
110: "OTHER_CFLAGS=$(RELEASE_CFLAGS) -arch $(MACHINE) \
111: -DKERNEL -DMACH_USER_API -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders"
112:
113: relocdebug: $(SYMROOT) $(OBJROOT) always
114: @echo '******** Building $(MACHINE) debug $(BUILD_NAME)_reloc ********'
115: $(MAKE) $(BUILD_NAME)_reloc \
116: "BUILD_DIR=$(MACHINE)relocdebug" \
117: "OBJROOT=$(OBJROOT)" \
118: "SYMROOT=$(SYMROOT)" \
119: "MACHINE=$(MACHINE)" \
120: "LIBS=$(DEBUG_KERN_LIBS)" \
121: "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
122: "LDFLAGS= $(KL_DEBUG_FLAGS)" \
123: "OTHER_CFLAGS=$(DEBUG_CFLAGS) -arch $(MACHINE) \
124: -DKERNEL -DMACH_USER_API -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders \
125: -DDEBUG -DDDM_DEBUG"
126:
127: all: targets lipoize tags
128:
129: #
130: # Build all targets.
131: #
132: targets: always
133: @if [ -n "$(RC_ARCHS_LOCAL)" ]; then \
134: machines="$(RC_ARCHS_LOCAL)"; \
135: elif [ -n "$(RC_ARCHS)" ]; then \
136: machines="$(RC_ARCHS)"; \
137: elif [ -n "$(MACHINE_LIST)" ]; then \
138: machines="$(MACHINE_LIST)"; \
139: elif [ -n "$(MACHINE)" ]; then \
140: machines="$(MACHINE)"; \
141: else \
142: echo no machine list found; \
143: exit 1; \
144: fi; \
145: for machine in $$machines; do \
146: echo "========== Building all for $$machine =========="; \
147: $(MAKE) $(TARGET_LIST) \
148: "MACHINE=$$machine" \
149: "OBJROOT=$(OBJROOT)" \
150: "SYMROOT=$(SYMROOT)" \
151: "DSTROOT=$(DSTROOT)"; \
152: done
153:
154: #
155: # Create fat versions if necessary. If there is more than
156: # one machine in INSTALL_MACHINES, lipo together all
157: # architectures for each INSTALL_TARGET. In either case,
158: # installable target(s) are left in $(SYMROOT).
159: #
160: lipoize: always
161: @if [ -n "$(RC_ARCHS_LOCAL)" ]; then \
162: machines="$(RC_ARCHS_LOCAL)"; \
163: elif [ -n "$(RC_ARCHS)" ]; then \
164: machines="$(RC_ARCHS)"; \
165: elif [ -n "$(INSTALL_MACHINES)" ]; then \
166: machines="$(INSTALL_MACHINES)"; \
167: elif [ -n "$(MACHINE)" ]; then \
168: machines="$(MACHINE)"; \
169: else \
170: echo no machine list found; \
171: exit 1; \
172: fi; \
173: for target in $(TARGET_LIST); do \
174: if [ $$target = relocrelease ]; then \
175: modname="$(BUILD_NAME)_reloc"; \
176: elif [ $$target = relocdebug ]; then \
177: modname="$(BUILD_NAME)_reloc"; \
178: else \
179: modname="$(BUILD_NAME)"; \
180: fi; \
181: echo rm -f $(SYMROOT)/$$modname; \
182: rm -f $(SYMROOT)/$$modname; \
183: if [ "`echo $$machines | wc -w`" -eq 1 ]; then \
184: machine=$$machines; \
185: echo cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
186: cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
187: else \
188: args=""; \
189: for machine in $$machines; do \
190: args="$$args $(OBJROOT)/$$machine$$target""/$$modname"; \
191: done; \
192: echo lipo -create -output $(SYMROOT)/$$modname $$args; \
193: lipo -create -output $(SYMROOT)/$$modname $$args; \
194: fi; \
195: done
196:
197: install: DSTROOT $(DSTROOT)/$(INSTALL_BIN_DIR) targets lipoize \
198: installhdrs other_install
199: @echo cd $(SYMROOT); \
200: cd $(SYMROOT); \
201: for target in `echo $(INSTALL_TARGETS)`; do \
202: if [ $$target = relocrelease ]; then \
203: modname="$(BUILD_NAME)_reloc"; \
204: elif [ $$target = relocdebug ]; then \
205: modname="$(BUILD_NAME)_reloc"; \
206: else \
207: modname="$(BUILD_NAME)"; \
208: fi; \
209: echo install $(INSTALLFLAGS) $$modname $(DSTROOT)$(INSTALL_BIN_DIR); \
210: install $(INSTALLFLAGS) $$modname \
211: $(DSTROOT)$(INSTALL_BIN_DIR); \
212: done
213:
214: installsrc: SRCROOT $(SRCROOT)
215: #
216: # first install the common source (in this directory).
217: #
218: gnutar cf - $(COMMONSOURCE) Makefile | (cd $(SRCROOT); gnutar xpf -)
219: #
220: # now install all of the machine-dependent source (if there is any).
221: #
222: @if [ -n "${SOURCE_SUBDIRS}" ]; \
223: then \
224: SUBDIRS="$(SOURCE_SUBDIRS)"; \
225: else \
226: SUBDIRS=foo; \
227: fi; \
228: if [ -n "${SOURCE_SUBDIRS}" ]; \
229: then \
230: for i in $$SUBDIRS; \
231: do \
232: echo ================= make $@ for $$i =================; \
233: (cd $$i; ${MAKE} SRCROOT=$(SRCROOT)/$$i $@) || exit $?; \
234: done \
235: fi
236:
237: installhdrs: DSTROOT $(DSTROOT)/$(INSTALL_HDR_DIR)
238: #
239: # first install the public header files from this directory.
240: @if [ -n "${COMMON_PUBLIC_HFILES}" ]; \
241: then \
242: echo install -c -m 644 $(COMMON_PUBLIC_HFILES) $(DSTROOT)$(INSTALL_HDR_DIR); \
243: install -c -m 644 $(COMMON_PUBLIC_HFILES) \
244: $(DSTROOT)$(INSTALL_HDR_DIR); \
245: fi
246: #
247: # now install all of the machine-dependent headers (if there are any).
248: #
249: @if [ -n "${SOURCE_SUBDIRS}" ]; \
250: then \
251: SUBDIRS="$(SOURCE_SUBDIRS)"; \
252: else \
253: SUBDIRS=foo; \
254: fi; \
255: if [ -n "${SOURCE_SUBDIRS}" ]; \
256: then \
257: for i in $$SUBDIRS; \
258: do \
259: echo ================= make $@ for $$i =================; \
260: (cd $$i; ${MAKE} DSTDIR=$(DSTROOT)$(INSTALL_HDR_DIR) $@) || exit $?; \
261: done \
262: fi;
263:
264: $(OBJROOT)/$(BUILD_DIR) $(SYMROOT)/$(BUILD_DIR) \
265: $(DSTROOT)/$(INSTALL_BIN_DIR) $(DSTROOT)/$(INSTALL_HDR_DIR) \
266: $(OBJROOT) $(SRCROOT) $(SYMROOT):
267: $(MKDIRS) $@
268:
269: tags: $(OBJROOT) always
270: rm -f tags
271: ctags -o $(OBJROOT)/tags $(COMMONSOURCE)
272:
273: always:
274:
275: clean:
276: -rm -rf $(OBJROOT)/*debug \
277: $(OBJROOT)/*release \
278: $(OBJROOT)/*kerndebug \
279: $(OBJROOT)/*kernrelease \
280: $(OBJROOT)/*relocdebug \
281: $(OBJROOT)/*relocrelease \
282: $(SYMROOT)/$(BUILD_NAME) $(SYMROOT)/$(BUILD_NAME)_reloc \
283: *.d Makedep *~ tags $(OTHER_CLEAN_FILES)
284: @if [ -n "${SOURCE_SUBDIRS}" ]; \
285: then \
286: SUBDIRS="$(SOURCE_SUBDIRS)"; \
287: else \
288: SUBDIRS=foo; \
289: fi; \
290: if [ -n "${SOURCE_SUBDIRS}" ]; \
291: then \
292: for i in $$SUBDIRS; \
293: do \
294: echo ================= make $@ for $$i =================; \
295: (cd $$i; ${MAKE} $@) || exit $?; \
296: done \
297: fi
298:
299: #
300: # Build executable and relocatable .o.
301: #
302: # setting LDFLAGS to '-r' in the device-specific Makefile prevents
303: # an executable from being generated.
304: #
305: # Main Makefile may define OTHER_DEPENDS.
306: #
307: $(BUILD_NAME): $(OBJROOT)/$(BUILD_DIR) $(OTHER_DEPENDS) $(OFILES)
308: $(LD) -arch $(MACHINE) $(LDFLAGS) -o $(OBJROOT)/$(BUILD_DIR)/$@ \
309: $(OFILES) $(LIBS)
310:
311: #
312: # Build kern-loadable relocatable.
313: # Main Makefile Must define:
314: # SERVER_NAME
315: # KS_VAR_NAME
316: #
317: # May define:
318: # OTHER_DEPENDS (typically which will force a mig run).
319: #
320: $(BUILD_NAME)_reloc: $(OBJROOT)/$(BUILD_DIR) \
321: $(OTHER_DEPENDS) $(OFILES) $(LOAD_COMMANDS) \
322: $(UNLOAD_COMMANDS)
323: @if [ -n "${UNLOAD_COMMANDS}" ]; \
324: then \
325: UNLOAD="-u $(UNLOAD_COMMANDS)"; \
326: else \
327: UNLOAD=" "; \
328: fi; \
329: echo $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
330: $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
331: -o $(OBJROOT)/$(BUILD_DIR)/$@ $(OFILES) $(LIBS); \
332: $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
333: $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
334: -o $(OBJROOT)/$(BUILD_DIR)/$@ $(OFILES) $(LIBS)
335:
336: #
337: # The additional -I here picks up possible header files which are
338: # created in the build directory (say, by MIG).
339: #
340: .c.o:
341: $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $(*F).c \
342: -I$(OBJROOT)/$(BUILD_DIR) \
343: -dependency-file $(OBJROOT)/$(BUILD_DIR)/$(*F).d \
344: -o $(OBJROOT)/$(BUILD_DIR)/$(*F).o
345: md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$(*F).d
346:
347: .m.o:
348: $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $(*F).m \
349: -I$(OBJROOT)/$(BUILD_DIR) \
350: -dependency-file $(OBJROOT)/$(BUILD_DIR)/$(*F).d \
351: -o $(OBJROOT)/$(BUILD_DIR)/$(*F).o
352: md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$(*F).d
353:
354: SRCROOT DSTROOT:
355: @if [ -n "${$@}" ]; \
356: then \
357: exit 0; \
358: else \
359: echo Must define $@; \
360: exit 1; \
361: fi
362:
363: -include Makedep
364:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.