# Copyright (C) 1989-2021 Free Software Foundation, Inc.

# This file is part of GDB.

# This program 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 of the License, or
# (at your option) any later version.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

# Please keep lists in this file sorted alphabetically, with one item per line.
# See gdb/Makefile.in for guidelines on ordering files and directories.

prefix = @prefix@
exec_prefix = @exec_prefix@

host_alias = @host_noncanonical@
target_alias = @target_noncanonical@
program_transform_name = @program_transform_name@
bindir = @bindir@
libdir = @libdir@
tooldir = $(libdir)/$(target_alias)

datarootdir = @datarootdir@
datadir = @datadir@
mandir = @mandir@
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
infodir = @infodir@
htmldir = $(prefix)/html
includedir = @includedir@
CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@

install_sh = @install_sh@

SHELL = @SHELL@
EXEEXT = @EXEEXT@

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
RANLIB = @RANLIB@

CC = @CC@
CXX = @CXX@
CXX_DIALECT = @CXX_DIALECT@
AR = @AR@
AR_FLAGS = rc
STRIP = @STRIP@

# Dependency tracking information.
DEPMODE = @CCDEPMODE@
DEPDIR = @DEPDIR@
depcomp = $(SHELL) $(srcdir)/../depcomp

# Directory containing source files.  Don't clean up the spacing,
# this exact string is matched for by the "configure" script.
srcdir = @srcdir@
abs_top_srcdir = @abs_top_srcdir@
abs_srcdir = @abs_srcdir@
VPATH = @srcdir@

top_builddir = .

include $(srcdir)/../gdb/silent-rules.mk

# Note that these are overridden by GNU make-specific code below if
# GNU make is used.  The overrides implement dependency tracking.
COMPILE.pre = $(CXX) $(CXX_DIALECT)
COMPILE.post = -c -o $@
POSTCOMPILE = @true

# CXXFLAGS is at the very end on purpose, so that user-supplied flags can
# override internal flags.
COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(INTERNAL_CFLAGS) $(CXXFLAGS) $(COMPILE.post)

# It is also possible that you will need to add -I/usr/include/sys to the
# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which
# is where it should be according to Posix).

# Set this up with gcc if you have gnu ld and the loader will print out
# line numbers for undefinded refs.
#CC_LD = g++ -static
CC_LD = $(CXX) $(CXX_DIALECT)

# Where is the "include" directory?  Traditionally ../include or ./include
INCLUDE_DIR = ${srcdir}/../include
INCLUDE_DEP = $$(INCLUDE_DIR)

LIBIBERTY_BUILDDIR = ../libiberty
LIBIBERTY_NORMAL = $(LIBIBERTY_BUILDDIR)/libiberty.a
LIBIBERTY_NOASAN = $(LIBIBERTY_BUILDDIR)/noasan/libiberty.a
LIBIBERTY_PIC = $(LIBIBERTY_BUILDDIR)/pic/libiberty.a
LIBIBERTY_FOR_SHLIB = \
  $(if $(wildcard $(LIBIBERTY_NOASAN)),\
       $(LIBIBERTY_NOASAN),\
       $(if $(wildcard $(LIBIBERTY_PIC)),\
	    $(LIBIBERTY_PIC),\
	    $(LIBIBERTY_NORMAL)))
LIBIBERTY = $(LIBIBERTY_NORMAL)

GDBSUPPORT_BUILDDIR = ../gdbsupport
GDBSUPPORT = $(GDBSUPPORT_BUILDDIR)/libgdbsupport.a

# Where is ust?  These will be empty if ust was not available.
ustlibs = @ustlibs@
ustinc = @ustinc@

# gnulib
GNULIB_PARENT_DIR = ..
include $(GNULIB_PARENT_DIR)/gnulib/Makefile.gnulib.inc

# Where is the INTL library?  Typically in ../intl.
INTL = @LIBINTL@
INTL_DEPS = @LIBINTL_DEP@
INTL_CFLAGS = @INCINTL@

INCSUPPORT = -I$(srcdir)/.. -I..

# All the includes used for CFLAGS and for lint.
# -I. for config files.
# -I${srcdir} for our headers.
# -I$(srcdir)/../gdb/regformats for regdef.h.
#
# We do not include ../target or ../nat in here because headers
# in those directories should be included with the subdirectory.
# e.g.: "target/wait.h".
#
INCLUDE_CFLAGS = -I. -I${srcdir} \
	-I$(srcdir)/../gdb/regformats -I$(srcdir)/.. -I$(INCLUDE_DIR) \
	-I$(srcdir)/../gdb $(INCGNU) $(INCSUPPORT) \
	$(INTL_CFLAGS)

# M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS
# from the config/ directory.
GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS}
#PROFILE_CFLAGS = -pg

WARN_CFLAGS = @WARN_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@

WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_CFLAGS) " \
		   | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"`

# These are specifically reserved for setting from the command line
# when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
CPPFLAGS = @CPPFLAGS@

PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@

WIN32APILIBS = @WIN32APILIBS@

# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
INTERNAL_CFLAGS_BASE = ${GLOBAL_CFLAGS} \
	${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS)
INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS)
INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER

# LDFLAGS is specifically reserved for setting from the command line
# when running make.
LDFLAGS = @LDFLAGS@
INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@

# All source files that go into linking GDB remote server.

SFILES = \
	$(srcdir)/debug.cc \
	$(srcdir)/dll.cc \
	$(srcdir)/gdbreplay.cc \
	$(srcdir)/hostio.cc \
	$(srcdir)/i387-fp.cc \
	$(srcdir)/inferiors.cc \
	$(srcdir)/linux-aarch64-low.cc \
	$(srcdir)/linux-arc-low.cc \
	$(srcdir)/linux-arm-low.cc \
	$(srcdir)/linux-ia64-low.cc \
	$(srcdir)/linux-low.cc \
	$(srcdir)/linux-m68k-low.cc \
	$(srcdir)/linux-mips-low.cc \
	$(srcdir)/linux-nios2-low.cc \
	$(srcdir)/linux-ppc-low.cc \
	$(srcdir)/linux-riscv-low.cc \
	$(srcdir)/linux-s390-low.cc \
	$(srcdir)/linux-sh-low.cc \
	$(srcdir)/linux-sparc-low.cc \
	$(srcdir)/linux-x86-low.cc \
	$(srcdir)/linux-xtensa-low.cc \
	$(srcdir)/mem-break.cc \
	$(srcdir)/netbsd-aarch64-low.cc \
	$(srcdir)/netbsd-amd64-low.cc \
	$(srcdir)/netbsd-i386-low.cc \
	$(srcdir)/netbsd-low.cc \
	$(srcdir)/netbsd-low.h \
	$(srcdir)/proc-service.cc \
	$(srcdir)/proc-service.list \
	$(srcdir)/regcache.cc \
	$(srcdir)/remote-utils.cc \
	$(srcdir)/server.cc \
	$(srcdir)/symbol.cc \
	$(srcdir)/target.cc \
	$(srcdir)/thread-db.cc \
	$(srcdir)/utils.cc \
	$(srcdir)/win32-i386-low.cc \
	$(srcdir)/win32-low.cc \
	$(srcdir)/x86-low.cc \
	$(srcdir)/../gdb/alloc.c \
	$(srcdir)/../gdb/arch/arc.c \
	$(srcdir)/../gdb/arch/arm.c \
	$(srcdir)/../gdb/arch/arm-get-next-pcs.c \
	$(srcdir)/../gdb/arch/arm-linux.c \
	$(srcdir)/../gdb/arch/ppc-linux-common.c \
	$(srcdir)/../gdb/arch/riscv.c \
	$(srcdir)/../gdb/nat/aarch64-mte-linux-ptrace.c \
	$(srcdir)/../gdb/nat/aarch64-sve-linux-ptrace.c \
	$(srcdir)/../gdb/nat/linux-btrace.c \
	$(srcdir)/../gdb/nat/linux-namespaces.c \
	$(srcdir)/../gdb/nat/linux-osdata.c \
	$(srcdir)/../gdb/nat/linux-personality.c \
	$(srcdir)/../gdb/nat/mips-linux-watch.c \
	$(srcdir)/../gdb/nat/ppc-linux.c \
	$(srcdir)/../gdb/nat/riscv-linux-tdesc.c \
	$(srcdir)/../gdb/nat/fork-inferior.c \
	$(srcdir)/../gdb/target/waitstatus.c

DEPFILES = @GDBSERVER_DEPFILES@

LIBOBJS = @LIBOBJS@

SOURCES = $(SFILES)
TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}

OBS = \
	alloc.o \
	ax.o \
	debug.o \
	dll.o \
	hostio.o \
	inferiors.o \
	mem-break.o \
	notif.o \
	regcache.o \
	remote-utils.o \
	server.o \
	symbol.o \
	target.o \
	tdesc.o \
	tracepoint.o \
	utils.o \
	version.o \
	target/waitstatus.o \
	$(DEPFILES) \
	$(LIBOBJS) \
	$(XML_BUILTIN)

GDBREPLAY_OBS = \
	gdbreplay.o \
	utils.o \
	version.o

GDBSERVER_LIBS = @GDBSERVER_LIBS@ $(PTHREAD_LIBS)
XM_CLIBS = @LIBS@
CDEPS = $(srcdir)/proc-service.list

# XML files to compile in to gdbserver, if any.
XML_DIR = $(srcdir)/../gdb/features
XML_FILES = @srv_xmlfiles@
XML_BUILTIN = @srv_xmlbuiltin@

IPA_DEPFILES = @IPA_DEPFILES@
extra_libraries = @extra_libraries@

FLAGS_TO_PASS = \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"infodir=$(infodir)" \
	"datarootdir=$(datarootdir)" \
	"docdir=$(docdir)" \
	"htmldir=$(htmldir)" \
	"pdfdir=$(pdfdir)" \
	"libdir=$(libdir)" \
	"mandir=$(mandir)" \
	"datadir=$(datadir)" \
	"includedir=$(includedir)" \
	"against=$(against)" \
	"DESTDIR=$(DESTDIR)" \
	"AR=$(AR)" \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS)" \
	"CXX=$(CXX)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"DLLTOOL=$(DLLTOOL)" \
	"LDFLAGS=$(LDFLAGS)" \
	"RANLIB=$(RANLIB)" \
	"MAKEINFO=$(MAKEINFO)" \
	"MAKEHTML=$(MAKEHTML)" \
	"MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"RUNTEST=$(RUNTEST)" \
	"RUNTESTFLAGS=$(RUNTESTFLAGS)"

# All generated files which can be included by another file.
generated_files = config.h

all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries)

# Traditionally "install" depends on "all".  But it may be useful
# not to; for example, if the user has made some trivial change to a
# source file and doesn't care about rebuilding or just wants to save the
# time it takes for make to check that all is up to date.
# install-only is intended to address that need.
install: all
	@$(MAKE) $(FLAGS_TO_PASS) install-only

install-only:
	n=`echo gdbserver | sed '$(program_transform_name)'`; \
	if [ x$$n = x ]; then n=gdbserver; else true; fi; \
	if [ x"$(IPA_DEPFILES)" != x ]; then \
		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(libdir); \
		$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $(IPA_LIB) $(DESTDIR)$(libdir)/$(IPA_LIB); \
	fi; \
	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \
	$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)

install-strip:
	$(MAKE) $(FLAGS_TO_PASS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install-only

uninstall: force
	n=`echo gdbserver | sed '$(program_transform_name)'`; \
	if [ x$$n = x ]; then n=gdbserver; else true; fi; \
	rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1

installcheck:
check:
info dvi pdf:
install-info:
install-pdf:
html:
install-html:
clean-info:

gdbserver$(EXEEXT): $(sort $(OBS)) ${CDEPS} $(LIBGNU) $(LIBIBERTY) \
		$(INTL_DEPS) $(GDBSUPPORT)
	$(SILENCE) rm -f gdbserver$(EXEEXT)
	$(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
		$(CXXFLAGS) \
		-o gdbserver$(EXEEXT) $(OBS) $(GDBSUPPORT) $(LIBGNU) \
		$(LIBGNU_EXTRA_LIBS) $(LIBIBERTY) $(INTL) \
		$(GDBSERVER_LIBS) $(XM_CLIBS) $(WIN32APILIBS)

gdbreplay$(EXEEXT): $(sort $(GDBREPLAY_OBS)) $(LIBGNU) $(LIBIBERTY) \
		$(INTL_DEPS) $(GDBSUPPORT)
	$(SILENCE) rm -f gdbreplay$(EXEEXT)
	$(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
		$(CXXFLAGS) \
		-o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) $(XM_CLIBS) \
		$(GDBSUPPORT) $(LIBGNU) $(LIBGNU_EXTRA_LIBS) \
		$(LIBIBERTY) $(INTL) $(WIN32APILIBS)

IPA_OBJS = \
	alloc-ipa.o \
	ax-ipa.o \
	gdbsupport/common-utils-ipa.o \
	gdbsupport/errors-ipa.o \
	gdbsupport/format-ipa.o \
	gdbsupport/print-utils-ipa.o \
	gdbsupport/rsp-low-ipa.o \
	gdbsupport/safe-strerror-ipa.o \
	gdbsupport/tdesc-ipa.o \
	regcache-ipa.o \
	remote-utils-ipa.o \
	tdesc-ipa.o \
	tracepoint-ipa.o \
	utils-ipa.o \
	${IPA_DEPFILES}

IPA_LIB = libinproctrace.so

$(IPA_LIB): $(sort $(IPA_OBJS)) ${CDEPS}
	$(SILENCE) rm -f $(IPA_LIB)
	$(ECHO_CXXLD) $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) \
		-Wl,--no-undefined $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
		 $(CXXFLAGS) \
		-o $(IPA_LIB) ${IPA_OBJS} $(LIBIBERTY_FOR_SHLIB) -ldl -pthread

# Put the proper machine-specific files first, so M-. on a machine
# specific routine gets the one for the correct machine.
# The xyzzy stuff below deals with empty DEPFILES
TAGS:	${TAGFILES}
	etags \
	  `for i in yzzy ${DEPFILES}; do \
	     if [ x$$i != xyzzy ]; then \
	       echo ${srcdir}/$$i | sed -e 's/\.o$$/\.cc/' \
		 -e 's,/\(arch\|nat\|target\)/,/../\1/,' \
	     fi; \
	   done` \
	  ${TAGFILES}
tags: TAGS

mostlyclean clean:
	rm -f *.o ${ADD_FILES} *~
	rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log
	rm -f $(IPA_LIB)
	rm -f *-generated.cc
	rm -f stamp-xml
	rm -f $(DEPDIR)/*.Po
	for i in $(CONFIG_SRC_SUBDIR); do \
		rm -f $$i/*.o;	\
		rm -f $$i/$(DEPDIR)/*; \
	done

maintainer-clean realclean distclean: clean
	rm -f Makefile config.status config.h stamp-h config.log
	rm -f Makefile
	for i in $(CONFIG_SRC_SUBDIR); do \
		rmdir $$i/$(DEPDIR); \
	done

config.h: stamp-h ; @true
stamp-h: config.in config.status
	$(SHELL) ./config.status config.h

Makefile: Makefile.in config.status
	$(SHELL) ./config.status $@

config.status: configure configure.srv $(srcdir)/../bfd/development.sh
	$(SHELL) ./config.status --recheck

# automatic rebuilding in automake-generated Makefiles requires
# this rule in the toplevel Makefile, which, with GNU make, causes
# the desired updates through the implicit regeneration of the Makefile
# and all of its prerequisites.
am--refresh:
	@:

force:

version-generated.cc: Makefile $(srcdir)/../gdb/version.in $(srcdir)/../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh
	$(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir)/../gdb \
		$(host_alias) $(target_alias) $@

xml-builtin-generated.cc: stamp-xml; @true
stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES)
	$(SILENCE) rm -f xml-builtin.tmp
	$(ECHO_GEN_XML_BUILTIN_GENERATED) $(SHELL) $(XML_DIR)/feature_to_c.sh \
		xml-builtin.tmp $(XML_FILES)
	$(SILENCE) $(SHELL) $(srcdir)/../move-if-change xml-builtin.tmp xml-builtin-generated.cc
	$(SILENCE) echo stamp > stamp-xml

.PRECIOUS: xml-builtin.cc

# GNU Make has an annoying habit of putting *all* the Makefile variables
# into the environment, unless you include this target as a circumvention.
# Rumor is that this will be fixed (and this target can be removed)
# in GNU Make 4.0.
.NOEXPORT:

# GNU Make 3.63 has a different problem: it keeps tacking command line
# overrides onto the definition of $(MAKE).  This variable setting
# will remove them.
MAKEOVERRIDES =

regdat_sh = $(srcdir)/../gdb/regformats/regdat.sh

UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION

# Undo gnulib replacements for the IPA shared library build.
# The gnulib headers are still needed, but gnulib is not linked
# into the IPA lib so replacement apis don't work.
UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r -Drpl_free=free

# Note, we only build the IPA if -fvisibility=hidden is supported in
# the first place.
IPAGENT_CFLAGS = $(INTERNAL_CFLAGS) $(UST_CFLAGS) \
	$(UNDO_GNULIB_CFLAGS) \
	-fPIC -DIN_PROCESS_AGENT \
	-fvisibility=hidden

# CXXFLAGS is at the very end on purpose, so that user-supplied flags can
# override internal flags.
IPAGENT_COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(IPAGENT_CFLAGS) $(CXXFLAGS) $(COMPILE.post)

# Rules for special cases.

ax-ipa.o: ax.cc
	$(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
	$(POSTCOMPILE)

ax.o: ax.cc
	$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
	$(POSTCOMPILE)

# Rules for objects that go in the in-process agent.

arch/%-ipa.o: ../gdb/arch/%.c
	$(IPAGENT_COMPILE) -x c++ $<
	$(POSTCOMPILE)

gdbsupport/%-ipa.o: ../gdbsupport/%.cc
	$(IPAGENT_COMPILE) $<
	$(POSTCOMPILE)

%-ipa.o: %-generated.cc
	$(IPAGENT_COMPILE) $<
	$(POSTCOMPILE)

%-ipa.o: %.cc
	$(IPAGENT_COMPILE) $<
	$(POSTCOMPILE)

%-ipa.o: ../gdb/%.c
	$(IPAGENT_COMPILE) -x c++ $<
	$(POSTCOMPILE)

# Note: Between two matching pattern rules, GNU Make 3.81 chooses the first one.
# Therefore, this one needs to be before "%.o: %.cc" for it to be considered for
# files such as linux-amd64-ipa.o generated from linux-amd64-ipa.cc.
#
# Later versions of GNU Make choose the rule with the shortest stem, so it would
# work in any order.

%-ipa.o: %-ipa.cc
	$(IPAGENT_COMPILE) $<
	$(POSTCOMPILE)

# Rules for objects that go in the gdbserver binary.

arch/%.o: ../gdb/arch/%.c
	$(COMPILE) -x c++ $<
	$(POSTCOMPILE)

%.o: %-generated.cc
	$(COMPILE) $<
	$(POSTCOMPILE)

%.o: %.cc
	$(COMPILE) $<
	$(POSTCOMPILE)

nat/%.o: ../gdb/nat/%.c
	$(COMPILE) -x c++ $<
	$(POSTCOMPILE)

target/%.o: ../gdb/target/%.c
	$(COMPILE) -x c++ $<
	$(POSTCOMPILE)

%.o: ../gdb/%.c
	$(COMPILE) -x c++ $<
	$(POSTCOMPILE)

# Rules for register format descriptions.  Suffix destination files with
# -generated to identify and clean them easily.

%-generated.cc: ../gdb/regformats/%.dat $(regdat_sh)
	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@

%-generated.cc: ../gdb/regformats/rs6000/%.dat $(regdat_sh)
	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@

#
# Dependency tracking.
#

ifeq ($(DEPMODE),depmode=gcc3)
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds.  We need this because gcc does
# not atomically write the dependency output file.
override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
	-MF $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo
override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo \
	$(@D)/$(DEPDIR)/$(basename $(@F)).Po
else
override COMPILE.pre = source='$<' object='$@' libtool=no \
	DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) \
	$(CXX) $(CXX_DIALECT)
# depcomp handles atomicity for us, so we don't need a postcompile
# step.
override POSTCOMPILE =
endif

# A list of all the objects we might care about in this build, for
# dependency tracking.
all_object_files = $(OBS) $(GDBREPLAY_OBS) $(IPA_OBJS)

# Ensure that generated files are created early.  Use order-only
# dependencies if available.  They require GNU make 3.80 or newer,
# and the .VARIABLES variable was introduced at the same time.
ifdef .VARIABLES
$(all_object_files): | $(generated_files)
else
$(all_object_files) : $(generated_files)
endif

# All the .deps files to include.
all_deps_files = $(foreach dep,$(patsubst %.o,%.Po,$(all_object_files)),\
		   $(dir $(dep))/$(DEPDIR)/$(notdir $(dep)))

# Dependencies.
-include $(all_deps_files)

# Disable implicit make rules.
include $(srcdir)/../gdb/disable-implicit-rules.mk

# Do not delete intermediate files (e.g. *-generated.cc).
.SECONDARY:

# This is the end of "Makefile.in".
