Makefile   [plain text]


RC_OS = macos
OFLAG = -Os
LEGACY = -D_MACH_I386_THREAD_STATUS_FPSTATE_LEGACY_FIELD_NAMES_ \
	 -D_ARCHITECTURE_I386_FPU_FPSTATE_LEGACY_FIELD_NAMES_

ifneq "$(RC_MAJOR_RELEASE_TRAIN)" "Tiger"
KERN = -fno-builtin -finline -fno-keep-inline-functions -fsigned-bitfields \
       -msoft-float -nostdinc \
       -iwithsysroot /System/Library/Frameworks/Kernel.framework/PrivateHeaders/libsa \
       -iwithsysroot /System/Library/Frameworks/Kernel.framework/PrivateHeaders \
       -iwithsysroot /System/Library/Frameworks/Kernel.framework/Headers/libsa \
       -iwithsysroot /System/Library/Frameworks/Kernel.framework/Headers/bsd \
       -iwithsysroot /System/Library/Frameworks/Kernel.framework/Headers \
       -DKERNEL -DKERNEL_PRIVATE -DAPPLE -DNeXT -DLIBSA_PRIVATE
else
KERN = -fno-builtin -finline -fno-keep-inline-functions -fsigned-bitfields \
       -msoft-float -nostdinc \
-I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/PrivateHeaders/libsa \
-I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers/libsa \
       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers/bsd \
       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers \
       -DKERNEL -DKERNEL_PRIVATE -DAPPLE -DNeXT -DLIBSA_PRIVATE
endif

ifeq "macos" "$(RC_OS)"
  CC := $(shell if [ "$(RC_RELEASE)" == "Tiger" ] || \
		   [ "$(RC_RELEASE)" == "Gordian" ] || \
		   [ "$(RC_RELEASE)" == "Saffron" ] || \
		   [ "$(RC_USE_GCC35_FOR_PPC64)" == "YES" ]; then \
		     echo gcc-3.5 ; \
		else \
		     echo "$(CC)" ; \
	     fi; )
endif
ifneq "" "$(SDKROOT)"
  SDK = -isysroot $(SDKROOT)
  CC = $(shell xcrun -find -sdk $(SDKROOT) cc)
endif
ifeq "clang" "$(notdir $(CC))"
  CFLAGS = $(OFLAG) -g -Wall $(LEGACY) \
     -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR) $(SDK)
  PG =
else
  CFLAGS = $(OFLAG) -g -Wall $(X_CFLAGS) $(LEGACY) \
     -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR) $(SDK)
  PG = -pg
endif

USE_DEPENDENCY_FILE := $(shell if [ "$(notdir $(CC))" != "clang" ] && \
				  [ "$(RC_XBS)" != "YES" ]; then \
	     echo YES ; else echo NO ; \
	     fi; )

ifneq "" "$(wildcard /bin/mkdirs)"
  MKDIRS = /bin/mkdirs
else
  MKDIRS = /bin/mkdir -p
endif

SRCROOT = .
SYMROOT = .
OBJROOT = .
OFILE_DIRS = $(OBJROOT)/shlib_obj $(OBJROOT)/profile_obj \
	     $(OBJROOT)/optimized_obj $(OBJROOT)/dynamic_obj \
	     $(OBJROOT)/ptmp_obj $(OBJROOT)/otmp_obj $(OBJROOT)/dtmp_obj \
	     $(OBJROOT)/kld_obj $(OBJROOT)/ktmp_obj
OFILE_DIR = $(OBJROOT)
VPATH = $(OFILE_DIR)

ifeq "macos" "$(RC_OS)"
  ARCHIVEDIR := $(shell if [ "$(RC_RELEASE)" = "Beaker" ] || \
			   [ "$(RC_RELEASE)" = "Bunsen" ] || \
			   [ "$(RC_RELEASE)" = "Gonzo" ]; then \
	 echo /Local/Developer/System; else echo /usr/local/lib/system; fi; )
else
  ARCHIVEDIR = /Local/Developer/System
endif
DYLIBDIR = /usr/lib/system

CFILES = arch.c getsecbyname.c getsegbyname.c get_end.c \
	 swap.c hppa_swap.c i386_swap.c m68k_swap.c sparc_swap.c \
	 ppc_swap.c i860_swap.c m88k_swap.c

