From: Yao Qi <qiyaoltc@gmail.com>
To: gdb-patches@sourceware.org
Subject: [RFC] Replicate src dir in build dir
Date: Tue, 19 Sep 2017 14:42:00 -0000 [thread overview]
Message-ID: <1505832159-23038-1-git-send-email-yao.qi@linaro.org> (raw)
Nowadays, GDB build tree is almost flat, but source tree isn't. We
have arch/ nat/ target/ common/ cli/ mi/ tui/ python/ guile/ directories.
We need to some rules in Makefile for source files in different source
directories, like,
# Rules for compiling .c files in the various source subdirectories.
%.o: ${srcdir}/arch/%.c
$(COMPILE) $<
$(POSTCOMPILE)
%.o: ${srcdir}/nat/%.c
$(COMPILE) $<
$(POSTCOMPILE)
so we should take care of some special case that files' base name is the
same, like,
# Specify an explicit rule for gdb/common/agent.c, to avoid a clash with the
# object file generate by gdb/agent.c.
common-agent.o: $(srcdir)/common/agent.c
$(COMPILE) $(srcdir)/common/agent.c
$(POSTCOMPILE)
As we add more and more files in different directories, it becomes tricky
to name files, because we need take this into account.
This patch takes the first step toward "Replicate src dir in build dir",
that is, we create arch/ directory in buildtree, and put amd64.o there
as an example. Dependency tracking is updated for files with directory
name. Currently, when we build amd64.o,
"-c -o amd64.o -MT amd64.o -MMD -MP -MF .deps/amd64.Tpo"
with this patch applied, it becomes,
"-c -o arch/amd64.o -MT arch/amd64.o -MMD -MP -MF arch/.deps/amd64.o.Tpo"
"make clean" removes the object files, and "make distclean" removes .deps
additionally. configure file create .deps directory in each of
CONFIG_SRC_SUBDIR, and pass it to Makefile.in, so that "make clean" and
"make distclean" can remove stuffs there.
If people agree with this change, I'll add more directories to
CONFIG_SRC_SUBDIR. I want to do the same to GDBserver, but I haven't
looked at GDBserver configure/Makefile yet.
gdb:
2017-09-19 Yao Qi <yao.qi@linaro.org>
* Makefile.in (CONFIG_SRC_SUBDIR): New.
(ALL_64_TARGET_OBS): Replace amd64.o with arch/amd64.o.
(clean): Remove object files and dependency files.
(distclean): Remove the directory.
* configure.ac: Invoke AC_CONFIG_COMMANDS.
* configure: Re-generated.
* configure.tgt: Replace amd64.o with arch/amd64.o.
---
gdb/Makefile.in | 16 ++++++++++++----
gdb/configure | 15 +++++++++++++++
gdb/configure.ac | 11 +++++++++++
gdb/configure.tgt | 24 ++++++++++++------------
4 files changed, 50 insertions(+), 16 deletions(-)
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 1438f20..a660a27 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -632,6 +632,7 @@ CONFIG_ALL = @CONFIG_ALL@
CONFIG_CLEAN = @CONFIG_CLEAN@
CONFIG_INSTALL = @CONFIG_INSTALL@
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
+CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@
HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@
# -I. for config files.
@@ -767,7 +768,6 @@ ALL_64_TARGET_OBS = \
alpha-nbsd-tdep.o \
alpha-obsd-tdep.o \
alpha-tdep.o \
- amd64.o \
amd64-darwin-tdep.o \
amd64-dicos-tdep.o \
amd64-fbsd-tdep.o \
@@ -777,6 +777,7 @@ ALL_64_TARGET_OBS = \
amd64-sol2-tdep.o \
amd64-tdep.o \
amd64-windows-tdep.o \
+ arch/amd64.o \
ia64-linux-tdep.o \
ia64-tdep.o \
ia64-vms-tdep.o \
@@ -2299,6 +2300,10 @@ clean mostlyclean: $(CONFIG_CLEAN)
rm -f test-cp-name-parser$(EXEEXT)
rm -f xml-builtin.c stamp-xml
rm -f $(DEPDIR)/*
+ @for i in $(CONFIG_SRC_SUBDIR); do \
+ rm -f $$i/*.o; \
+ rm -f $$i/$(DEPDIR)/*; \
+ done
# This used to depend on c-exp.c m2-exp.c TAGS
# I believe this is wrong; the makefile standards for distclean just
@@ -2317,6 +2322,9 @@ distclean: clean
rm -f config.log config.cache
rm -f Makefile
rm -rf $(DEPDIR)
+ @for i in $(CONFIG_SRC_SUBDIR); do \
+ rm -rf $$i/$(DEPDIR); \
+ done
maintainer-clean: local-maintainer-clean do-maintainer-clean distclean
realclean: maintainer-clean
@@ -2941,9 +2949,9 @@ ifeq ($(DEPMODE),depmode=gcc3)
# 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 $(DEPDIR)/$(basename $(@F)).Tpo
-override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
- $(DEPDIR)/$(basename $(@F)).Po
+ -MF $(@D)/$(DEPDIR)/$(@F).Tpo
+override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(@F).Tpo \
+ $(@D)/$(DEPDIR)/$(@F).Po
else
override COMPILE.pre = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
diff --git a/gdb/configure b/gdb/configure
index c7746fc..41b884b 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -733,6 +733,7 @@ LIBINTL_DEP
LIBINTL
USE_NLS
CCDEPMODE
+CONFIG_SRC_SUBDIR
DEPDIR
am__leading_dot
CXX_DIALECT
@@ -5949,6 +5950,13 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depdir"
+# Create sub-directories for objects and depedencies.
+CONFIG_SRC_SUBDIR="arch"
+
+
+ac_config_commands="$ac_config_commands gdbdepdir"
+
+
depcc="$CC" am_compiler_list=
am_depcomp=$ac_aux_dir/depcomp
@@ -18171,6 +18179,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# INIT-COMMANDS
#
ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
+ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"
_ACEOF
@@ -18182,6 +18191,7 @@ do
case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
"depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
+ "gdbdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gdbdepdir" ;;
"jit-reader.h") CONFIG_FILES="$CONFIG_FILES jit-reader.h:jit-reader.in" ;;
"$ac_config_links_1") CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
"gcore") CONFIG_FILES="$CONFIG_FILES gcore" ;;
@@ -18805,6 +18815,11 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
case $ac_file$ac_mode in
"depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
+ "gdbdepdir":C)
+ for subdir in ${CONFIG_SRC_SUBDIR}
+ do
+ $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR
+ done ;;
"gcore":F) chmod +x gcore ;;
"Makefile":F)
case x$CONFIG_HEADERS in
diff --git a/gdb/configure.ac b/gdb/configure.ac
index b4d7a87..081c4c9 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -44,6 +44,17 @@ AX_CXX_COMPILE_STDCXX(11, , mandatory)
# Dependency checking.
ZW_CREATE_DEPDIR
+# Create sub-directories for objects and depedencies.
+CONFIG_SRC_SUBDIR="arch"
+AC_SUBST(CONFIG_SRC_SUBDIR)
+
+AC_CONFIG_COMMANDS([gdbdepdir],[
+ for subdir in ${CONFIG_SRC_SUBDIR}
+ do
+ $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR
+ done],
+ [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"])
+
ZW_PROG_COMPILER_DEPENDENCIES([CC])
gnulib_extra_configure_args=
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 321a739..a7d89c7 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -194,7 +194,7 @@ i[34567]86-*-darwin*)
i386-darwin-tdep.o solib-darwin.o"
if test "x$enable_64_bit_bfd" = "xyes"; then
# Target: GNU/Linux x86-64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-darwin-tdep.o ${gdb_target_obs}"
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-darwin-tdep.o ${gdb_target_obs}"
fi
;;
i[34567]86-*-dicos*)
@@ -225,7 +225,7 @@ i[34567]86-*-nto*)
;;
i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
# Target: Solaris x86_64
- gdb_target_obs="i386-tdep.o i386.o i387-tdep.o amd64-tdep.o amd64.o \
+ gdb_target_obs="i386-tdep.o i386.o i387-tdep.o amd64-tdep.o arch/amd64.o \
amd64-sol2-tdep.o i386-sol2-tdep.o sol2-tdep.o \
solib-svr4.o"
;;
@@ -242,7 +242,7 @@ i[34567]86-*-linux*)
linux-tdep.o linux-record.o"
if test "x$enable_64_bit_bfd" = "xyes"; then
# Target: GNU/Linux x86-64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-linux-tdep.o ${gdb_target_obs}"
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-linux-tdep.o ${gdb_target_obs}"
fi
build_gdbserver=yes
;;
@@ -671,52 +671,52 @@ vax-*-*)
x86_64-*-darwin*)
# Target: Darwin/x86-64
- gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i386.o i387-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o i386-tdep.o i386.o i387-tdep.o \
i386-darwin-tdep.o amd64-darwin-tdep.o \
solib-darwin.o"
;;
x86_64-*-dicos*)
# Target: DICOS/x86-64
- gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i386.o i387-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o i386-tdep.o i386.o i387-tdep.o \
dicos-tdep.o i386-dicos-tdep.o amd64-dicos-tdep.o"
;;
x86_64-*-elf*)
- gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i386.o i387-tdep.o"
+ gdb_target_obs="amd64-tdep.o arch/amd64.o i386-tdep.o i386.o i387-tdep.o"
;;
x86_64-*-linux*)
# Target: GNU/Linux x86-64
- gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o amd64.o i386-tdep.o \
+ gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o arch/amd64.o i386-tdep.o \
i387-tdep.o i386.o i386-linux-tdep.o glibc-tdep.o \
solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
build_gdbserver=yes
;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
# Target: FreeBSD/amd64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-fbsd-tdep.o i386-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-fbsd-tdep.o i386-tdep.o \
i386.o i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
fbsd-tdep.o solib-svr4.o"
;;
x86_64-*-mingw* | x86_64-*-cygwin*)
# Target: MingW/amd64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-windows-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-windows-tdep.o \
i386-tdep.o i386.o i386-cygwin-tdep.o i387-tdep.o \
windows-tdep.o"
build_gdbserver=yes
;;
x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
# Target: NetBSD/amd64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-nbsd-tdep.o i386-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-nbsd-tdep.o i386-tdep.o \
i386.o i387-tdep.o nbsd-tdep.o solib-svr4.o"
;;
x86_64-*-openbsd*)
# Target: OpenBSD/amd64
- gdb_target_obs="amd64-tdep.o amd64.o amd64-obsd-tdep.o i386-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o amd64-obsd-tdep.o i386-tdep.o \
i387-tdep.o i386-bsd-tdep.o i386-obsd-tdep.o \
i386.o obsd-tdep.o bsd-uthread.o solib-svr4.o"
;;
x86_64-*-rtems*)
- gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i386.o i387-tdep.o \
+ gdb_target_obs="amd64-tdep.o arch/amd64.o i386-tdep.o i386.o i387-tdep.o \
i386-bsd-tdep.o"
;;
xtensa*-*-linux*) gdb_target=linux
--
1.9.1
next reply other threads:[~2017-09-19 14:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-19 14:42 Yao Qi [this message]
2017-09-19 20:44 ` Simon Marchi
2017-09-20 8:04 ` Yao Qi
2017-09-20 8:17 ` Simon Marchi
2017-09-20 14:26 ` Yao Qi
2017-09-20 11:26 ` Pedro Alves
2017-09-20 16:49 ` Yao Qi
2017-09-20 17:45 ` Pedro Alves
2017-09-29 19:23 ` Yao Qi
2017-10-03 20:02 ` Pedro Alves
2017-10-03 20:14 ` Kamil Rytarowski
2017-10-03 22:04 ` Pedro Alves
2017-10-04 9:46 ` Kamil Rytarowski
2017-10-06 9:29 ` Yao Qi
2017-10-04 11:41 ` Pedro Alves
2017-10-06 10:21 ` Yao Qi
2017-10-08 3:24 ` Tom Tromey
2017-10-08 21:04 ` Yao Qi
2017-10-11 1:25 ` Yao Qi
2017-10-11 3:26 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1505832159-23038-1-git-send-email-yao.qi@linaro.org \
--to=qiyaoltc@gmail.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox