# Makefile for GNU Objective C runtime library.
# Copyright (C) 1993-2025 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
#<http://www.gnu.org/licenses/>.

#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 @get_gcc_base_ver@ $(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@

lt_host_flags = @lt_host_flags@
extra_ldflags_libobjc = @extra_ldflags_libobjc@

top_builddir = .

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 overridden 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@
XCFLAGS = @XCFLAGS@
WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes
ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) \
	$(XCFLAGS) $(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=@OBJC_GCFLAGS@
OBJC_BOEHM_GC=@OBJC_BOEHM_GC@
OBJC_BOEHM_GC_INCLUDES=@OBJC_BOEHM_GC_INCLUDES@
OBJC_BOEHM_GC_LIBS=@OBJC_BOEHM_GC_LIBS@

INCLUDES = -I$(srcdir)/$(MULTISRCTOP)../gcc \
  -I$(srcdir)/$(MULTISRCTOP)../gcc/config \
  -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \
  -I$(srcdir)/$(MULTISRCTOP)../libgcc \
  -I$(MULTIBUILDTOP)../libgcc \
  -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 \
  message.h \
  objc-decls.h \
  runtime.h \
  thr.h

# Objective-C source files to compile
OBJC_SOURCE_FILES = \
   NXConstStr.m \
   Object.m \
   Protocol.m \
   accessors.m \
   linking.m

# C source files to compile
C_SOURCE_FILES = \
   class.c \
   encoding.c \
   error.c \
   gc.c \
   hash.c \
   init.c \
   ivars.c \
   memory.c \
   methods.c \
   nil_method.c \
   objc-foreach.c \
   objc-sync.c \
   objects.c \
   protocols.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.

exception.lo: exception.c
	$(LIBTOOL_COMPILE) $(CC) $< -c \
	   $(ALL_CFLAGS) $(INCLUDES) -fexceptions \
	   -o $@

exception_gc.lo: exception.c
	$(LIBTOOL_COMPILE) $(CC) $< -c \
	   $(ALL_CFLAGS) $(INCLUDES) $(OBJC_GCFLAGS) -fexceptions \
	   -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) \
		-Wc,-shared-libgcc -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) \
		-Wc,-shared-libgcc -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)/../config/toolexeclibdir.m4 \
	$(srcdir)/../ltoptions.m4 \
	$(srcdir)/../ltsugar.m4 \
	$(srcdir)/../ltversion.m4 \
	$(srcdir)/../lt~obsolete.m4 \
	$(srcdir)/../config/cet.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

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:
