# Copyright (C) 1989-2022 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@

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-or1k-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/target.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/target.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)" \
	"libdir=$(libdir)" \
	"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; \
	if [ x"$(IPA_DEPFILES)" != x ]; then \
		rm -f $(DESTDIR)$(libdir)/$(IPA_LIB); \
	fi; \
	rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT)

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 config.cache
	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 \
	-Drpl_malloc=malloc -Drpl_realloc=realloc

# 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".
