# end. This is because the comm page symbols are added as a special segment,
# which the linker will not thin, so we have to build thin and combine.
##---------------------------------------------------------------------
-PROJECT = Libsystem
+Project = Libsystem
+VersionLetter = B
+
+include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
+
+ifeq ($(Version),0)
+ifdef RC_ProjectSourceVersion
+Version = $(RC_ProjectSourceVersion)
+endif
+endif
no_target:
@$(MAKE) -f Makefile
+ifndef RC_TARGET_CONFIG
+export RC_TARGET_CONFIG = MacOSX
+endif
+include Platforms/$(RC_TARGET_CONFIG)/Makefile.inc
+
##---------------------------------------------------------------------
# For each arch, we setup the independent OBJROOT and DSTROOT, and adjust
-# the other flags. After all the archs are built, we ditto over one on
+# the other flags. After all the archs are built, we copy over one on
# time (for the non-dylib files), and then call lipo to create fat files
# for the three dylibs.
##---------------------------------------------------------------------
-ALLARCHS = hppa i386 m68k ppc sparc
NARCHS = $(words $(RC_ARCHS))
USRLIB = /usr/lib
+ifdef ALTUSRLOCALLIBSYSTEM
+LIBSYS = $(ALTUSRLOCALLIBSYSTEM)
+else
+LIBSYS = $(SDKROOT)/usr/local/lib/system
+endif
+FORMS = dynamic
+SUFFIX = ''
+ifdef FEATURE_DEBUG_DYLIB
+FORMS += debug
+SUFFIX += _debug
+endif
+ifdef FEATURE_PROFILE_DYLIB
+FORMS += profile
+SUFFIX += _profile
+endif
+BSD_LIBS = c info m pthread dbm poll dl rpcsvc proc
+FPATH = /System/Library/Frameworks/System.framework
-install: $(RC_ARCHS)
- ditto $(OBJROOT)/$(word 1,$(RC_ARCHS))/dstroot $(DSTROOT)
-ifneq "$(NARCHS)" "1"
- @for i in libSystem.B.dylib libSystem.B_debug.dylib libSystem.B_profile.dylib; do \
- echo rm -f $(DSTROOT)$(USRLIB)/$$i; \
- rm -f $(DSTROOT)$(USRLIB)/$$i; \
- echo lipo -create -o $(DSTROOT)$(USRLIB)/$$i $(foreach ARCH,$(RC_ARCHS),$(OBJROOT)/$(ARCH)/dstroot$(USRLIB)/$$i); \
- lipo -create -o $(DSTROOT)$(USRLIB)/$$i $(foreach ARCH,$(RC_ARCHS),$(OBJROOT)/$(ARCH)/dstroot$(USRLIB)/$$i); \
+build:: fake libSystem
+ @set -x && \
+ cd $(DSTROOT)/usr/lib && \
+ for i in $(BSD_LIBS); do \
+ ln -sf libSystem.dylib lib$$i.dylib || exit 1; \
done
-endif
+ find $(DSTROOT) -type l ! -perm 755 | xargs chmod -hv 755
+ install -d $(DSTROOT)$(FPATH)/Versions/$(VersionLetter)/Resources
+ @set -x && \
+ cd $(DSTROOT)$(FPATH) && \
+ ln -sf Versions/Current/PrivateHeaders && \
+ ln -sf Versions/Current/Resources && \
+ for S in $(SUFFIX); do \
+ ln -sf Versions/Current/System$$S || exit 1; \
+ done && \
+ cd Versions && \
+ ln -sf $(VersionLetter) Current && \
+ cd $(VersionLetter) && \
+ for S in $(SUFFIX); do \
+ ln -sf ../../../../../../usr/lib/libSystem.$(VersionLetter)$$S.dylib System$$S || exit 1; \
+ done && \
+ cp -f $(SRCROOT)/Info.plist Resources
+
+# 4993197: force dependency generation for libsyscall.a
+fake:
+ @set -x && \
+ cd $(OBJROOT) && \
+ echo 'main() { __getpid(); return 0; }' > fake.c && \
+ cc -c $(RC_CFLAGS) fake.c && \
+ ld -r -o fake $(foreach ARCH,$(RC_ARCHS),-arch $(ARCH)) fake.o -lsyscall -L$(LIBSYS)
+
+libc:
+ mkdir -p '$(OBJROOT)/libc'
+ bsdmake -C libsys install \
+ DSTROOT='$(DSTROOT)' \
+ OBJROOT='$(OBJROOT)/libc' \
+ SRCROOT='$(SRCROOT)' \
+ SYMROOT='$(SYMROOT)'
-$(ALLARCHS):
- mkdir -p $(OBJROOT)/$@/objroot $(OBJROOT)/$@/dstroot
- $(MAKE) -f Makefile install \
- OBJROOT='$(OBJROOT)/$@/objroot' \
- DSTROOT='$(OBJROOT)/$@/dstroot' \
- RC_CFLAGS='-arch $@ $(RC_NONARCH_CFLAGS)' \
- RC_ARCHS='$@' \
- RC_$@=YES $(foreach ARCH,$(filter-out $@,$(ALLARCHS)),RC_$(ARCH)=)
-
-.DEFAULT:
- @$(MAKE) -f Makefile $@
+libSystem: libc
+ mkdir -p '$(OBJROOT)/libSystem'
+ bsdmake install \
+ FEATURE_LIBMATHCOMMON=$(FEATURE_LIBMATHCOMMON) \
+ FEATURE_ORDER_FILE=$(FEATURE_ORDER_FILE) \
+ FORMS='$(FORMS)' \
+ Version=$(Version) \
+ VersionLetter=$(VersionLetter) \
+ DSTROOT='$(DSTROOT)' \
+ OBJROOT='$(OBJROOT)/libSystem' \
+ SRCROOT='$(SRCROOT)' \
+ SYMROOT='$(SYMROOT)'