# Makefile for GNU Objective C runtime library. # Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. #This file is part of GCC. #GCC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 3, or (at your option) #any later version. #GCC is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License #along with GCC; see the file COPYING3. If not see #. #This was cribbed from the libchill, libiberty and libstdc++ #Makefile.in files. Some of this stuff may be unnecessary and #worthless. SHELL = @SHELL@ MAKEOVERRIDES= #### Start of system configuration section. #### srcdir = @glibcpp_srcdir@ VPATH = @glibcpp_srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ target_noncanonical = @target_noncanonical@ gcc_version := $(shell cat $(srcdir)/../gcc/BASE-VER) host_subdir = @host_subdir@ top_srcdir = @top_srcdir@ multi_basedir = @multi_basedir@ toolexecdir = @toolexecdir@ # Toolexecdir is used only by toolexeclibdir toolexeclibdir = @toolexeclibdir@ includedirname = @includedirname@ libsuffix = @libsuffix@ extra_ldflags_libobjc = @extra_ldflags_libobjc@ top_builddir = . -include ../boehm-gc/threads.mk libdir = $(exec_prefix)/lib libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version) # Multilib support variables. MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = MULTISUBDIR = MULTIDO = true MULTICLEAN = true # Not configured per top-level version, since that doesn't get passed # down at configure time, but overrridden by the top-level install # target. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ AR_FLAGS = rc RANLIB = @RANLIB@ CC = @CC@ CFLAGS = @CFLAGS@ WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(WARN_CFLAGS) \ -DIN_GCC -DIN_TARGET_LIBS -fno-strict-aliasing -fexceptions # Libtool # The following strings describe the version of the obj-C library # begin compiled and compatibility issues. # Please refer to Libtool documentation about how to manage these # numbers. LIBOBJC_VERSION = @VERSION@ LIBOBJC_GC_VERSION = @VERSION@ LIBTOOL = @LIBTOOL@ $(LIBTOOLFLAGS) LIBTOOL_COMPILE = $(LIBTOOL) --mode=compile LIBTOOL_LINK = $(LIBTOOL) --mode=link LIBTOOL_INSTALL = $(LIBTOOL) --mode=install LIBTOOL_CLEAN = $(LIBTOOL) --mode=clean #LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall OBJC_GCFLAGS=-DOBJC_WITH_GC=1 OBJC_BOEHM_GC=@OBJC_BOEHM_GC@ OBJC_BOEHM_GC_INCLUDES=@OBJC_BOEHM_GC_INCLUDES@ OBJC_BOEHM_GC_LIBS=../boehm-gc/libgcjgc_convenience.la $(thread_libs_and_flags) INCLUDES = -I$(srcdir)/$(MULTISRCTOP)../gcc \ -I$(srcdir)/$(MULTISRCTOP)../gcc/config \ -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \ -I$(srcdir)/$(MULTISRCTOP)../include \ $(OBJC_BOEHM_GC_INCLUDES) ## ## The list of header/source files ## # User-visible header files, from the objc/ directory OBJC_H = \ objc.h \ objc-exception.h \ objc-sync.h \ \ NXConstStr.h \ Object.h \ Protocol.h \ encoding.h \ message.h \ objc-api.h \ objc-decls.h \ thr.h \ \ hash.h \ objc-list.h \ sarray.h \ typedstream.h # User-visible header files containing deprecated APIs, from the # objc/deprecated directory OBJC_DEPRECATED_H = \ MetaClass.h \ Object.h \ STR.h \ hash.h \ objc-list.h \ objc_error.h \ objc_malloc.h \ objc_unexpected_exception.h \ objc_valloc.h \ sarray.h \ struct_objc_class.h \ struct_objc_protocol.h \ struct_objc_selector.h \ typedstream.h # Objective-C source files to compile OBJC_SOURCE_FILES = \ NXConstStr.m \ Object.m \ Protocol.m \ linking.m # C source files to compile C_SOURCE_FILES = \ archive.c \ class.c \ encoding.c \ error.c \ gc.c \ hash.c \ init.c \ memory.c \ nil_method.c \ objc-sync.c \ objects.c \ sarray.c \ selector.c \ sendmsg.c \ thr.c \ exception.c # Object files to link (when the library is linked with no GC (Garbage Collection)) OBJS = \ $(patsubst %.m,%.lo,$(OBJC_SOURCE_FILES)) \ $(patsubst %.c,%.lo,$(C_SOURCE_FILES)) # Object files to link (when the library is linked with GC (Garbage Collection)) OBJS_GC = \ $(patsubst %.m,%_gc.lo,$(OBJC_SOURCE_FILES)) \ $(patsubst %.c,%_gc.lo,$(C_SOURCE_FILES)) ## ## The rules to build ## # Flags to pass to a recursive make. FLAGS_TO_PASS = \ "AR=$(AR)" \ "AR_FLAGS=$(AR_FLAGS)" \ "CC=$(CC)" \ "CFLAGS=$(CFLAGS)" \ "DESTDIR=$(DESTDIR)" \ "LIBCFLAGS=$(LIBCFLAGS)" \ "EXTRA_OFILES=$(EXTRA_OFILES)" \ "HDEFINES=$(HDEFINES)" \ "INSTALL=$(INSTALL)" \ "INSTALL_DATA=$(INSTALL_DATA)" \ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ "LDFLAGS=$(LDFLAGS)" \ "LIBTOOL=$(LIBTOOL)" \ "LOADLIBES=$(LOADLIBES)" \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "SHELL=$(SHELL)" \ "prefix=$(prefix)" \ "exec_prefix=$(exec_prefix)" \ "libdir=$(libdir)" \ "libsubdir=$(libsubdir)" \ "tooldir=$(tooldir)" # The 'all' rule must be the first one so that it is executed if # nothing is specified on the command-line. all: libobjc$(libsuffix).la $(OBJC_BOEHM_GC) : $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all .SUFFIXES: .SUFFIXES: .c .m .lo %.lo: %.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) \ -o $@ %_gc.lo: %.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) \ -o $@ %.lo: %.m $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) -fgnu-runtime \ -o $@ %_gc.lo: %.m $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) -fgnu-runtime \ -o $@ # sendmsg has a special rule because it depends on runtime-info.h. runtime-info.h: echo "" > tmp-runtime.m echo "/* This file is automatically generated */" > $@ $(CC) $(MULTIFLAGS) -print-objc-runtime-info -S tmp-runtime.m >> $@ rm -f tmp-runtime.m tmp-runtime.s sendmsg.lo: sendmsg.c runtime-info.h $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) \ -o $@ sendmsg_gc.lo: sendmsg.c runtime-info.h $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) \ -o $@ # These files have separate rules because they require special # compiler flags. archive.lo: archive.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) -Wno-deprecated-declarations \ -o $@ archive_gc.lo: archive.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) -Wno-deprecated-declarations \ -o $@ # -Wno-deprecated-declarations is for the objc/typedstream.h functions. Object.lo: Object.m $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) -fgnu-runtime -Wno-deprecated-declarations \ -o $@ # -Wno-deprecated-declarations is for the objc/typedstream.h functions. Object_gc.lo: Object.m $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) -fgnu-runtime -Wno-deprecated-declarations \ -o $@ # -Wno-deprecated-declarations is to silence warnings from using # _objc_unexpected_exception. exception.lo: exception.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) -fexceptions -Wno-deprecated-declarations \ -o $@ exception_gc.lo: exception.c $(LIBTOOL_COMPILE) $(CC) $< -c \ $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) -fexceptions -Wno-deprecated-declarations \ -o $@ doc: info dvi pdf html # No install-html or install-pdf support .PHONY: install-html install-pdf install-info install-html: install-pdf: install-info: LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) libobjc$(libsuffix).la: $(OBJS) $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \ -rpath $(toolexeclibdir) \ -version-info $(LIBOBJC_VERSION) $(extra_ldflags_libobjc) \ $(LTLDFLAGS) libobjc_gc$(libsuffix).la: $(OBJS_GC) $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) $(OBJC_BOEHM_GC_LIBS) \ -rpath $(toolexeclibdir) \ -version-info $(LIBOBJC_GC_VERSION) $(extra_ldflags_libobjc) \ $(LTLDFLAGS) info: dvi: pdf: html: Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure rm -f config.cache CONFIG_SITE=no-such-file CC='$(CC)' AR='$(AR)' CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck AUTOCONF = autoconf ACLOCAL = aclocal ACLOCAL_AMFLAGS = -I ../config -I .. aclocal_deps = \ $(srcdir)/../config/multi.m4 \ $(srcdir)/../config/override.m4 \ $(srcdir)/../config/proginstall.m4 \ $(srcdir)/../ltoptions.m4 \ $(srcdir)/../ltsugar.m4 \ $(srcdir)/../ltversion.m4 \ $(srcdir)/../lt~obsolete.m4 \ $(srcdir)/acinclude.m4 $(srcdir)/configure: @MAINT@ configure.ac $(srcdir)/aclocal.m4 rm -f config.cache cd $(srcdir) && $(AUTOCONF) $(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) install: install-libs install-headers install-libs: installdirs $(SHELL) $(multi_basedir)/mkinstalldirs $(DESTDIR)$(toolexeclibdir) $(LIBTOOL_INSTALL) $(INSTALL) libobjc$(libsuffix).la $(DESTDIR)$(toolexeclibdir); if [ "$(OBJC_BOEHM_GC)" ]; then \ $(LIBTOOL_INSTALL) $(INSTALL) libobjc_gc$(libsuffix).la \ $(DESTDIR)$(toolexeclibdir);\ fi $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@" @-$(LIBTOOL) --mode=finish $(DESTDIR)$(toolexeclibdir) # Copy Objective-C headers to installation include directory. install-headers: $(SHELL) $(multi_basedir)/mkinstalldirs $(DESTDIR)$(libsubdir)/$(includedirname)/objc for file in $(OBJC_H); do \ realfile=$(srcdir)/objc/$${file}; \ $(INSTALL_DATA) $${realfile} $(DESTDIR)$(libsubdir)/$(includedirname)/objc; \ done $(multi_basedir)/mkinstalldirs $(DESTDIR)$(libsubdir)/$(includedirname)/objc/deprecated for file in $(OBJC_DEPRECATED_H); do \ realfile=$(srcdir)/objc/deprecated/$${file}; \ $(INSTALL_DATA) $${realfile} $(DESTDIR)$(libsubdir)/$(includedirname)/objc/deprecated; \ done check uninstall install-strip dist installcheck installdirs: mostlyclean: -$(LIBTOOL_CLEAN) rm -f libobjc$(libsuffix).la libobjc_gc$(libsuffix).la *.lo -rm -f runtime-info.h tmp-runtime.s *.o *.lo libobjc* xforward \ fflags *.aux *.cp *.dvi *.pdf *.fn *.info *.ky *.log *.pg \ *.toc *.tp *.vr *.html libobj.exp @$(MULTICLEAN) multi-clean DO=mostlyclean clean: mostlyclean rm -f config.log @$(MULTICLEAN) multi-clean DO=clean distclean: clean @$(MULTICLEAN) multi-clean DO=distclean rm -f config.cache config.status Makefile configure maintainer-clean realclean: distclean .PHONY: mostlyclean clean distclean maintainer-clean all check uninstall \ install-strip dist installcheck installdirs # Don't export variables to the environment, in order to not confuse # configure. .NOEXPORT: