NAME0 = libSystem
NAME = $(NAME0).$(VersionLetter)
GCC := $(CC)
GCCLIBS = -lgcc -lgcc_eh
NARCHS != echo $(RC_ARCHS) | wc -w
.ifdef ALTUSRLOCALLIBSYSTEM
LIBSYS = $(ALTUSRLOCALLIBSYSTEM)
.else
LIBSYS = $(SDKROOT)/usr/local/lib/system
.endif
SLFS_F_PH = $(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
.ifdef SDKROOT
SDKROOTCFLAGS = -isysroot '$(SDKROOT)'
SDKROOTLDFLAGS = -syslibroot '$(SDKROOT)'
.endif
.if !empty(FEATURE_ORDER_FILE)
ORDERFILES = -Wl,-order_file,$(SRCROOT)/SystemInit.order -Wl,-order_file,$(SRCROOT)/System.order
.endif
LIBS = -lc -lcommonCrypto -ldyldapis\
-linfo -ldns_sd -lm -lmacho\
-lnotify -lkeymgr -llaunch \
-lcopyfile -lsandbox -lremovefile
CONDITIONALLIBS = unc quarantine
.for L in $(CONDITIONALLIBS)
.if exists($(LIBSYS)/lib$(L).a)
LIBS += -l$(L)
.endif
.endfor
dynamic = dynamic
all: build
build: build-debug build-dynamic build-profile
.ifndef RC_ProjectName
install: installhdrs install-all
.else
.for F in $(FORMS)
install: BI-install-$(F)
.endfor .endif
.for A in $(RC_ARCHS)
OBJS-$(A) = $(OBJROOT)/$(A)/SystemMath.o $(OBJROOT)/$(A)/System_vers.o
.endfor
.for F in $(FORMS)
.if $(dynamic) == $(F)
SUFFIX$(F) =
.else
SUFFIX$(F) = _$(F)
.endif
.if !empty(FEATURE_LIBMATHCOMMON)
LIBMATHCOMMON$(F) = -L/usr/lib/system -sub_library libmathCommon$(SUFFIX$(F)) -lmathCommon$(SUFFIX$(F))
.endif
LIPOARGS$(F) != perl -e 'printf "%s\n", join(" ", map(qq(-arch $$_ \"$(OBJROOT)/$$_/$(F)/$(NAME)$(SUFFIX$(F)).dylib\"), qw($(RC_ARCHS))))'
.for A in $(RC_ARCHS)
build-$(F): build-$(A)-$(F)
.endfor build-$(F):
.if $(NARCHS) == 1
cp -p "$(OBJROOT)/$(RC_ARCHS)/$(F)/$(NAME)$(SUFFIX$(F)).dylib" "$(SYMROOT)"
.else
lipo -create $(LIPOARGS$(F)) -output "$(SYMROOT)/$(NAME)$(SUFFIX$(F)).dylib"
.endif
dsymutil "$(SYMROOT)/$(NAME)$(SUFFIX$(F)).dylib"
.for A in $(RC_ARCHS)
build-$(A)-$(F): $(OBJROOT)/$(A)/$(F) $(OBJROOT)/$(A)/CommPageSymbols.o $(OBJS-$(A))
$(GCC) -dynamiclib -arch $(A) -pipe \
-o '$(OBJROOT)/$(A)/$(F)/$(NAME)$(SUFFIX$(F)).dylib' \
-compatibility_version 1 -current_version $(Version) \
-install_name /usr/lib/$(NAME)$(SUFFIX$(F)).dylib \
-nodefaultlibs -all_load -multi_module -Wl,-search_paths_first \
-segcreate __DATA __commpage $(OBJROOT)/$(A)/CommPageSymbols.o \
$(ORDERFILES) $(SKDROOTLDFLAGS) $(OBJS-$(A)) \
-L$(DSTROOT)/usr/local/lib/system -L$(LIBSYS) $(LIBMATHCOMMON$(F)) \
$(LIBS:C/$/$(SUFFIX$(F))/) $(GCCLIBS)
$(OBJROOT)/$(A)/$(F):
mkdir -p '$(.TARGET)'
.endfor .endfor
SEG1ADDR_i386 = 0xffff0000
SEG1ADDR_ppc = 0xffff8000
SEG1ADDR_ppc64 = 0xffffffffffff8000
SEG1ADDR_x86_64 = 0x00007fffffe00000
SEG1ADDR_arm = 0xffff8000
CFLAGS = -g -Os -Wall -Werror -I'$(SLFS_F_PH)' -fno-common $(SDKROOTCFLAGS)
$(OBJROOT)/System_vers.c:
vers_string -c System | \
sed -e 's/SGS_VERS/SYSTEM_VERS_STRING/' -e 's/VERS_NUM/SYSTEM_VERS_NUM/' > $(.TARGET)
.for A in $(RC_ARCHS)
$(OBJROOT)/$(A)/CommPageSymbols.o: $(SRCROOT)/CommPageSymbols.st
$(GCC) -c -o '$(.TARGET:R)_intermediate.$(.TARGET:E)' -arch $(A) -x assembler-with-cpp $(CFLAGS) '$(.ALLSRC)'
ld -arch $(A) -r -seg1addr $(SEG1ADDR_$(A:C/^armv.*$/arm/)) '$(.TARGET:R)_intermediate.$(.TARGET:E)' -o '$(.TARGET)'
$(OBJROOT)/$(A)/SystemMath.o: $(SRCROOT)/SystemMath.s
$(GCC) -c -o '$(.TARGET)' -arch $(A) $(CFLAGS) '$(.ALLSRC)'
$(OBJROOT)/$(A)/System_vers.o: $(OBJROOT)/System_vers.c
$(GCC) -c -o '$(.TARGET)' -arch $(A) $(CFLAGS) '$(.ALLSRC)'
.endfor
installhdrs:
.for F in $(FORMS)
BI-install-$(F): build-$(F)
mkdir -p "$(DSTROOT)/usr/lib"
@echo "===== Installing $(NAME)$(SUFFIX$(F)).dylib ====="
install "$(SYMROOT)/$(NAME)$(SUFFIX$(F)).dylib" "$(DSTROOT)/usr/lib"
strip -S "$(DSTROOT)/usr/lib/$(NAME)$(SUFFIX$(F)).dylib"
chmod a-w "$(DSTROOT)/usr/lib/$(NAME)$(SUFFIX$(F)).dylib"
ln -sf "$(NAME)$(SUFFIX$(F)).dylib" "$(DSTROOT)/usr/lib/$(NAME0)$(SUFFIX$(F)).dylib"
.endfor
install-all: build
.for F in $(FORMS)
install-all: BI-install-$(F)
.endfor
clean:
.for A in $(RC_ARCHS)
rm -rf $(OBJROOT)/$(A)
.endfor