|
|
1.1 root 1: #
2: # Makefile for libDriver.
3: #
4: # Builds up to 32 targets:
5: # i386 and ppc
6: # both DEBUG and RELEASE
7: # both kernel and user mode
8: # both stripped and unstripped
9: #
10: # Currently the stripped versions are installed in /usr/local/lib/driverkit.
11: # Eventually they'll be installed in /usr/lib/driverkit.
12: #
13:
14: MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
15: include $(MAKEFILEDIR)/platform.make
16:
17: BUILD_NAME=libDriver
18: BUILD_VERS=.A
19: COMPAT_VERS=122
20:
21: ifneq "" "$(wildcard /bin/mkdirs)"
22: MKDIRS = /bin/mkdirs
23: else
24: MKDIRS = /bin/mkdir -p
25: endif
26:
27: INSTALL_DIR= /usr/lib/
28: INSTALL_LOCAL_DIR= /usr/local/lib/
29: INSTALLHDRS_LOCAL_DIR=$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Versions/B/PrivateHeaders/driverkit
30: AUDIOHDRS_LOCAL_DIR=$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Versions/B/PrivateHeaders/audio
31:
32: #
33: # OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
34: # source. OBJDIR is where libraries are built. .o files are placed in
35: # OBJROOT/xxx, where xxx is something like 68kDebug or i386Release.
36: #
37: #
38: OBJROOT= .
39: SYMROOT= .
40: OBJDIR=$(OBJROOT)/libs
41: SYMDIR=$(SYMROOT)/syms
42:
43: #
44: # Directories containing 'mode-dependent' source.
45: #
46: SOURCE_DIRS= User Kernel ppc i386 eisa pci pcmcia
47:
48: AR= ar
49: LD= ld
50: CC= cc
51: MIG= /usr/bin/mig
52:
53: MACHINE=i386
54: MACHINE_LIST=ppc i386
55: BUS_LIST=eisa pci pcmcia
56:
57: ARFLAGS= rucv
58: ARCHFULL_RC_CFLAGS = $(foreach X, $(RC_ARCHS),$(addprefix -arch , $(X)))
59: ARCHLESS_RC_CFLAGS = $(filter-out $(ARCHFULL_RC_CFLAGS), $(RC_CFLAGS))
60:
61: #COMMON_CFLAGS = -g $(ARCHLESS_RC_CFLAGS) -fno-omit-frame-pointer -I.. -I. -MD -I$(LOCAL_DEVELOPER_DIR)/Headers -Wformat -Wno-precomp -D_POSIX_SOURCE -static
62:
63: COMMON_CFLAGS = -g -nostdinc $(ARCHLESS_RC_CFLAGS) -fno-omit-frame-pointer -I.. -I. -MD -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders/bsd -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders/machdep -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers/bsd -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks -Wformat -Wno-precomp -traditional-cpp
64:
65: DEBUG_CFLAGS= -g -DDEBUG -DDDM_DEBUG
66: PROFILE_CFLAGS= -pg
67: RELEASE_CFLAGS= -g -O2
68:
69: #KERN_CFLAGS= -D_KERNEL -DKERNEL -DMACH_USER_API -DDRIVER_PRIVATE
70: KERN_CFLAGS= -static -DNCPUS=1 -D_KERNEL -DKERNEL -DMACH_USER_API -DDRIVER_PRIVATE
71: USER_CFLAGS=
72: ppc_CFLAGS= -msoft-float -force_cpusubtype_ALL -mcpu=604 -finline -fno-keep-inline-functions -Wno-four-char-constants
73: i386_CFLAGS= -force_cpusubtype_ALL
74: MD_CFLAGS= $(${MACHINE}_CFLAGS)
75:
76: INSTALLFLAGS= -c -m 644
77: LIBINSTALLFLAGS= -c -m 555 -S "-S"
78: KERNLIBINSTALLFLAGS= -c -m 555
79: INSTALL= /usr/bin/install
80:
81: #
82: # Source files common to all builds.
83: #
84: COMMON_MFILES= IODevice.m
85: COMMON_CFILES=
86:
87: #
88: # Debug-only source files.
89: #
90: DEBUG_MFILES=
91: DEBUG_CFILES=
92:
93: #
94: # Kernel/user dependent, machine independent source files appearing in
95: # both User/ and Kernel/.
96: #
97: # 8-Nov-91 - NX*Lock now in libsys...
98: #
99: MODE_MFILES= IOConfigTable.m generalFuncs.m
100: MODE_CFILES= memcpy.c
101:
102: #
103: # Kernel-only and User-only source files.
104: #
105: KERNEL_MFILES= IODisk.m IOLogicalDisk.m IODiskPartition.m volCheck.m \
106: IODeviceDescription.m IODirectDevice.m NXSpinLock.m \
107: NXConditionLock.m NXLock.m generalFuncsPrivate.m IOBufDevice.m \
108: IONetwork.m IONetbufQueue.m devswAndVfssw.m IOEthernet.m \
109: IOEthernetDebugger.m IOSCSIController.m kernelDiskMethods.m \
110: SCSIDisk.m SCSIDiskPrivate.m SCSIDiskThread.m SCSIGeneric.m \
111: SCSIGlobals.m IODisplay.m IOMemoryContainer.m \
112: IOMemoryDescriptor.m IOSimpleMemoryDescriptor.m EventDriver.m \
113: EventInput.m EventIO.m IOEventSource.m KeyMap.m IOAudio.m \
114: AudioChannel.m AudioStream.m InputStream.m OutputStream.m \
115: AudioCommand.m audio_kern_server.m audio_server.m snd_server.m \
116: IOBuffer.m
117: KERNEL_CFILES= disk_label.c dma.c label_subr.c snd_reply.c audio_mix.c \
118: audio_peak.c audio_mulaw.c
119:
120: USER_MFILES= IODeviceMaster.m NXConditionLock.m NXLock.m NXSpinLock.m
121: USER_CFILES=
122:
123: #
124: # MI bus files
125: #
126: eisa_BUS_MFILES= IOEISADirectDevice.m IOEISADeviceDescription.m \
127: IOEISADMATransferBuffer.m
128: eisa_BUS_CFILES=
129:
130: pci_BUS_MFILES= IOPCIDirectDevice.m IOPCIDeviceDescription.m
131: pci_BUS_CFILES=
132:
133: pcmcia_BUS_MFILES= IOPCMCIADirectDevice.m IOPCMCIADeviceDescription.m \
134: IOPCMCIATuple.m
135: pcmcia_BUS_CFILES=
136:
137:
138: #
139: # User C files generated by mig.
140: #
141: CONFIG_CFILES= ConfigUser.c
142: DRIVER_SERVER_CFILES= driverServerUser.c
143: USER_MIG_CFILES= $(DRIVER_SERVER_CFILES)
144:
145: #
146: # Kernel C files generated by mig
147: #
148: EVENT_CFILES= EventServer.c
149: KERNEL_MIG_CFILES= $(EVENT_CFILES)
150: AUDIO_SERVER_CFILES= audioServer.c
151: AUDIO_REPLY_CFILES= audioReplyUser.c
152: AUDIO_CFILES= $(AUDIO_SERVER_CFILES) $(AUDIO_REPLY_CFILES)
153: KERNEL_MIG_CFILES= $(EVENT_CFILES) $(AUDIO_CFILES)
154:
155: #
156: # Force mig to run before audio source is compiled.
157: #
158: OTHER_KERN_DEPENDS= $(AUDIO_CFILES)
159:
160: #
161: # Mig source.
162: #
163: CONFIG_MIG_SOURCE= Config.defs
164: DRIVER_SERVER_MIG_SOURCE= driverServer.defs
165: EVENT_MIG_SOURCE= Event.defs
166: AUDIO_SERVER_MIG_SOURCE= audio.defs
167: AUDIO_REPLY_MIG_SOURCE= audioReply.defs
168:
169: #
170: # machine dependent source files - user, kernel, common.
171: #
172: i386_KERN_CFILES= $(eisa_BUS_CFILES) $(pci_BUS_CFILES) $(pcmcia_BUS_CFILES)
173: i386_USER_CFILES=
174: i386_CFILES=
175: i386_KERN_MFILES= $(eisa_BUS_MFILES) $(pci_BUS_MFILES) $(pcmcia_BUS_MFILES)\
176: IOFrameBufferDisplay.m \
177: IOSVGADisplay.m IOVPCodeDisplay.m \
178: IOMallocLow.m machdepFuncs.m
179: i386_USER_MFILES=
180: i386_MFILES=
181:
182: ppc_USER_CFILES=
183: ppc_CFILES=
184: ppc_KERN_MFILES= IOPPCDirectDevice.m IOPPCDeviceDescription.m IOPropertyTable.m \
185: IODeviceTreeBus.m IOTreeDevice.m IOFramebuffer.m IODBDMA.m \
186: IOMacRiscPCI.m IOPCIDevice.m \
187: IOSmartDisplay.m IONDRVFramebuffer.m IONDRVInterface.m IONDRVLibraries.m
188: ppc_KERN_CFILES= IOPEFLoader.c IOPEFInternals.c
189:
190: ppc_USER_MFILES=
191: ppc_MFILES=
192:
193: MD_KERN_CFILES= $(${MACHINE}_KERN_CFILES)
194: MD_USER_CFILES= $(${MACHINE}_USER_CFILES)
195: MD_CFILES= $(${MACHINE}_CFILES)
196: MD_KERN_MFILES= $(${MACHINE}_KERN_MFILES)
197: MD_USER_MFILES= $(${MACHINE}_USER_MFILES)
198: MD_MFILES= $(${MACHINE}_MFILES)
199:
200: #
201: # Other files to installsrc (in addition to *.[mch]).
202: #
203: OTHER_SOURCE= Makefile $(DRIVER_SERVER_MIG_SOURCE) \
204: Kernel/$(EVENT_MIG_SOURCE) \
205: Kernel/$(AUDIO_SERVER_MIG_SOURCE) \
206: Kernel/$(AUDIO_REPLY_MIG_SOURCE)
207: #
208: # Common targets.
209: #
210: first debug: $(MACHINE)kernrelease
211: debug: $(MACHINE)kerndebug
212: release: $(MACHINE)release
213: profile: $(MACHINE)profile
214: kerndebug: $(MACHINE)kerndebug
215: kernrelease: $(MACHINE)kernrelease
216: kernprofile: $(MACHINE)kernprofile
217: libs: libraries lipoize
218: all: libs
219: TARGET_LIST= release kernrelease profile
220:
221: VPATH = $(BUILD_DIR):$(OBJDIR):$(SYMDIR):$(MODE_DIRS)
222:
223: BUILD_DIRS = ppcRelease i386Release \
224: ppcProfile i386Profile \
225: ppcDebug i386Debug \
226: ppcKernRelease i386KernRelease \
227: ppcKernDebug i386KernDebug
228:
229: #
230: # Object files.
231: #
232: COMMON_OFILES= $(COMMON_MFILES:.m=.o) \
233: $(COMMON_CFILES:.c=.o) \
234: $(MODE_MFILES:.m=.o) \
235: $(MODE_CFILES:.c=.o)
236:
237: DEBUG_OFILES= $(DEBUG_MFILES:.m=.o) \
238: $(DEBUG_CFILES:.c=.o)
239:
240: KERNEL_OFILES= $(KERNEL_MFILES:.m=.o) \
241: $(KERNEL_CFILES:.c=.o) \
242: $(KERNEL_MIG_CFILES:.c=.o)
243:
244: BUS_OFILES= $(BUS_MFILES:.m=.o) \
245: $(BUS_CFILES:.c=.o)
246:
247: USER_OFILES= $(USER_MFILES:.m=.o) \
248: $(USER_CFILES:.c=.o) \
249: $(USER_MIG_CFILES:.c=.o)
250:
251: MD_OFILES= $(MD_MFILES:.m=.o) \
252: $(MD_CFILES:.c=.o)
253:
254: #
255: # Enumerate all object files for each target.
256: #
257: KERN_MD_OFILES= $(COMMON_OFILES) \
258: $(KERNEL_OFILES) \
259: $(BUS_OFILES) \
260: $(MD_OFILES) \
261: $(MD_KERN_MFILES:.m=.o) \
262: $(MD_KERN_CFILES:.c=.o)
263:
264:
265: USER_MD_OFILES= $(COMMON_OFILES) \
266: $(USER_OFILES) \
267: $(MD_OFILES) \
268: $(MD_USER_MFILES:.m=.o) \
269: $(MD_USER_CFILES:.c=.o)
270:
271:
272: #
273: # Enumerate mode directories for each target. These get added to VPATH.
274: #
275: USER_DIRS= User
276: KERNEL_DIRS= Kernel:eisa:pci:pcmcia
277:
278: #
279: # Recursive rules to invoke various target builds.
280: #
281: # $(MACHINE) must resolve to exactly one of {i386,ppc}
282: # at this time.
283: #
284: #
285:
286: $(MACHINE)release: $(SYMDIR) always
287: @echo '********** Building $(BUILD_NAME)$(MACHINE).dylib **********'
288: ARCH_DIR="$(MACHINE)"; \
289: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE).dylib \
290: "BUILD_DIR=$(OBJROOT)/$(MACHINE)Release" \
291: "MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
292: "OBJROOT=$(OBJROOT)" \
293: "SYMROOT=$(SYMROOT)" \
294: "MACHINE=$(MACHINE)" \
295: "FRAMEWORK=System" \
296: "OFILES=$(USER_MD_OFILES)" \
297: "OTHER_CFLAGS=$(RELEASE_CFLAGS) $(USER_CFLAGS) \
298: $(MD_CFLAGS) -arch $(MACHINE)"
299:
300: $(MACHINE)profile: $(SYMDIR) always
301: @echo '********** Building $(BUILD_NAME)$(MACHINE)_profile.dylib **********'
302: ARCH_DIR="$(MACHINE)"; \
303: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_profile.dylib \
304: "BUILD_DIR=$(OBJROOT)/$(MACHINE)Profile" \
305: "MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
306: "OBJROOT=$(OBJROOT)" \
307: "SYMROOT=$(SYMROOT)" \
308: "MACHINE=$(MACHINE)" \
309: "FRAMEWORK=System,_profile" \
310: "OFILES=$(USER_MD_OFILES)" \
311: "OTHER_CFLAGS=$(PROFILE_CFLAGS) $(USER_CFLAGS) \
312: $(MD_CFLAGS) -arch $(MACHINE)"
313:
314: $(MACHINE)debug: $(SYMDIR) always
315: @echo '********** Building $(BUILD_NAME)$(MACHINE)_g.dylib ***********'
316: ARCH_DIR="$(MACHINE)"; \
317: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_g.dylib \
318: "BUILD_DIR=$(OBJROOT)/$(MACHINE)Debug" \
319: "MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
320: "OBJROOT=$(OBJROOT)" \
321: "SYMROOT=$(SYMROOT)" \
322: "MACHINE=$(MACHINE)" \
323: "FRAMEWORK=System" \
324: "OFILES=$(USER_MD_OFILES) $(DEBUG_OFILES)" \
325: "OTHER_CFLAGS=$(DEBUG_CFLAGS) $(USER_CFLAGS) \
326: $(MD_CFLAGS) -arch $(MACHINE)"
327:
328: $(MACHINE)kernrelease: $(SYMDIR) always
329: @echo '********** Building $(BUILD_NAME)$(MACHINE)_kern.o **********'
330: ARCH_DIR="$(MACHINE)"; \
331: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o \
332: "BUILD_DIR=$(OBJROOT)/$(MACHINE)KernRelease" \
333: "OFILES=$(KERN_MD_OFILES)" \
334: "OBJROOT=$(OBJROOT)" \
335: "SYMROOT=$(SYMROOT)" \
336: "MACHINE=$(MACHINE)" \
337: "MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
338: "OTHER_CFLAGS=$(RELEASE_CFLAGS) $(KERN_CFLAGS) \
339: $(MD_CFLAGS) -arch $(MACHINE)"
340:
341: $(MACHINE)kernprofile: $(SYMDIR) always
342: @echo '********** Building $(BUILD_NAME)$(MACHINE)_kern.o **********'
343: ARCH_DIR="$(MACHINE)"; \
344: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o \
345: "BUILD_DIR=$(OBJROOT)/$(MACHINE)KernProfile" \
346: "OFILES=$(KERN_MD_OFILES)" \
347: "OBJROOT=$(OBJROOT)" \
348: "SYMROOT=$(SYMROOT)" \
349: "MACHINE=$(MACHINE)" \
350: "MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
351: "OTHER_CFLAGS=$(PROFILE_CFLAGS) $(KERN_CFLAGS) \
352: $(MD_CFLAGS) -arch $(MACHINE)"
353:
354: $(MACHINE)kerndebug: $(SYMDIR) always
355: @echo '********** Building $(BUILD_NAME)$(MACHINE)_kern_g.o **********'
356: ARCH_DIR="$(MACHINE)"; \
357: $(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern_g.o \
358: "BUILD_DIR=$(OBJROOT)/$(MACHINE)KernDebug" \
359: "OFILES=$(KERN_MD_OFILES) $(DEBUG_OFILES)" \
360: "OBJROOT=$(OBJROOT)" \
361: "SYMROOT=$(SYMROOT)" \
362: "MACHINE=$(MACHINE)" \
363: "MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
364: "OTHER_CFLAGS=$(DEBUG_CFLAGS) $(KERN_CFLAGS) \
365: $(MD_CFLAGS) -arch $(MACHINE)"
366:
367: #
368: # Project management make rules.
369: #
370: # Note that this clean rule doesn't delete the build directories
371: # in OBJROOT, but I think that's OK; RC does that for us.
372: clean: always
373: rm -rf $(BUILD_DIRS) *.d *~ libs syms Makedep tags
374:
375: tags: always
376: rm -f tags
377: ctags -o $(SYMROOT)/tags *.[hm]
378: @for i in $(SOURCE_DIRS); \
379: do \
380: echo ================= make $@ for $$i =================; \
381: (cd $$i; ${MAKE} $@) || exit $?; \
382: done
383:
384: always:
385:
386: installsrc: SRCROOT $(SRCROOT)
387: #
388: # first install the common source (in this directory).
389: #
390: gnutar cf - *.[mch] $(OTHER_SOURCE) | (cd $(SRCROOT); gnutar xpf -)
391: #
392: # now install all of the mode-dependent source.
393: #
394: @for i in $(SOURCE_DIRS); \
395: do \
396: echo ================= make $@ for $$i =================; \
397: (cd $$i; ${MAKE} SRCROOT=$(SRCROOT)/$$i $@) || exit $?; \
398: done
399:
400:
401: USER_EXPORT_LIB_SUFFIXES= .dylib _profile.dylib
402: USER_LOCAL_LIB_SUFFIXES=
403: KERN_LIB_SUFFIXES= _kern.o
404: USER_LIB_SUFFIXES= $(USER_EXPORT_LIB_SUFFIXES) $(USER_LOCAL_LIB_SUFFIXES)
405:
406: #
407: # We only export release versions of the user library to /usr/lib. All
408: # others go to /usr/local/lib.
409: #
410: EXPORT_LIB_SUFFIXES= $(USER_EXPORT_LIB_SUFFIXES)
411: LOCAL_LIB_SUFFIXES= $(KERN_LIB_SUFFIXES) $(USER_LOCAL_LIB_SUFFIXES)
412:
413: install: DSTROOT $(DSTROOT)$(INSTALL_DIR) libraries lipoize install_only
414:
415: #
416: # Target to just install, not build. Fat libraries must exist; this doesn't
417: # build them.
418: #
419: # FIXME - strip the archives on the way out to DSTROOT.
420: #
421: install_only: installhdrs DSTROOT $(DSTROOT)$(INSTALL_DIR) \
422: $(DSTROOT)$(INSTALL_LOCAL_DIR) ALWAYS
423: #
424: # Now our binaries.
425: #
426: @for libsuffix in $(EXPORT_LIB_SUFFIXES); do \
427: libname=`echo $(BUILD_NAME)$$libsuffix | sed -e 's/\./$(BUILD_VERS)./'`; \
428: liblinkname=$(BUILD_NAME)$$libsuffix; \
429: CWD=`pwd`; \
430: echo cd $(SYMROOT)/syms; \
431: cd $(SYMROOT)/syms; \
432: echo install $(LIBINSTALLFLAGS) $$libname \
433: $(DSTROOT)$(INSTALL_DIR); \
434: $(INSTALL) $(LIBINSTALLFLAGS) $$libname \
435: $(DSTROOT)$(INSTALL_DIR); \
436: echo cd $(DSTROOT)$(INSTALL_DIR); \
437: cd $(DSTROOT)$(INSTALL_DIR); \
438: echo ln -sf $$libname $$liblinkname; \
439: ln -sf $$libname $$liblinkname; \
440: echo cd $$CWD; \
441: cd $$CWD; \
442: done
443: @for libsuffix in $(LOCAL_LIB_SUFFIXES); do \
444: libname=$(BUILD_NAME)$$libsuffix; \
445: CWD=`pwd`; \
446: echo cd $(SYMROOT)/syms; \
447: cd $(SYMROOT)/syms; \
448: echo install $(KERNLIBINSTALLFLAGS) $$libname $(DSTROOT)$(INSTALL_LOCAL_DIR); \
449: $(INSTALL) $(KERNLIBINSTALLFLAGS) $$libname \
450: $(DSTROOT)$(INSTALL_LOCAL_DIR); \
451: echo cd $$CWD; \
452: cd $$CWD; \
453: done
454:
455: #
456: # Build all of the individual archives as appropriate.
457: #
458: libraries: ALWAYS
459: @if [ -n "$(RC_ARCHS)" ]; then \
460: machines="$(RC_ARCHS)"; \
461: elif [ -n "$(MACHINE_LIST)" ]; then \
462: machines="$(MACHINE_LIST)"; \
463: elif [ -n "$(MACHINE)" ]; then \
464: machines="$(MACHINE)"; \
465: else \
466: echo no machine list found; \
467: exit 1; \
468: fi; \
469: echo Building architecture-specific libraries for $$machines...; \
470: for machine in $$machines; do \
471: $(MAKE) $(TARGET_LIST) \
472: "MACHINE=$$machine" \
473: "OBJROOT=$(OBJROOT)" \
474: "SYMROOT=$(SYMROOT)" \
475: "DSTROOT=$(DSTROOT)"; \
476: done
477:
478: #
479: # Lipo the libraries for the various architectures together. This target
480: # assumes that the constituent libraries have already been built.
481: #
482: lipoize: ALWAYS
483: @if [ -n "$(RC_ARCHS)" ]; then \
484: machines="$(RC_ARCHS)"; \
485: elif [ -n "$(MACHINE_LIST)" ]; then \
486: machines="$(MACHINE_LIST)"; \
487: elif [ -n "$(MACHINE)" ]; then \
488: machines="$(MACHINE)"; \
489: else \
490: echo no machine list found; \
491: exit 1; \
492: fi; \
493: echo Building fat user archives...; \
494: echo cd $(SYMROOT)/syms; \
495: cd $(SYMROOT)/syms; \
496: for libsuffix in $(USER_LIB_SUFFIXES); do \
497: args=""; \
498: libname=`echo $(BUILD_NAME)$$libsuffix | sed -e 's/\./$(BUILD_VERS)./'`; \
499: for machine in $$machines; do \
500: args="$$args $(BUILD_NAME)""$$machine""$$libsuffix"; \
501: done; \
502: echo lipo -create -o $$libname $$args; \
503: lipo -create -o $$libname $$args; \
504: done; \
505: echo Building fat kernel relocatables...; \
506: for libsuffix in $(KERN_LIB_SUFFIXES); do \
507: args=""; \
508: libname=$(BUILD_NAME)$$libsuffix; \
509: for machine in $$machines; do \
510: args="$$args $(BUILD_NAME)""$$machine""$$libsuffix"; \
511: done; \
512: echo lipo -create -o $$libname $$args; \
513: lipo -create -o $$libname $$args; \
514: echo touch $$libname; \
515: touch $$libname; \
516: done
517:
518: installhdrs: $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR) \
519: $(DSTROOT)/$(AUDIOHDRS_LOCAL_DIR)
520: #
521: # install mig source.
522: #
523: $(INSTALL) $(INSTALLFLAGS) $(DRIVER_SERVER_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
524: $(INSTALL) $(INSTALLFLAGS) Kernel/$(EVENT_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
525: $(INSTALL) $(INSTALLFLAGS) Kernel/$(AUDIO_SERVER_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
526: $(INSTALL) $(INSTALLFLAGS) Kernel/$(AUDIO_REPLY_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
527: $(INSTALL) $(INSTALLFLAGS) Kernel/audio_msgs.h $(DSTROOT)$(AUDIOHDRS_LOCAL_DIR)
528:
529: ALWAYS:
530:
531: $(BUILD_DIR) $(SRCROOT) $(DSTROOT)$(HEADER_DIR) $(OBJDIR) \
532: $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR) \
533: $(DSTROOT)/$(AUDIOHDRS_LOCAL_DIR) \
534: $(SYMDIR) $(DSTROOT)$(INSTALL_DIR) $(DSTROOT)$(INSTALL_LOCAL_DIR):
535: $(MKDIRS) $@
536:
537: SRCROOT DSTROOT:
538: @if [ -n "${$@}" ]; \
539: then \
540: exit 0; \
541: else \
542: echo Must define $@; \
543: exit 1; \
544: fi
545:
546: .c.o:
547: $(CC) $(COMMON_CFLAGS) $(OTHER_CFLAGS) -c $< \
548: -I$(BUILD_DIR) \
549: -dependency-file $(BUILD_DIR)/$(*F).d -o $(BUILD_DIR)/$(*F).o
550: md -u $(BUILD_DIR)/Makedep -f -d $(BUILD_DIR)/$(*F).d
551:
552: .m.o:
553: $(CC) $(COMMON_CFLAGS) $(OTHER_CFLAGS) -c $< \
554: -I$(BUILD_DIR) \
555: -dependency-file $(BUILD_DIR)/$(*F).d -o $(BUILD_DIR)/$(*F).o
556: md -u $(BUILD_DIR)/Makedep -f -d $(BUILD_DIR)/$(*F).d
557:
558: #
559: # Mig rules. We copy mig source down to the build directory because
560: # mig writes its output to cwd.
561: #
562: $(DRIVER_SERVER_CFILES): $(DRIVER_SERVER_MIG_SOURCE)
563: rm -f $(BUILD_DIR)/$(DRIVER_SERVER_CFILES)
564: rm -f $(BUILD_DIR)/$(DRIVER_SERVER_MIG_SOURCE)
565: cp $(DRIVER_SERVER_MIG_SOURCE) $(BUILD_DIR)
566: (cd $(BUILD_DIR); \
567: ${MIG} -arch $(MACHINE) -server /dev/null \
568: $(DRIVER_SERVER_MIG_SOURCE))
569:
570: $(CONFIG_CFILES): ../Config/$(CONFIG_MIG_SOURCE)
571: rm -f $(BUILD_DIR)/$(CONFIG_CFILES)
572: rm -f $(BUILD_DIR)/$(CONFIG_MIG_SOURCE)
573: cp ../Config/$(CONFIG_MIG_SOURCE) $(BUILD_DIR)
574: (cd $(BUILD_DIR); \
575: ${MIG} -arch $(MACHINE) -server /dev/null $(CONFIG_MIG_SOURCE))
576:
577: $(EVENT_CFILES): Kernel/$(EVENT_MIG_SOURCE)
578: rm -f $(BUILD_DIR)/$(EVENT_CFILES)
579: rm -f $(BUILD_DIR)/$(EVENT_MIG_SOURCE)
580: cp Kernel/$(EVENT_MIG_SOURCE) $(BUILD_DIR)
581: (cd $(BUILD_DIR); \
582: ${MIG} -arch $(MACHINE) -user /dev/null \
583: $(EVENT_MIG_SOURCE))
584:
585: $(AUDIO_SERVER_CFILES): Kernel/$(AUDIO_SERVER_MIG_SOURCE)
586: rm -f $(BUILD_DIR)/$(AUDIO_SERVER_CFILES)
587: rm -f $(BUILD_DIR)/$(AUDIO_SERVER_MIG_SOURCE)
588: cp Kernel/$(AUDIO_SERVER_MIG_SOURCE) $(BUILD_DIR)
589: (cd $(BUILD_DIR); \
590: ${MIG} -arch $(MACHINE) -user /dev/null \
591: $(AUDIO_SERVER_MIG_SOURCE))
592:
593: #
594: # FIXME: get rid of this sed hack to set timeout and SEND_SWITCH.
595: #
596: $(AUDIO_REPLY_CFILES): Kernel/$(AUDIO_REPLY_MIG_SOURCE)
597: rm -f $(BUILD_DIR)/$(AUDIO_REPLY_CFILES)
598: rm -f $(BUILD_DIR)/$(AUDIO_REPLY_MIG_SOURCE)
599: cp Kernel/$(AUDIO_REPLY_MIG_SOURCE) $(BUILD_DIR)
600: (cd $(BUILD_DIR); \
601: ${MIG} -arch $(MACHINE) -server /dev/null \
602: $(AUDIO_REPLY_MIG_SOURCE))
603: sed '/msg_send/s/MSG_OPTION_NONE, 0/SEND_TIMEOUT|SEND_SWITCH, 1000/' \
604: $(BUILD_DIR)/audioReplyUser.c > $(BUILD_DIR)/tempr_user.c
605: rm -f $(BUILD_DIR)/audioReplyUser.c
606: sed '/msg_rpc/s/RCV_TIMEOUT, 0/RCV_TIMEOUT|SEND_SWITCH, 1000/' \
607: $(BUILD_DIR)/tempr_user.c > $(BUILD_DIR)/audioReplyUser.c
608: rm -f $(BUILD_DIR)/tempr_user.c
609:
610: vers.o: $(OFILES)
611: rm -f $(BUILD_DIR)/vers.c
612: vers_string -l $(BUILD_NAME) > $(BUILD_DIR)/vers.c
613: $(CC) -arch $(MACHINE) $(ARCHLESS_RC_CFLAGS) -c $(BUILD_DIR)/vers.c \
614: -o $(BUILD_DIR)/vers.o
615:
616: #
617: # Rules to build the libraries. Kernel versions only build and install
618: # unstripped .o's; the kernel project strips the end result when it
619: # installs. (Note we build .o's for the kernel version to ensure that
620: # all object files are linked in, even those which might only be needed
621: # by loadable modules.) User versions build stripped versions in OBJDIR and
622: # unstripped in SYMDIR for debug. Stripped archives eventually get
623: # installed in INSTALL_DIR.
624: #
625: # Kernel versions:
626: #
627: $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o \
628: $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern_g.o: $(BUILD_DIR) \
629: $(OTHER_KERN_DEPENDS) $(OFILES) vers.o
630: @echo ----building kernel library----
631: $(LD) -r -o $@ $(OFILES) vers.o
632:
633: #
634: # User versions:
635: #
636: $(SYMDIR)/$(BUILD_NAME)$(MACHINE).dylib \
637: $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_profile.dylib \
638: $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_g.dylib: $(BUILD_DIR) $(OFILES) vers.o
639: @echo ----building user library----
640: @if [ -z "`vers_string -n`" ]; then \
641: echo libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)\
642: -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
643: -compatibility_version $(COMPAT_VERS); \
644: libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK) \
645: -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
646: -seg1addr 0x66700000 \
647: -compatibility_version $(COMPAT_VERS); \
648: else \
649: echo libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)\
650: -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
651: -compatibility_version $(COMPAT_VERS) \
652: -current_version "`vers_string -n`"; \
653: libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK) \
654: -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
655: -compatibility_version $(COMPAT_VERS) \
656: -seg1addr 0x66700000 \
657: -current_version "`vers_string -n`"; \
658: fi
659:
660: -include $(BUILD_DIR)/Makedep
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.