default: build
all: build
.SUFFIXES:
.PHONY: default all build optimized debug profile installsrc installhdrs install clean prebuild build-optimized build-debug build-profile prebuild-optimized prebuild-debug prebuild-profile compile-optimized compile-debug compile-profile link-optimized link-debug link-profile postbuild
CURRENT_PROJECT_VERSION = 227
VERSION_NAME = A
ifeq "$(PLATFORM)" ""
PLATFORM := $(shell uname)
endif
ifndef SRCROOT
SRCROOT = .
endif
ifndef OBJROOT
OBJROOT = $(SRCROOT)
endif
ifndef SYMROOT
SYMROOT = $(SRCROOT)
endif
ifndef DSTROOT
DSTROOT = /
endif
ifeq "$(PLATFORM)" "Darwin"
CC = /usr/bin/cc
else
CC = /usr/bin/gcc
endif
ECHO = @/bin/echo
MKDIRS = /bin/mkdir -p
CD = cd
COPY = /bin/cp
COPY_RECUR = /bin/cp -r
REMOVE = /bin/rm
REMOVE_RECUR = /bin/rm -rf
SYMLINK = /bin/ln -s
CHMOD = /bin/chmod
CHOWN = /usr/sbin/chown
TAR = /usr/bin/tar
STRIP = /usr/bin/strip
NMEDIT = /usr/bin/nmedit
LIPO = /usr/bin/lipo
ifeq "$(PLATFORM)" "Darwin"
WARNING_FLAGS = -Wmost -Wno-precomp -Wno-four-char-constants
endif
ARCH_LIST=
ifeq "$(PLATFORM)" "Darwin"
ifneq "$(ARCHS)" ""
ARCH_LIST += $(ARCHS)
else
ifneq "$(RC_ARCHS)" ""
ARCH_LIST += $(RC_ARCHS)
else
ARCH_LIST += $(shell /usr/bin/arch)
endif
endif
ARCH_FLAGS = $(foreach A, $(ARCH_LIST), $(addprefix -arch , $(A)))
endif
ifeq "$(ORDERFILE)" ""
ORDERFILE = $(wildcard /usr/local/lib/OrderFiles/libobjc.order)
endif
ifneq "$(ORDERFILE)" ""
ORDER = -sectorder __TEXT __text $(ORDERFILE)
else
ORDER =
endif
ifeq "$(USER)" ""
USER = unknown
endif
CFLAGS = -g -fno-common -fobjc-exceptions -pipe $(PLATFORM_CFLAGS) $(WARNING_FLAGS) -I$(SYMROOT) -I. -I$(SYMROOT)/ProjectHeaders
LDFLAGS =
LIBRARY_EXT = .dylib
PUBLIC_HEADER_INSTALLDIR = usr/include/objc
OTHER_HEADER_INSTALLDIR = usr/local/include/objc
INSTALLDIR = usr/lib
ifeq "$(PLATFORM)" "Darwin"
LDFLAGS += -dynamiclib -dynamic -compatibility_version 1 -current_version $(CURRENT_PROJECT_VERSION)
endif
CFLAGS += $(OTHER_CFLAGS) $(RC_CFLAGS)
LDFLAGS += $(OTHER_LDFLAGS)
ifndef OPTIMIZATION_CFLAGS
OPTIMIZATION_CFLAGS = -Os
endif
ifndef DEBUG_CFLAGS
DEBUG_CFLAGS = -DDEBUG
endif
ifndef PROFILE_CFLAGS
PROFILE_CFLAGS = -DPROFILE -pg -Os
endif
CFLAGS_OPTIMIZED = $(OPTIMIZATION_CFLAGS) $(CFLAGS)
CFLAGS_DEBUG = $(DEBUG_CFLAGS) $(CFLAGS)
CFLAGS_PROFILE = $(PROFILE_CFLAGS) $(CFLAGS)
LDFLAGS_OPTIMIZED = $(LDFLAGS) -g
LDFLAGS_DEBUG = $(LDFLAGS) -g
LDFLAGS_PROFILE = $(LDFLAGS) -g -pg
SUBDIRS = . runtime runtime/OldClasses.subproj runtime/Messengers.subproj runtime/Auto.subproj
SOURCES=
MODULE_SOURCES=
OTHER_SOURCES=
PUBLIC_HEADERS=
PRIVATE_HEADERS=
OTHER_HEADERS=
SOURCES += $(addprefix runtime/, \
Object.m Protocol.m hashtable2.m maptable.m objc-class.m objc-errors.m \
objc-file.m objc-load.m objc-moninit.c objc-runtime.m objc-sel.m \
objc-sync.m objc-exception.m objc-auto.m objc-sel-set.m objc-rtp.m \
)
PUBLIC_HEADERS += $(addprefix runtime/, \
objc-class.h objc-api.h objc-load.h objc-runtime.h objc.h Object.h \
objc-sync.h objc-exception.h objc-auto.h \
Protocol.h error.h hashtable2.h \
)
PRIVATE_HEADERS += runtime/objc-private.h runtime/objc-config.h runtime/objc-sel-table.h runtime/objc-sel-set.h runtime/objc-rtp.h
OTHER_HEADERS += runtime/maptable.h runtime/objc-auto.h
SOURCES += runtime/OldClasses.subproj/List.m
PUBLIC_HEADERS += runtime/OldClasses.subproj/List.h
SOURCES += runtime/Messengers.subproj/objc-msg.s
OTHER_SOURCES += runtime/Messengers.subproj/objc-msg-ppc.s runtime/Messengers.subproj/objc-msg-i386.s
SOURCES += runtime/Auto.subproj/objc-auto.s
OTHER_SOURCES += runtime/Auto.subproj/objc-auto-ppc.s runtime/Auto.subproj/objc-auto-i386.s
OTHER_SOURCES += runtime/objc-rtp-sym.s
MODULE_SOURCES += runtime/Messengers.subproj/objc-msg-stub.s
OTHER_SOURCES += runtime/Messengers.subproj/objc-msg-stub-ppc.s runtime/Messengers.subproj/objc-msg-stub-i386.s
OTHER_SOURCES += Makefile APPLE_LICENSE objc-exports-i386 objc-exports-ppc
OBJECTS = $(addprefix $(OBJROOT)/, $(addsuffix .o, $(basename $(SOURCES) ) ) )
OBJECTS_OPTIMIZED = $(OBJECTS:.o=.opt.o)
OBJECTS_DEBUG = $(OBJECTS:.o=.debug.o)
OBJECTS_PROFILE = $(OBJECTS:.o=.profile.o)
MODULE_OBJECTS = $(addprefix $(OBJROOT)/, $(addsuffix .o, $(basename $(MODULE_SOURCES) ) ) )
MODULE_OBJECTS_OPTIMIZED = $(MODULE_OBJECTS:.o=.opt.o)
MODULE_OBJECTS_DEBUG = $(MODULE_OBJECTS:.o=.debug.o)
MODULE_OBJECTS_PROFILE = $(MODULE_OBJECTS:.o=.profile.o)
DEPEND_HEADERS = $(addprefix $(SRCROOT)/, \
$(PUBLIC_HEADERS) $(PRIVATE_HEADERS) $(OTHER_HEADERS) )
$(OBJROOT)/%.opt.o : $(SRCROOT)/%.m $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
$(OBJROOT)/%.debug.o : $(SRCROOT)/%.m $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_DEBUG) "$<" -c -o "$@"
$(OBJROOT)/%.profile.o : $(SRCROOT)/%.m $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_PROFILE) "$<" -c -o "$@"
$(OBJROOT)/%.opt.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
$(OBJROOT)/%.debug.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_DEBUG) "$<" -c -o "$@"
$(OBJROOT)/%.profile.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_PROFILE) "$<" -c -o "$@"
$(OBJROOT)/%.opt.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
$(OBJROOT)/%.debug.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_DEBUG) "$<" -c -o "$@"
$(OBJROOT)/%.profile.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
$(SILENT) $(ECHO) " ... $<"
$(SILENT) $(CC) $(CFLAGS_PROFILE) "$<" -c -o "$@"
$(OBJROOT)/runtime/Messengers.subproj/objc-msg.opt.o \
$(OBJROOT)/runtime/Messengers.subproj/objc-msg.debug.o \
$(OBJROOT)/runtime/Messengers.subproj/objc-msg.profile.o : \
$(SRCROOT)/runtime/Messengers.subproj/objc-msg-ppc.s \
$(SRCROOT)/runtime/Messengers.subproj/objc-msg-i386.s
$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.opt.o \
$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.debug.o \
$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.profile.o : \
$(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-ppc.s \
$(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-i386.s
$(OBJROOT)/runtime/Auto.subproj/objc-auto.opt.o \
$(OBJROOT)/runtime/Auto.subproj/objc-auto.debug.o \
$(OBJROOT)/runtime/Auto.subproj/objc-auto.profile.o : \
$(SRCROOT)/runtime/Auto.subproj/objc-auto-ppc.s \
$(SRCROOT)/runtime/Auto.subproj/objc-auto-i386.s
$(OBJROOT)/runtime/objc-rtp-sym.ppc.o: $(SRCROOT)/runtime/objc-rtp-sym.s
$(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch ppc "$<" -c -o "$@.temp"
$(SILENT) $(STRIP) -S "$@.temp"
$(SILENT) $(LD) -arch ppc -seg1addr 0xfffec000 "$@.temp" -r -o "$@"
$(OBJROOT)/runtime/objc-rtp-sym.i386.o: $(SRCROOT)/runtime/objc-rtp-sym.s
$(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch i386 "$<" -c -o "$@.temp"
$(SILENT) $(STRIP) -S "$@.temp"
$(SILENT) $(LD) -arch i386 -seg1addr 0xfffe8000 "$@.temp" -r -o "$@"
build: prebuild build-optimized build-profile postbuild
optimized: prebuild build-optimized postbuild
debug: prebuild build-debug postbuild
profile: prebuild build-profile postbuild
installsrc:
$(SILENT) $(ECHO) "Installing source from . to $(SRCROOT)..."
ifeq "$(SRCROOT)" "."
$(SILENT) $(ECHO) "SRCROOT must be defined to be the destination directory; it cannot be '.'"
exit 1
endif
$(SILENT) $(TAR) -cf $(SRCROOT)/objc4.sources.tar $(SOURCES) $(PUBLIC_HEADERS) $(PRIVATE_HEADERS) $(OTHER_HEADERS) $(OTHER_SOURCES) $(MODULE_SOURCES)
$(SILENT) $(CD) $(SRCROOT) && $(TAR) -xf $(SRCROOT)/objc4.sources.tar
$(SILENT) $(REMOVE) -f $(SRCROOT)/objc4.sources.tar
installhdrs:
$(SILENT) $(ECHO) "Installing headers from $(SRCROOT) to $(DSTROOT)/$(HEADER_INSTALLDIR)..."
$(SILENT) $(MKDIRS) $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)
-$(SILENT) $(CHMOD) +w $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
$(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PUBLIC_HEADERS) ) \
$(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)
$(SILENT) $(COPY) $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/hashtable2.h \
$(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/hashtable.h
$(SILENT) $(CHMOD) -w $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
$(SILENT) $(CHMOD) a+r $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
$(SILENT) $(MKDIRS) $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)
-$(SILENT) $(CHMOD) +w $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
$(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(OTHER_HEADERS) ) \
$(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)
$(SILENT) $(CHMOD) -w $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
$(SILENT) $(CHMOD) a+r $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
$(SILENT) $(RM) -f $(DSTROOT)$(PUBLIC_HEADER_DIR)$(PUBLIC_HEADER_DIR_SUFFIX)/hashtable.h
install: build installhdrs
$(SILENT) $(ECHO) "Installing products from $(SYMROOT) to $(DSTROOT)..."
$(SILENT) $(MKDIRS) $(DSTROOT)/$(INSTALLDIR)
-$(SILENT) $(CHMOD) +w $(DSTROOT)/$(INSTALLDIR)
$(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(COPY) $(SYMROOT)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
$(SILENT) $(STRIP) -S $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
-$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
$(SYMLINK) libobjc.$(VERSION_NAME)$(LIBRARY_EXT) libobjc$(LIBRARY_EXT)
-$(SILENT) $(COPY) $(SYMROOT)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
-$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
-$(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
-$(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
test -e libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) && \
$(SYMLINK) libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) libobjc_debug$(LIBRARY_EXT) && \
$(SYMLINK) libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) libobjc.$(VERSION_NAME)_debug$(LIBRARY_EXT)
-$(SILENT) $(COPY) $(SYMROOT)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
-$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
-$(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
-$(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
test -e libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) && \
$(SYMLINK) libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) libobjc_profile$(LIBRARY_EXT) && \
$(SYMLINK) libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) libobjc.$(VERSION_NAME)_profile$(LIBRARY_EXT)
clean:
$(SILENT) $(ECHO) "Deleting build products..."
$(SILENT) $(REMOVE) -f \
$(foreach A, $(ARCH_LIST), \
$(OBJROOT)/libobjc_debug.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
$(OBJROOT)/libobjc_profile.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
$(OBJROOT)/libobjc.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
$(OBJROOT)/runtime/objc-rtp-sym.$A.o \
$(OBJROOT)/runtime/objc-rtp-sym.$A.o.temp \
)
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.optimized.o
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.debug.o
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.profile.o
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
$(SILENT) $(REMOVE) -f $(OBJECTS_OPTIMIZED)
$(SILENT) $(REMOVE) -f $(OBJECTS_DEBUG)
$(SILENT) $(REMOVE) -f $(OBJECTS_PROFILE)
$(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_OPTIMIZED)
$(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_DEBUG)
$(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_PROFILE)
$(SILENT) $(REMOVE) -rf $(SYMROOT)/ProjectHeaders
prebuild:
$(SILENT) $(ECHO) "Prebuild-setup..."
$(SILENT) $(MKDIRS) $(SYMROOT)
$(SILENT) $(REMOVE_RECUR) $(SYMROOT)/ProjectHeaders
$(SILENT) $(MKDIRS) $(SYMROOT)/ProjectHeaders
$(SILENT) $(ECHO) "Copying headers from $(SRCROOT) to $(SYMROOT)/ProjectHeaders..."
$(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PRIVATE_HEADERS) ) $(SYMROOT)/ProjectHeaders
$(SILENT) $(MKDIRS) $(SYMROOT)/ProjectHeaders/objc
$(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PUBLIC_HEADERS) ) $(SYMROOT)/ProjectHeaders/objc
$(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(OTHER_HEADERS) ) $(SYMROOT)/ProjectHeaders/objc
build-optimized: prebuild-optimized compile-optimized link-optimized
build-debug: prebuild-debug compile-debug link-debug
build-profile: prebuild-profile compile-profile link-profile
prebuild-optimized:
$(SILENT) $(ECHO) "Building (optimized) ..."
$(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
prebuild-debug:
$(SILENT) $(ECHO) "Building (debug) ..."
$(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
prebuild-profile:
$(SILENT) $(ECHO) "Building (profile) ..."
$(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
compile-optimized: $(OBJECTS_OPTIMIZED) $(MODULE_OBJECTS_OPTIMIZED) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
compile-debug: $(OBJECTS_DEBUG) $(MODULE_OBJECTS_DEBUG) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
compile-profile: $(OBJECTS_PROFILE) $(MODULE_OBJECTS_PROFILE) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
ifeq "$(PLATFORM)" "Darwin"
define link
$(foreach A, $(ARCH_LIST), \
$(SILENT) $(LD) -r \
-arch $A \
-o $(OBJROOT)/libobjc$1.$A.o \
$3 ; \
$(SILENT) $(CC) $2 \
-arch $A \
-Wl,-exported_symbols_list,$(SRCROOT)/objc-exports-$(A) \
$(ORDER) \
-sectcreate __DATA __commpage $(OBJROOT)/runtime/objc-rtp-sym.$A.o \
-install_name /$(INSTALLDIR)/libobjc$1.$(VERSION_NAME)$(LIBRARY_EXT) \
-o $(OBJROOT)/libobjc$1.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
$(OBJROOT)/libobjc$1.$A.o $4 ; \
)
$(SILENT) $(LIPO) \
-create -output $(SYMROOT)/libobjc$1.$(VERSION_NAME)$(LIBRARY_EXT) \
$(foreach A, $(ARCH_LIST), -arch $A $(OBJROOT)/libobjc$1.$A.$(VERSION_NAME)$(LIBRARY_EXT) )
endef
else
define link
$(SILENT) $(ECHO) "Don't know how to link for platform '$(PLATFORM)'"
endef
endif
link-optimized:
$(SILENT) $(ECHO) "Linking (optimized)..."
$(call link,,$(LDFLAGS_OPTIMIZED),$(OBJECTS_OPTIMIZED),$(MODULE_OBJECTS_OPTIMIZED) )
link-debug:
$(SILENT) $(ECHO) "Linking (debug)..."
$(call link,_debug,$(LDFLAGS_DEBUG),$(OBJECTS_DEBUG),$(MODULE_OBJECTS_DEBUG) )
link-profile:
$(SILENT) $(ECHO) "Linking (profile)..."
$(call link,_profile,$(LDFLAGS_PROFILE),$(OBJECTS_PROFILE),$(MODULE_OBJECTS_PROFILE) )
postbuild:
$(SILENT) $(ECHO) "Done!"