.ifndef DSTROOT DSTROOT != x=`pwd`/DSTROOT && mkdir -p $$x && echo $$x .endif .ifndef OBJROOT OBJROOT != x=`pwd`/OBJROOT && mkdir -p $$x && echo $$x .endif .ifndef SRCROOT SRCROOT != dirname `pwd` .endif .ifndef SYMROOT SYMROOT != x=`pwd`/SYMROOT && mkdir -p $$x && echo $$x .endif ARCH != arch .ifndef RC_ARCHS RC_ARCHS = $(ARCH) RC_$(RC_ARCHS) = 1 .endif SDKROOT ?= / NARCHS != echo $(RC_ARCHS) | wc -w LIBSYS = $(SDKROOT)/usr/local/lib/system NJOBS != perl -e '$$n = `/usr/sbin/sysctl -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)' BSDMAKE = bsdmake -f Makefile BSDMAKEJ = $(BSDMAKE) -j $(NJOBS) # This variables are to guarantee that the left-hand side of an expression is # always a variable dynamic = dynamic static = static # Remove the arch stuff, since we know better here. LOCAL_CFLAGS != echo $(RC_CFLAGS) | sed 's/ *-arch [^ ][^ ]*//g' FORMS := debug dynamic profile static all: setup build build: build-debug build-dynamic build-profile build-static # These are the non B&I defaults .ifndef RC_ProjectName install: installhdrs install-all .else # RC_ProjectName install: setup .for F in $(FORMS) install: BI-install-$(F) .endfor # FORMS install: install -c -m 444 $(OBJROOT)/sys/libsyscall.list $(DSTROOT)/usr/local/lib/system .endif # RC_ProjectName .for F in $(FORMS) .if $(dynamic) == $(F) SUFFIX$(F) = .else SUFFIX$(F) = _$(F) .endif LIPOARGS$(F) != perl -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libsyscall$(SUFFIX$(F)).a\"), qw($(RC_ARCHS))))' .for A in $(RC_ARCHS) build-$(F): build-$(A)-$(F) .endfor # RC_ARCHS build-$(F): mkdir -p $(SYMROOT) .if $(NARCHS) == 1 cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libsyscall$(SUFFIX$(F)).a" "$(SYMROOT)" .else xcrun -sdk $(SDKROOT) lipo -create $(LIPOARGS$(F)) -output $(SYMROOT)/libsyscall$(SUFFIX$(F)).a .endif .for A in $(RC_ARCHS) build-$(A)-$(F): mkdir -p $(OBJROOT)/obj.$(A) && \ MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \ DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ MAKEFLAGS="" MIGDEFINES="" CFLAGS="-arch $(A) $(LOCAL_CFLAGS)" $(BSDMAKEJ) libsyscall$(SUFFIX$(F)).a .endfor # RC_ARCHS .endfor # FORMS installhdrs: MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \ DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ MIGDEFINES="-DLIBSYSCALL_INTERFACE=1" \ $(BSDMAKE) installhdrs .for A in $(RC_ARCHS) mkdir -p "$(OBJROOT)/obj.$(A)" && \ MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \ DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ MAKEFLAGS="" MIGDEFINES="" $(BSDMAKE) installhdrs-md .endfor # RC_ARCHS .for F in $(FORMS) BI-install-$(F): build-$(F) mkdir -p $(DSTROOT)/usr/local/lib/system if [ -f "$(SYMROOT)/libsyscall$(SUFFIX$(F)).a" ]; then \ echo "Installing libsyscall$(SUFFIX$(F)).a" && \ install -c -m 644 "$(SYMROOT)/libsyscall$(SUFFIX$(F)).a" \ $(DSTROOT)/usr/local/lib/system && \ ranlib "$(DSTROOT)/usr/local/lib/system/libsyscall$(SUFFIX$(F)).a"; \ chmod 444 "$(DSTROOT)/usr/local/lib/system/libsyscall$(SUFFIX$(F)).a"; \ fi .endfor # FORMS install-man: mkdir -p $(DSTROOT)/usr/share/man/man2 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" \ DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ MACHINE_ARCH="$(ARCH)" MAKEFLAGS="" $(BSDMAKE) all-man maninstall install-all: setup build install-man .for F in $(FORMS) install-all: BI-install-$(F) .endfor # FORMS clean: .for F in $(FORMS) rm -f $(OBJROOT)/libsyscall$(SUFFIX$(F)).a .endfor # FORMS .for A in $(RC_ARCHS) rm -rf $(OBJROOT)/obj.$(A) .endfor # RC_ARCHS INCLUDEDIR = $(OBJROOT)/include SYSDIR = $(OBJROOT)/sys setup: $(INCLUDEDIR) $(SYSDIR) USR-INCLUDE = /usr/include MOD-HEADERS = architecture/ppc/mode_independent_asm.h architecture/i386/asm_help.h $(INCLUDEDIR): mkdir -p $(INCLUDEDIR) .for h in $(MOD-HEADERS) mkdir -p $(INCLUDEDIR)/$(h:H) sed 's/\.globl/.private_extern/g' $(USR-INCLUDE)/$(h) > $(INCLUDEDIR)/$(h) .endfor # MOD-HEADERS $(SYSDIR): mkdir -p $(SYSDIR) $(SRCROOT)/libsyscall/create-syscalls.pl $(SRCROOT)/bsd/kern/syscalls.master $(SRCROOT)/libsyscall/custom $(SYSDIR)