INSTALL_FILES = $(CFILES) $(HFILES) shlib.ofileList dylib.ofileList Makefile \
		notes

OBJS = arch.o getsecbyname.o getsegbyname.o get_end.o swap.o \
       hppa_swap.o i386_swap.o m68k_swap.o sparc_swap.o ppc_swap.o \
       i860_swap.o m88k_swap.o vers.o

ifeq "$(OLD_LIBKLD)" "YES"
	KLD_OFILES = kld_ofiles
else
	KLD_OFILES = 
endif

all: lib_ofiles

macos: optimized_ofiles $(KLD_OFILES)

teflon: optimized_ofiles $(KLD_OFILES)

nextstep: optimized_ofiles $(KLD_OFILES) shlib_ofiles

lib_ofiles: $(OFILE_DIRS) $(SYMROOT) $(RC_OS) dynamic_ofiles profile_ofiles

shlib_ofiles: $(OBJROOT)/shlib_obj
	@if [ $(SRCROOT) = . ];						\
	then								\
	    (cd shlib_obj;						\
		$(MAKE) -f ../Makefile $(OBJS)				\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
		LIBSTUFF="-L../../libstuff -lstuff_s"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    rm -f shlib_obj/libmacho.ofileList;				\
	    cp shlib.ofileList shlib_obj/libmacho.ofileList;		\
	else								\
	    (cd $(OBJROOT)/shlib_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile $(OBJS)			\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/shlib_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_s"		\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    rm -f $(OBJROOT)/shlib_obj/libmacho.ofileList;		\
	    cp shlib.ofileList $(OBJROOT)/shlib_obj/libmacho.ofileList;	\
	fi

profile_ofiles:	$(OBJROOT)/profile_obj $(OBJROOT)/ptmp_obj
	@if [ $(SRCROOT) = . ];						\
	then								\
	    (cd ptmp_obj;						\
		$(MAKE) -f ../Makefile libmacho_pg.a libmacho_profile.dylib \
		INSTALL_NAME=/usr/lib/system/libmacho_profile.dylib	\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-dynamic $(PG)"					\
		LIBSTUFF="-L../../libstuff -lstuff_p"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd profile_obj; rm -f $(OBJS));				\
	    (cd ptmp_obj; cp $(OBJS) ../profile_obj); \
	    rm -f dynamic_profile_obj;					\
	    ln -s ./profile_obj dynamic_profile_obj;			\
	    rm -f profile_obj/libmacho.ofileList;			\
	    cp dylib.ofileList profile_obj/libmacho.ofileList;		\
	else								\
	    (cd $(OBJROOT)/ptmp_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile libmacho_pg.a		\
		libmacho_profile.dylib					\
		INSTALL_NAME=/usr/lib/system/libmacho_profile.dylib	\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/ptmp_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_p"		\
		COPTS="-dynamic $(PG)"					\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd $(OBJROOT)/profile_obj; rm -f $(OBJS));			\
	    (cd $(OBJROOT)/ptmp_obj; 					\
		cp $(OBJS) $(OBJROOT)/profile_obj); \
	    rm -f $(OBJROOT)/dynamic_profile_obj;			\
	    ln -s ./profile_obj $(OBJROOT)/dynamic_profile_obj;		\
	    rm -f $(OBJROOT)/profile_obj/libmacho.ofileList;		\
	    cp dylib.ofileList $(OBJROOT)/profile_obj/libmacho.ofileList; \
	fi

optimized_ofiles: $(OBJROOT)/optimized_obj $(OBJROOT)/otmp_obj
	@if [ $(SRCROOT) = . ];						\
	then								\
	    (cd otmp_obj;						\
		$(MAKE) -f ../Makefile libmacho_static.a		\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-static"						\
		LIBSTUFF="-L../../libstuff -lstuff"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd optimized_obj; rm -f $(OBJS));				\
	    (cd otmp_obj; cp $(OBJS) ../optimized_obj); 		\
	    rm -f static_obj;						\
	    ln -s ./optimized_obj static_obj;				\
	    rm -f optimized_obj/libmacho.ofileList;			\
	    cp dylib.ofileList optimized_obj/libmacho.ofileList;	\
	else								\
	    (cd $(OBJROOT)/otmp_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile libmacho_static.a	\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/otmp_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		COPTS="-static"						\
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd $(OBJROOT)/optimized_obj; rm -f $(OBJS));		\
	    (cd $(OBJROOT)/otmp_obj; 					\
		cp $(OBJS) $(OBJROOT)/optimized_obj); 			\
	    rm -f $(OBJROOT)/static_obj;				\
	    ln -s ./optimized_obj $(OBJROOT)/static_obj;		\
	    rm -f $(OBJROOT)/optimized_obj/libmacho.ofileList;		\
	    cp dylib.ofileList $(OBJROOT)/optimized_obj/libmacho.ofileList; \
	fi

kld_ofiles: $(OBJROOT)/kld_obj $(OBJROOT)/ktmp_obj
	@if [ $(SRCROOT) = . ];						\
	then								\
	    (cd ktmp_obj;						\
		$(MAKE) -f ../Makefile libmacho_kld.a			\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
		LIBSTUFF="-L../../libstuff -lstuff_kld"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd kld_obj; rm -f $(OBJS));				\
	    (cd ktmp_obj; cp $(OBJS) ../kld_obj); 			\
	else								\
	    (cd $(OBJROOT)/ktmp_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile libmacho_kld.a		\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/ktmp_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_kld"		\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd $(OBJROOT)/kld_obj; rm -f $(OBJS));			\
	    (cd $(OBJROOT)/ktmp_obj; 					\
		cp $(OBJS) $(OBJROOT)/kld_obj); 			\
	fi

dynamic_ofiles: $(OBJROOT)/dynamic_obj $(OBJROOT)/dtmp_obj
	@if [ $(SRCROOT) = . ];						\
	then								\
	    (cd dtmp_obj;						\
		$(MAKE) -f ../Makefile libmacho.a libmacho.dylib	\
		INSTALL_NAME=/usr/lib/system/libmacho.dylib		\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-dynamic"					\
		LIBSTUFF="-L../../libstuff -lstuff"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd dtmp_obj;						\
		$(MAKE) -f ../Makefile libmacho_debug.dylib		\
		INSTALL_NAME=/usr/lib/system/libmacho_debug.dylib	\
		VPATH=.. 						\
		OFILE_DIR=.						\
		SRCROOT=..						\
		COPTS="-dynamic"					\
		LIBSTUFF="-L../../libstuff -lstuff"			\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd dynamic_obj; rm -f $(OBJS));				\
	    (cd dtmp_obj; cp $(OBJS) ../dynamic_obj); 			\
	    rm -f dynamic_obj/libmacho.ofileList;			\
	    cp dylib.ofileList dynamic_obj/libmacho.ofileList;		\
	else								\
	    (cd $(OBJROOT)/dtmp_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile libmacho.a libmacho.dylib \
		INSTALL_NAME=/usr/lib/system/libmacho.dylib		\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/dtmp_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
		COPTS="-dynamic"					\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd $(OBJROOT)/dtmp_obj;					\
		$(MAKE) -f $(SRCROOT)/Makefile libmacho_debug.dylib	\
		INSTALL_NAME=/usr/lib/system/libmacho_debug.dylib	\
		VPATH=$(SRCROOT)					\
		OFILE_DIR=$(OBJROOT)/dtmp_obj				\
		SRCROOT=$(SRCROOT)					\
		SYMROOT=$(SYMROOT)					\
		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
		COPTS="-dynamic"					\
		OFLAG="$(OFLAG)"					\
		RC_CFLAGS="$(RC_CFLAGS)"				\
		RC_ARCHS="$(RC_ARCHS)");				\
	    (cd $(OBJROOT)/dynamic_obj; rm -f $(OBJS));			\
	    (cd $(OBJROOT)/dtmp_obj;					\
		cp $(OBJS) $(OBJROOT)/dynamic_obj); 			\
	    rm -f $(OBJROOT)/dynamic_obj/libmacho.ofileList;		\
	    cp dylib.ofileList $(OBJROOT)/dynamic_obj/libmacho.ofileList; \
	fi

ifeq "NO" "$(USE_DEPENDENCY_FILE)"
.c.o:
	$(CC) $(CFLAGS) $(RC_CFLAGS) $(COPTS) -c -o $(OFILE_DIR)/$*.o $<
else
.c.o:
	$(CC) $(CFLAGS) $(RC_CFLAGS) $(COPTS) -c \
		-MD -dependency-file $(OFILE_DIR)/$*.d \
		-o $(OFILE_DIR)/$*.o $<
	md -d -u $(OFILE_DIR)/Makedep $(OFILE_DIR)/$*.d
endif

vers.c:
	vers_string -l $(VERS_STRING_FLAGS) libmacho > $(OFILE_DIR)/$@
	echo "const char *libmacho_version= SGS_VERS;" >> $(OFILE_DIR)/$@

clean:
	-rm -r -f $(OFILE_DIRS) $(OBJROOT)/static_obj

shlib_clean:
	-rm -r -f $(OBJROOT)/ptmp_obj $(OBJROOT)/otmp_obj $(OBJROOT)/dtmp_obj

libmacho.a libmacho_pg.a libmacho_static.a libmacho_kld.a: $(OBJS)
	libtool -static -o $(SYMROOT)/$@ $(OBJS)

libmacho.dylib libmacho_profile.dylib libmacho_debug.dylib: $(OBJS)
	$(CC) $(CFLAGS) $(RC_CFLAGS) $(COPTS) -dynamiclib  \
		-o $(SYMROOT)/$@ $(OBJS) \
		-install_name $(INSTALL_NAME) \
		-compatibility_version 1 \
		-current_version $(RC_ProjectSourceVersion) \
		-lSystem

install: $(RC_OS)_install

macos_install:

teflon_install nextstep_install: all


lib_ofiles_install: $(RC_OS)_lib_ofiles_install

macos_lib_ofiles_install: all
	$(MKDIRS) $(DSTROOT)$(ARCHIVEDIR) $(DSTROOT)$(DYLIBDIR)
	if [ $(SRCROOT) = . ];						\
	then								\
	    install -c -m 444 dtmp_obj/libmacho.a			\
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;		\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;			\
	    (cd $(DSTROOT)$(ARCHIVEDIR) ;				\
	    rm -f libmacho_debug.a ; ln -s libmacho.a libmacho_debug.a); \
	    install -c -m 444 ptmp_obj/libmacho_pg.a			 \
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;	\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;		\
	    install -c -m 444 otmp_obj/libmacho_static.a		\
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
	    install -c -m 555 dtmp_obj/libmacho.dylib			\
		     $(DSTROOT)$(DYLIBDIR)/libmacho.dylib;		\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho.dylib;		\
	    install -c -m 555 dtmp_obj/libmacho_profile.dylib		\
		     $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib;	\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib;	\
	    install -c -m 555 dtmp_obj/libmacho_debug.dylib		\
		     $(DSTROOT)$(DYLIBDIR)/libmacho_debug.dylib;	\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho_debug.dylib;	\
	else								\
	    install -c -m 444 $(SYMROOT)/libmacho.a			\
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;		\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;			\
	    (cd $(DSTROOT)$(ARCHIVEDIR) ;				\
	    rm -f libmacho_debug.a ; ln -s libmacho.a libmacho_debug.a); \
	    install -c -m 444 $(SYMROOT)/libmacho_pg.a			 \
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;	\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;		\
	    install -c -m 444 $(SYMROOT)/libmacho_static.a		\
		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
	    install -c -m 555 $(SYMROOT)/libmacho.dylib			\
		     $(DSTROOT)$(DYLIBDIR)/libmacho.dylib;		\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho.dylib;		\
	    install -c -m 555 $(SYMROOT)/libmacho_profile.dylib		\
		     $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib;	\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib;	\
	    install -c -m 555 $(SYMROOT)/libmacho_debug.dylib	\
		     $(DSTROOT)$(DYLIBDIR)/libmacho_debug.dylib;	\
	    strip -S $(DSTROOT)$(DYLIBDIR)/libmacho_debug.dylib;	\
	fi

teflon_lib_ofiles_install nextstep_lib_ofiles_install:


installsrc:
	$(MKDIRS) $(SRCROOT)
	chmod 755 $(SRCROOT)
	gnutar cf - $(INSTALL_FILES) | (cd $(SRCROOT); gnutar xf -)
	chmod 444 $(SRCROOT)/*

$(OFILE_DIRS) $(SYMROOT):
	$(MKDIRS) $@

-include $(OFILE_DIR)/Makedep