export USE_APPLE_PB_SUPPORT = all # For debugging -DDEBUG (used only in error.c) #DEBUG = -DDEBUG # For profiling #PGFLAGS = -pg -DDYLD_PROFILING #GMON = gmon.o RC_OS = macos MIG = $(NEXT_ROOT)/usr/bin/mig ifneq "mwccppc" "$(notdir $(CC))" MIG_FLAGS = $(PGFLAGS) endif USE_DEPENDENCY_FILE := $(shell if [ "$(notdir $(CC))" != "mwccppc" ]; then \ echo YES ; else echo NO ; \ fi; ) OFLAG = -O MACOSX_10_1_SEG1ADDR = 41100000 MACOSX_10_2_SEG1ADDR = 8fe00000 ifeq "macos" "$(RC_OS)" SEG1ADDR := $(shell if [ "$(RC_RELEASE)" = "Beaker" ] || \ [ "$(RC_RELEASE)" = "Bunsen" ] || \ [ "$(RC_RELEASE)" = "Gonzo" ] || \ [ "$(RC_RELEASE)" = "Kodiak" ] || \ [ "$(RC_RELEASE)" = "Cheetah" ] || \ [ "$(RC_RELEASE)" = "Puma" ]; then \ echo $(MACOSX_10_1_SEG1ADDR) ; \ else \ echo $(MACOSX_10_2_SEG1ADDR) ; fi; ) else SEG1ADDR = $(MACOSX_10_1_SEG1ADDR) endif PRIVATEHEADERS = /System/Library/Frameworks/System.framework/PrivateHeaders ifeq "macos" "$(RC_OS)" X_CFLAGS := $(shell if [ "$(RC_RELEASE)" != "Beaker" ] && \ [ "$(RC_RELEASE)" != "Bunsen" ] && \ [ "$(RC_RELEASE)" != "Gonzo" ] && \ [ "$(RC_RELEASE)" != "Kodiak" ]; then \ echo -Wno-long-double -no-cpp-precomp ; \ fi; ) endif ifeq "mwccppc" "$(notdir $(CC))" CFLAGS = $(DEBUG) $(OFLAG) -dynamic -g -DDYLD_BUILD \ -I$(SRCROOT)/../include -I$(SRCROOT) -I$(OBJROOT) \ -I$(NEXT_ROOT)$(PRIVATEHEADERS) else CFLAGS = $(DEBUG) $(OFLAG) -dynamic -g -Wall -Wno-precomp -DDYLD_BUILD \ -I$(SRCROOT)/../include -I$(SRCROOT) -I$(OBJROOT) $(X_CFLAGS) \ -I$(NEXT_ROOT)$(PRIVATEHEADERS) ASFLAGS = -force_cpusubtype_ALL endif LIBSTUFF = -L$(SYMROOT)/../libstuff -lstuff ifeq "macos" "$(RC_OS)" SYSTEMDIR := $(shell if [ "$(RC_RELEASE)" = "Beaker" ] || \ [ "$(RC_RELEASE)" = "Bunsen" ] || \ [ "$(RC_RELEASE)" = "Gonzo" ]; then \ echo /Local/Developer/System; else echo /usr/local/lib/system; fi; ) else SYSTEMDIR = /Local/Developer/System endif ifeq "gcc3" "$(notdir $(CC))" LIBGCC = -lgcc else LIBGCC = -lcc_dynamic endif ifeq "macos" "$(RC_OS)" LIBC = $(NEXT_ROOT)$(SYSTEMDIR)/libc.a $(LIBGCC) else LIBC = -lc_dynamic $(LIBGCC) endif ifneq "" "$(wildcard /bin/mkdirs)" MKDIRS = /bin/mkdirs else MKDIRS = /bin/mkdir -p endif SRCROOT = . SYMROOT = . OBJROOT = . OFILE_DIR = $(OBJROOT) VPATH = $(OFILE_DIR) USRLIBDIR = /usr/lib DSTDIRS = $(DSTROOT)$(USRLIBDIR) CFILES1 = dyld_init.c images.c errors.c allocate.c symbols.c reloc.c \ generic_reloc.c hppa_reloc.c entry_point.c dyld_libfuncs.c \ lock.c debug.c sparc_reloc.c mod_init_funcs.c register_funcs.c \ malloc.c getsecbyname.c mig_support.c ppc_reloc.c trace.c CFILES2 = dyld_reloc.c SFILES1 = section_order.s stub_binding_helper.s machdep_lock.s cache_flush.s \ fp_save_restore.s halt.s SFILES2 = dyld_start.s HFILES = dyld_init.h images.h errors.h allocate.h symbols.h reloc.h \ entry_point.h lock.h debug.h mod_init_funcs.h register_funcs.h \ zoneprotect.h cthread_internals.h fp_save_restore.h inline_bsearch.h \ inline_strcmp.h trace.h MIGFILES = dyld_debug.defs dyld_debug_defs.h dyld_event.defs dyld_event_defs.h \ dyld_event_MsgError.h dyld_prebind.defs dyld_prebind_defs.h OBJS1 = $(SFILES1:.s=.o) $(CFILES1:.c=.o) profile_client.o vers.o OBJS2 = $(CFILES2:.c=.o) $(SFILES2:.s=.o) INSTALL_FILES = $(CFILES1) $(CFILES2) $(SFILES1) $(SFILES2) $(HFILES) \ $(MIGFILES) Makefile notes dyld_api gmon.c PRODUCT = dyld all: $(OFILE_DIR) $(SYMROOT) $(PRODUCT).NEW $(PRODUCT).NEW: $(OFILE_DIR) $(SYMROOT) $(OBJS1) $(OBJS2) _dyld_debugServer.o \ _dyld_eventUser.o _dyld_prebindUser.o $(GMON) $(CC) $(CFLAGS) $(RC_CFLAGS) $(OBJS1) $(OBJS2) _dyld_debugServer.o \ _dyld_eventUser.o _dyld_prebindUser.o $(GMON) $(LIBSTUFF) \ $(LIBC) -segprot __TEXT rwx rwx -seg1addr $(SEG1ADDR) \ -o $(SYMROOT)/$@ -Wl,-e,__dyld_start -nostdlib \ -Wl,-dylinker -Wl,-dylinker_install_name,$(USRLIBDIR)/$(PRODUCT) # This object file is used as a hack to link into a program with a crt1.o that # calls _dyld_init() directly in place of having the kernel support. #dyld.o: $(OFILE_DIR) $(OBJS1) # $(CC) $(CFLAGS) $(RC_CFLAGS) -nostdlib -r -d \ # -o $(OFILE_DIR)/dyld.o $(OBJS1) _dyld_debugServer.o \ # _dyld_eventUser.o _dyld_prebindUser.o $(LIBSTUFF) # nmedit -arch all -s dyld_api $(OFILE_DIR)/dyld.o _dyld_debugServer.c: dyld_debug.defs @if [ $(SRCROOT) = . ]; \ then \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_debug.defs"; \ $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_debug.defs; \ rm -f _dyld_debugUser.c _dyld_debug.h; \ else \ echo -n "cd $(OBJROOT); " \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_debug.defs"; \ cd $(OBJROOT); $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_debug.defs; \ cd $(OBJROOT); rm -f _dyld_debugUser.c _dyld_debug.h; \ fi _dyld_debugServer.o: _dyld_debugServer.c cd $(OBJROOT); \ $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c _dyld_debugServer.c debug.c: _dyld_event.h _dyld_event.h: _dyld_eventUser.c _dyld_eventUser.c: dyld_event.defs dyld_event_MsgError.h @if [ $(SRCROOT) = . ]; \ then \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_event.defs"; \ $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_event.defs; \ rm -f _dyld_eventServer.c; \ else \ echo -n "cd $(OBJROOT); " \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_event.defs"; \ cd $(OBJROOT); $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_event.defs; \ cd $(OBJROOT); rm -f _dyld_eventServer.c; \ fi _dyld_eventUser.o: _dyld_eventUser.c cd $(OBJROOT); \ $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c _dyld_eventUser.c images.c: _dyld_prebind.h _dyld_prebind.h: _dyld_prebindUser.c _dyld_prebindUser.c: dyld_prebind.defs @if [ $(SRCROOT) = . ]; \ then \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_prebind.defs"; \ $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_prebind.defs; \ rm -f _dyld_prebindServer.c; \ else \ echo -n "cd $(OBJROOT); " \ echo "$(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_prebind.defs"; \ cd $(OBJROOT); $(MIG) $(MIG_FLAGS) $(SRCROOT)/dyld_prebind.defs; \ cd $(OBJROOT); rm -f _dyld_prebindServer.c; \ fi _dyld_prebindUser.o: _dyld_prebindUser.c cd $(OBJROOT); \ $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c _dyld_prebindUser.c vers.c: vers_string -c $(VERS_STRING_FLAGS) $(PRODUCT) > $(OFILE_DIR)/$@ ifeq "NO" "$(USE_DEPENDENCY_FILE)" .c.o: $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o $< md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d else .c.o: $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c -MD -dependency-file \ $(OFILE_DIR)/$*.d -o $(OFILE_DIR)/$*.o $< md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d endif profile_client.o: $(SRCROOT)/../profileServer/profile_client.c ifeq "NO" "$(USE_DEPENDENCY_FILE)" $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o \ $(SRCROOT)/../profileServer/profile_client.c else $(CC) $(PGFLAGS) $(CFLAGS) $(RC_CFLAGS) -c -MD -dependency-file \ $(OFILE_DIR)/$*.d -o $(OFILE_DIR)/$*.o \ $(SRCROOT)/../profileServer/profile_client.c md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d endif # dyld_reloc.o must be compiled with no $(PGFLAGS) dyld_reloc.o: dyld_reloc.c ifeq "NO" "$(USE_DEPENDENCY_FILE)" $(CC) $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o $< else $(CC) $(CFLAGS) $(RC_CFLAGS) -c -MD -dependency-file \ $(OFILE_DIR)/$*.d -o $(OFILE_DIR)/$*.o $< md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d endif # gmon.o must be compiled with no $(PGFLAGS) gmon.o: gmon.c ifeq "NO" "$(USE_DEPENDENCY_FILE)" $(CC) -DDYLD_PROFILING $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o $< else $(CC) -DDYLD_PROFILING $(CFLAGS) $(RC_CFLAGS) -c -MD -dependency-file \ $(OFILE_DIR)/$*.d -o $(OFILE_DIR)/$*.o $< md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d endif .s.o: ifeq "mwccppc" "$(notdir $(CC))" cc -c -o $(OFILE_DIR)/$*.o $< else $(CC) $(RC_CFLAGS) $(ASFLAGS) -c -o $(OFILE_DIR)/$*.o $< endif clean: shlib_clean -rm -f $(SYMROOT)/$(PRODUCT).NEW $(OFILE_DIR)/vers.c shlib_clean: -cd $(OFILE_DIR); rm -f $(OBJS1) $(OBJS2) $(GMON) -cd $(OFILE_DIR); rm -r -f _dyld_debugUser.c _dyld_debugServer.c -cd $(OFILE_DIR); rm -r -f _dyld_debugUser.o _dyld_debugServer.o -cd $(OFILE_DIR); rm -r -f _dyld_eventUser.c _dyld_eventServer.c -cd $(OFILE_DIR); rm -r -f _dyld_eventUser.o _dyld_eventServer.o -cd $(OFILE_DIR); rm -r -f _dyld_prebindUser.c _dyld_prebindServer.c -cd $(OFILE_DIR); rm -r -f _dyld_prebindUser.o _dyld_prebindServer.o -cd $(OFILE_DIR); rm -r -f _dyld_debug.h _dyld_event.h _dyld_prebind.h -rm -f $(OFILE_DIR)/dyld.o -rm -f $(OFILE_DIR)/Makedep make.out install: all $(DSTDIRS) strip -S $(SYMROOT)/$(PRODUCT).NEW -o $(SYMROOT)/$(PRODUCT).NEW.strip install -c -m 555 $(SYMROOT)/$(PRODUCT).NEW.strip \ $(DSTROOT)$(USRLIBDIR)/$(PRODUCT) installsrc: $(MKDIRS) $(SRCROOT) chmod 755 $(SRCROOT) gnutar cf - $(INSTALL_FILES) | (cd $(SRCROOT); gnutar xf -) chmod 444 $(SRCROOT)/* nextstep_LOCINCDIR = /LocalDeveloper/Headers teflon_LOCINCDIR = /System/Library/Frameworks/System.framework/Versions/B/PrivateHeaders ifeq "macos" "$(RC_OS)" macos_LOCINCDIR := $(shell if [ "$(RC_RELEASE)" = "Beaker" ] || \ [ "$(RC_RELEASE)" = "Bunsen" ] || \ [ "$(RC_RELEASE)" = "Gonzo" ] || \ [ "$(RC_RELEASE)" = "Kodiak" ]; then \ echo /System/Library/Frameworks/System.framework/Versions/B/PrivateHeaders; \ else echo /usr/local/include; \ fi; ) else macos_LOCINCDIR = /System/Library/Frameworks/System.framework/Versions/B/PrivateHeaders endif installhdrs: $(MKDIRS) ${DSTROOT}${$(RC_OS)_LOCINCDIR}/dyld install -c -m 444 images.h ${DSTROOT}${$(RC_OS)_LOCINCDIR}/dyld $(OFILE_DIR) $(SYMROOT) $(DSTDIRS): $(MKDIRS) $@ -include $(OFILE_DIR)/Makedep