13 OBJROOT = $(PWD)/OBJROOT
19 SYMROOT = $(PWD)/SYMROOT
26 .ifdef ALTUSRLOCALLIBSYSTEM
27 LIBSYS = $(ALTUSRLOCALLIBSYSTEM)
29 LIBSYS = $(NEXT_ROOT)/usr/local/lib/system
31 NJOBS != perl -e '$$n = `/usr/sbin/sysctl -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)'
32 BSDMAKE = bsdmake -f Makefile
33 #BSDMAKEJ = $(BSDMAKE) -j $(NJOBS) -P
34 BSDMAKEJ = $(BSDMAKE) -j $(NJOBS)
36 # Set the DONT-BUILD-arch-form variable to non-empty to turn off building
37 #DONT-BUILD-x86_64-static = 1
39 # These variables are to guarantee that the left-hand side of an expression is
44 # Remove the arch stuff, since we know better here.
45 LOCAL_CFLAGS != echo $(RC_CFLAGS) | sed 's/ *-arch [^ ][^ ]*//g'
47 FORMS := dynamic debug profile static
51 ROOTS := DSTROOT OBJROOT SYMROOT
52 .for R in $(ROOTS) # {
58 # These are the non B&I defaults
59 .ifndef RC_ProjectName
61 installhdrs: roots installhdrs-real
62 build: roots build-static build-profile build-debug build-dynamic
63 install: roots installhdrs install-all
65 .else # RC_ProjectName
67 # And these are to deal with B&I building libc differently
68 # based on RC_ProjectName.
69 .if $(RC_ProjectName) == Libc
71 build: roots build-dynamic
72 install: roots BI-install-dynamic
74 .if $(RC_ProjectName) == Libc_headers
75 installhdrs: roots installhdrs-real
77 install: roots installhdrs-real
79 .if $(RC_ProjectName) == Libc_man
82 install: roots install-man
84 .if $(RC_ProjectName) == Libc_static
86 build: roots build-static
87 install: roots BI-install-static
89 .if $(RC_ProjectName) == Libc_debug
91 build: roots build-debug
92 install: roots BI-install-debug
94 .if $(RC_ProjectName) == Libc_profile
96 build: roots build-profile
97 install: roots BI-install-profile
99 .endif # RC_ProjectName
101 # Make a copy of System.framework/Versions/B/PrivateHeaders, with headers
102 # patched so that we can build variant symbols independently
103 SYSTEMFRAMEWORK = System.framework
104 VERSIONSB = Versions/B
105 PRIVATEHEADERPATH = $(SYSTEMFRAMEWORK)/$(VERSIONSB)/PrivateHeaders
106 FRAMEWORKS = $(OBJROOT)/Frameworks
107 .ifdef ALTFRAMEWORKSPATH
108 FRAMEWORKPATH = ${ALTFRAMEWORKSPATH}
110 FRAMEWORKPATH = ${NEXT_ROOT}/System/Library/Frameworks
113 $(SRCROOT)/patchHeaders $(FRAMEWORKPATH)/$(PRIVATEHEADERPATH) $(FRAMEWORKS)/$(PRIVATEHEADERPATH:H)
114 ln -fs $(VERSIONSB)/PrivateHeaders $(FRAMEWORKS)/$(SYSTEMFRAMEWORK)/PrivateHeaders
116 AUTOPATCHED = $(SRCROOT)/.autopatched
118 .for F in $(FORMS) # {
119 .if $(dynamic) == $(F) # {
124 PSUFFIX-$(F) = $(PARTIAL)$(SUFFIX-$(F))
126 .for A in $(RC_ARCHS) # {
127 .if empty(DONT-BUILD-$(A)-$(F)) # {
130 mkdir -p $(OBJROOT)/obj.$(A) && \
131 MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \
132 DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \
133 MAKEFLAGS="" CFLAGS="-arch $(A) $(LOCAL_CFLAGS)" $(BSDMAKEJ) libc$(SUFFIX-$(F)).a
136 @echo Not building libc$(PSUFFIX-$(F)).a for $(A)
140 NARCHS-$(F) != echo $(ARCHS-$(F)) | wc -w
142 build-$(F): $(FRAMEWORKS) $(AUTOPATCHED)
143 .for A in $(RC_ARCHS) # {
144 build-$(F): build-$(A)-$(F)
146 .if $(NARCHS-$(F)) == 0 # {
148 @echo No libc$(PSUFFIX-$(F)).a built
150 LIPOARGS-$(F) != perl -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libc$(SUFFIX-$(F)).a\"), qw($(ARCHS-$(F)))))'
152 .if $(NARCHS-$(F)) == 1 # {
153 cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libc$(SUFFIX-$(F)).a" "$(SYMROOT)/libc$(PSUFFIX-$(F)).a"
155 lipo -create $(LIPOARGS-$(F)) -output "$(SYMROOT)/libc$(PSUFFIX-$(F)).a"
160 # We autopatch the files into the directory containing the Makefile.inc. This
161 # will happen at installsrc.
164 for m in `find $(SRCROOT) -name Makefile.inc`; do \
165 cd `dirname $$m` && \
166 bsdmake -I $(SRCROOT) -f $(SRCROOT)/Makefile.inc -f Makefile.inc -f $(SRCROOT)/Makefile.autopatch autopatch LIB=c SRCROOT=$(SRCROOT) || \
172 pax -rw -p p . "$(SRCROOT)"
174 installsrc: copysrc $(AUTOPATCHED)
177 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \
178 DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \
179 $(BSDMAKEJ) installhdrs
180 .for A in $(RC_ARCHS) # {
181 mkdir -p "$(OBJROOT)/obj.$(A)" && \
182 MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \
183 DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \
184 MAKEFLAGS="" $(BSDMAKEJ) installhdrs-md
185 .endfor # RC_ARCHS # }
187 .for F in $(FORMS) # {
188 BI-install-$(F): build-$(F)
189 mkdir -p $(DSTROOT)/usr/local/lib/system
190 if [ -f "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" ]; then \
191 echo "Installing libc$(PSUFFIX-$(F)).a" && \
192 install -c -m 444 "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" \
193 $(DSTROOT)/usr/local/lib/system && \
194 ranlib "$(DSTROOT)/usr/local/lib/system/libc$(PSUFFIX-$(F)).a" || exit 1; \
196 .if $(dynamic) == $(F) # {
197 .for A in $(RC_ARCHS) # {
198 MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \
199 DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \
200 DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \
201 MAKEFLAGS="" $(BSDMAKE) copyfiles
202 .endfor # RC_ARCHS # }
206 # Don't use -j here; it may try to make links before the files are copied
207 MANARGS != test `id -u` -eq 0 || echo MINSTALL=/usr/bin/install
209 mkdir -p $(DSTROOT)/usr/share/man/man2
210 mkdir -p $(DSTROOT)/usr/share/man/man3
211 mkdir -p $(DSTROOT)/usr/share/man/man4
212 mkdir -p $(DSTROOT)/usr/share/man/man5
213 mkdir -p $(DSTROOT)/usr/share/man/man7
214 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" \
215 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \
216 MACHINE_ARCH="$(ARCH)" MAKEFLAGS="" \
217 $(BSDMAKE) autopatchman all-man maninstall $(MANARGS)
219 install-all: build install-man
220 .for F in $(FORMS) # {
221 install-all: BI-install-$(F)
225 .for F in $(FORMS) # {
226 rm -f $(SYMROOT)/libc$(PSUFFIX-$(F)).a
228 .for A in $(RC_ARCHS) # {
229 rm -rf $(OBJROOT)/obj.$(A)
230 .endfor # RC_ARCHS # }