1.ifndef DSTROOT 2DSTROOT != x=`pwd`/DSTROOT && mkdir -p $$x && echo $$x 3.endif 4.ifndef OBJROOT 5OBJROOT != x=`pwd`/OBJROOT && mkdir -p $$x && echo $$x 6.endif 7.ifndef SRCROOT 8SRCROOT != dirname `pwd` 9.endif 10.ifndef SYMROOT 11SYMROOT != x=`pwd`/SYMROOT && mkdir -p $$x && echo $$x 12.endif 13ARCH != arch 14.ifndef RC_ARCHS 15RC_ARCHS = $(ARCH) 16RC_$(RC_ARCHS) = 1 17.endif 18NARCHS != echo $(RC_ARCHS) | wc -w 19LIBSYS = $(SDKROOT)/usr/local/lib/system 20NJOBS != perl -e '$$n = `/usr/sbin/sysctl -n hw.ncpu`; printf "%d\n", $$n < 2 ? 2 : ($$n * 1.5)' 21BSDMAKE = bsdmake -f Makefile 22BSDMAKEJ = $(BSDMAKE) -j $(NJOBS) 23 24# This variables are to guarantee that the left-hand side of an expression is 25# always a variable 26dynamic = dynamic 27static = static 28 29# Remove the arch stuff, since we know better here. 30LOCAL_CFLAGS != echo $(RC_CFLAGS) | sed 's/ *-arch [^ ][^ ]*//g' 31 32FORMS := debug dynamic profile static 33 34all: setup build 35 36build: build-debug build-dynamic build-profile build-static 37 38# These are the non B&I defaults 39.ifndef RC_ProjectName 40install: installhdrs install-all 41 42.else # RC_ProjectName 43 44install: setup 45.for F in $(FORMS) 46install: BI-install-$(F) 47.endfor # FORMS 48install: 49 install -c -m 444 $(OBJROOT)/sys/libsyscall.list $(DSTROOT)/usr/local/lib/system 50.endif # RC_ProjectName 51 52.for F in $(FORMS) 53.if $(dynamic) == $(F) 54SUFFIX$(F) = 55.else 56SUFFIX$(F) = _$(F) 57.endif 58LIPOARGS$(F) != perl -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/obj.$$_/libsyscall$(SUFFIX$(F)).a\"), qw($(RC_ARCHS))))' 59 60.for A in $(RC_ARCHS) 61build-$(F): build-$(A)-$(F) 62.endfor # RC_ARCHS 63build-$(F): 64.if $(NARCHS) == 1 65 cp -p "$(OBJROOT)/obj.$(RC_ARCHS)/libsyscall$(SUFFIX$(F)).a" "$(SYMROOT)" 66.else 67 lipo -create $(LIPOARGS$(F)) -output $(SYMROOT)/libsyscall$(SUFFIX$(F)).a 68.endif 69 70.for A in $(RC_ARCHS) 71build-$(A)-$(F): 72 mkdir -p $(OBJROOT)/obj.$(A) && \ 73 MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \ 74 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ 75 MAKEFLAGS="" CFLAGS="-arch $(A) $(LOCAL_CFLAGS)" $(BSDMAKEJ) libsyscall$(SUFFIX$(F)).a 76.endfor # RC_ARCHS 77.endfor # FORMS 78 79installhdrs: 80 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" MAKEFLAGS="" \ 81 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ 82 $(BSDMAKE) installhdrs 83.for A in $(RC_ARCHS) 84 mkdir -p "$(OBJROOT)/obj.$(A)" && \ 85 MAKEOBJDIR="$(OBJROOT)/obj.$(A)" MACHINE_ARCH="$(A)" \ 86 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ 87 MAKEFLAGS="" $(BSDMAKE) installhdrs-md 88.endfor # RC_ARCHS 89 90.for F in $(FORMS) 91BI-install-$(F): build-$(F) 92 mkdir -p $(DSTROOT)/usr/local/lib/system 93 if [ -f "$(SYMROOT)/libsyscall$(SUFFIX$(F)).a" ]; then \ 94 echo "Installing libsyscall$(SUFFIX$(F)).a" && \ 95 install -c -m 444 "$(SYMROOT)/libsyscall$(SUFFIX$(F)).a" \ 96 $(DSTROOT)/usr/local/lib/system && \ 97 ranlib "$(DSTROOT)/usr/local/lib/system/libsyscall$(SUFFIX$(F)).a"; \ 98 fi 99.endfor # FORMS 100 101install-man: 102 mkdir -p $(DSTROOT)/usr/share/man/man2 103 MAKEOBJDIR="$(OBJROOT)" DESTDIR="$(DSTROOT)" \ 104 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' \ 105 MACHINE_ARCH="$(ARCH)" MAKEFLAGS="" $(BSDMAKE) all-man maninstall 106 107install-all: setup build install-man 108.for F in $(FORMS) 109install-all: BI-install-$(F) 110.endfor # FORMS 111 112clean: 113.for F in $(FORMS) 114 rm -f $(OBJROOT)/libsyscall$(SUFFIX$(F)).a 115.endfor # FORMS 116.for A in $(RC_ARCHS) 117 rm -rf $(OBJROOT)/obj.$(A) 118.endfor # RC_ARCHS 119 120INCLUDEDIR = $(OBJROOT)/include 121SYSDIR = $(OBJROOT)/sys 122 123setup: $(INCLUDEDIR) $(SYSDIR) 124 125USR-INCLUDE = /usr/include 126MOD-HEADERS = architecture/ppc/mode_independent_asm.h architecture/i386/asm_help.h 127 128$(INCLUDEDIR): 129 mkdir -p $(INCLUDEDIR) 130.for h in $(MOD-HEADERS) 131 mkdir -p $(INCLUDEDIR)/$(h:H) 132 sed 's/\.globl/.private_extern/g' $(USR-INCLUDE)/$(h) > $(INCLUDEDIR)/$(h) 133.endfor # MOD-HEADERS 134 135$(SYSDIR): 136 mkdir -p $(SYSDIR) 137 $(SRCROOT)/libsyscall/create-syscalls.pl $(SRCROOT)/bsd/kern/syscalls.master $(SRCROOT)/libsyscall/custom $(SYSDIR) 138