.include .include ALLARCHS = arm i386 ppc ppc64 x86_64 # installsrc doesn't set RC_ARCHS TOP != ${PWD} .ifdef DSTROOT DESTDIR = $(DSTROOT) .else .ifdef DESTDIR DSTROOT = $(DESTDIR) .else DSTROOT = / DESTDIR = / .endif .endif .ifndef OBJROOT OBJROOT = $(TOP)/OBJROOT .endif .ifndef SRCROOT SRCROOT = $(TOP) .endif .ifndef SYMROOT SYMROOT = $(TOP)/SYMROOT .endif MYARCH != ${ARCH} .ifndef RC_ARCHS RC_ARCHS = $(MYARCH) RC_$(RC_ARCHS) = 1 .endif FIRST_ARCH != ${PERL} -e 'print $$ARGV[0]' ${RC_ARCHS} .ifndef RC_NONARCH_CFLAGS RC_NONARCH_CFLAGS = -pipe .endif .ifdef ALTUSRLOCALLIBSYSTEM LIBSYS = $(ALTUSRLOCALLIBSYSTEM) .else LIBSYS = $(SDKROOT)/usr/local/lib/system .endif NJOBS != ${PERL} -e '$$n = `$(SYSCTL) -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)' .ifdef DEBUG MYBSDMAKE = $(BSDMAKE) -f Makefile -P .else MYBSDMAKE = $(BSDMAKE) -f Makefile .endif MYBSDMAKEJ = $(MYBSDMAKE) -j $(NJOBS) # Set the DONT-BUILD-arch-form variable to non-empty to turn off building #DONT-BUILD-x86_64-static = 1 # These variables are to guarantee that the left-hand side of an expression is # always a variable dynamic = dynamic static = static # Map RC_ARCHS to MACHINE_ARCH .for A in $(RC_ARCHS) $(MYARCH) # { MACHINE_ARCH-$(A) = $(A:C/^armv.*/arm/) .endfor # RC_ARCHS } FORMS := dynamic debug profile static OBJSUFFIX-dynamic = So OBJSUFFIX-debug = do OBJSUFFIX-profile = po OBJSUFFIX-static = o all: build ROOTS := DSTROOT OBJROOT SYMROOT .for R in $(ROOTS) # { roots: $($(R)) $($(R)): ${MKDIR} '$($(R))' .endfor # ROOTS } # These are the non B&I defaults .ifndef RC_ProjectName installhdrs: roots installhdrs-real build: roots build-static build-profile build-debug build-dynamic install: roots installhdrs install-all .else # RC_ProjectName # And these are to deal with B&I building libc differently # based on RC_ProjectName. .if $(RC_ProjectName) == Libc installhdrs: build: roots build-dynamic install: roots BI-install-dynamic .endif .if $(RC_ProjectName) == Libc_headers installhdrs: roots installhdrs-real build: install: roots installhdrs-real .endif .if $(RC_ProjectName) == Libc_man installhdrs: build: install: roots install-man .endif .if $(RC_ProjectName) == Libc_static installhdrs: build: roots build-static install: roots BI-install-static .endif .if $(RC_ProjectName) == Libc_debug installhdrs: build: roots build-debug install: roots BI-install-debug .endif .if $(RC_ProjectName) == Libc_profile installhdrs: build: roots build-profile install: roots BI-install-profile .endif .endif # RC_ProjectName # Make a copy of System.framework/Versions/B/PrivateHeaders, with headers # patched so that we can build variant symbols independently SYSTEMFRAMEWORK = System.framework VERSIONSB = Versions/B PRIVATEHEADERPATH = $(SYSTEMFRAMEWORK)/$(VERSIONSB)/PrivateHeaders FRAMEWORKS = $(OBJROOT)/Frameworks .ifdef ALTFRAMEWORKSPATH FRAMEWORKPATH = ${ALTFRAMEWORKSPATH} .else FRAMEWORKPATH = ${SDKROOT}/System/Library/Frameworks .endif $(FRAMEWORKS): $(SRCROOT)/patchHeaders $(FRAMEWORKPATH)/$(PRIVATEHEADERPATH) $(FRAMEWORKS)/$(PRIVATEHEADERPATH:H) ${LN} -fs $(VERSIONSB)/PrivateHeaders $(FRAMEWORKS)/$(SYSTEMFRAMEWORK)/PrivateHeaders AUTOPATCHED = $(SRCROOT)/.autopatched PARTIAL = -partial .for F in $(FORMS) # { .if $(dynamic) == $(F) # { SUFFIX-$(F) = .else # } { SUFFIX-$(F) = _$(F) .endif # } PSUFFIX-$(F) = $(PARTIAL)$(SUFFIX-$(F)) .for A in $(RC_ARCHS) # { .if empty(DONT-BUILD-$(A)-$(F)) # { ARCHS-$(F) += $(A) build-$(A)-$(F): ${MKDIR} $(OBJROOT)/obj.$(A) && \ MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH=$(MACHINE_ARCH-$(A)) CCARCH=$(A) \ DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \ RC_NONARCH_CFLAGS="$(RC_NONARCH_CFLAGS)" MAKEFLAGS="" \ OBJSUFFIX="$(OBJSUFFIX-$(F))" \ $(MYBSDMAKEJ) libc$(SUFFIX-$(F)).a .else # } { build-$(A)-$(F): @echo Not building libc$(PSUFFIX-$(F)).a for $(A) .endif # } .endfor # RC_ARCHS } NARCHS-$(F) != ${ECHO} $(ARCHS-$(F)) | ${WC} -w build-$(F): $(FRAMEWORKS) $(AUTOPATCHED) .for A in $(RC_ARCHS) # { build-$(F): build-$(A)-$(F) .endfor # RC_ARCHS } .if $(NARCHS-$(F)) == 0 # { build-$(F): @echo No libc$(PSUFFIX-$(F)).a built .else # } { LIPOARGS-$(F) != ${PERL} -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libc$(SUFFIX-$(F)).a\"), qw($(ARCHS-$(F)))))' .if $(dynamic) == $(F) # { LIPODYLDARGS-$(F) != ${PERL} -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libc-dyld.a\"), qw($(ARCHS-$(F)))))' .endif # } build-$(F): .if $(NARCHS-$(F)) == 1 # { ${CP} "$(OBJROOT)/obj.$(RC_ARCHS)/libc$(SUFFIX-$(F)).a" "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" .if $(dynamic) == $(F) # { ${CP} "$(OBJROOT)/obj.$(RC_ARCHS)/libc-dyld.a" "$(SYMROOT)/libc-dyld.a" .endif # } .else # } { ${LIPO} -create $(LIPOARGS-$(F)) -output "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" .if $(dynamic) == $(F) # { ${LIPO} -create $(LIPODYLDARGS-$(F)) -output "$(SYMROOT)/libc-dyld.a" .endif # } .endif # } .endif # } .endfor # FORMS } # We autopatch the files into the directory containing the Makefile.inc. This # will happen at installsrc. $(AUTOPATCHED): .for A in $(ALLARCHS) # { MACHINE_ARCH=$(A) SRCROOT="$(SRCROOT)" \ $(MYBSDMAKE) -C "$(SRCROOT)" autopatch .endfor # ALLARCHS # } touch $(AUTOPATCHED) copysrc: ${PAX} -rw -p p . "$(SRCROOT)" installsrc: copysrc $(AUTOPATCHED) installhdrs-real: MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \ DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \ $(MYBSDMAKEJ) installhdrs .for A in $(RC_ARCHS) # { ${MKDIR} "$(OBJROOT)/obj.$(A)" && \ MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH=$(MACHINE_ARCH-$(A)) CCARCH=$(A) \ DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \ MAKEFLAGS="" RC_NONARCH_CFLAGS="$(RC_NONARCH_CFLAGS)" \ $(MYBSDMAKEJ) installhdrs-md .endfor # RC_ARCHS # } .for F in $(FORMS) # { BI-install-$(F): build-$(F) ${MKDIR} $(DSTROOT)/usr/local/lib/system if [ -f "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" ]; then \ ${ECHO} "Installing libc$(PSUFFIX-$(F)).a" && \ ${INSTALL} -m 444 "$(SYMROOT)/libc$(PSUFFIX-$(F)).a" \ $(DSTROOT)/usr/local/lib/system && \ ${RANLIB} "$(DSTROOT)/usr/local/lib/system/libc$(PSUFFIX-$(F)).a" || exit 1; \ fi .if $(dynamic) == $(F) # { if [ -f "$(SYMROOT)/libc-dyld.a" ]; then \ ${ECHO} "Installing libc-dyld.a" && \ ${INSTALL} -m 444 "$(SYMROOT)/libc-dyld.a" \ $(DSTROOT)/usr/local/lib/system && \ ${RANLIB} "$(DSTROOT)/usr/local/lib/system/libc-dyld.a" || exit 1; \ fi .for A in $(RC_ARCHS) # { MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH=$(MACHINE_ARCH-$(A)) CCARCH=$(A) \ DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \ DSTROOT=$(DSTROOT) OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) \ MAKEFLAGS="" RC_NONARCH_CFLAGS="$(RC_NONARCH_CFLAGS)" \ $(MYBSDMAKE) copyfiles .endfor # RC_ARCHS # } .endif # } .endfor # FORMS } # Don't use -j here; it may try to make links before the files are copied MANARGS != ${TEST} `id -u` -eq 0 || ${ECHO} MINSTALL=/usr/bin/install # Variables.mk defines MANDIR=${SHAREDIR}/man, but bsd.man.mk expects that # MANDIR=${SHAREDIR}/man/man, so we override. MANARGS += MANDIR=${SHAREDIR}/man/man install-man: ${MKDIR} $(DSTROOT)/usr/share/man/man2 ${MKDIR} $(DSTROOT)/usr/share/man/man3 ${MKDIR} $(DSTROOT)/usr/share/man/man4 ${MKDIR} $(DSTROOT)/usr/share/man/man5 ${MKDIR} $(DSTROOT)/usr/share/man/man7 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" \ DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ MACHINE_ARCH="$(MACHINE_ARCH-$(FIRST_ARCH))" CCARCH=$(FIRST_ARCH) MAKEFLAGS="" \ RC_NONARCH_CFLAGS="$(RC_NONARCH_CFLAGS)" \ $(MYBSDMAKE) all-man maninstall $(MANARGS) install-all: build install-man .for F in $(FORMS) # { install-all: BI-install-$(F) .endfor # FORMS } clean: .for F in $(FORMS) # { ${RM} $(SYMROOT)/libc$(PSUFFIX-$(F)).a .endfor # FORMS } .for A in $(RC_ARCHS) # { ${RMDIR} $(OBJROOT)/obj.$(A) .endfor # RC_ARCHS # }