[RFC] Replicate src dir in build dir

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.

gdb:

2017-10-06  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.
This commit is contained in:
Yao Qi 2017-10-06 11:13:30 +01:00
parent 2f924de654
commit f38307f593
5 changed files with 60 additions and 16 deletions

View File

@ -1,3 +1,13 @@
2017-10-06 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.
2017-10-05 Jose E. Marchesi <jose.marchesi@oracle.com> 2017-10-05 Jose E. Marchesi <jose.marchesi@oracle.com>
PR build/22188 PR build/22188

View File

@ -634,6 +634,7 @@ CONFIG_ALL = @CONFIG_ALL@
CONFIG_CLEAN = @CONFIG_CLEAN@ CONFIG_CLEAN = @CONFIG_CLEAN@
CONFIG_INSTALL = @CONFIG_INSTALL@ CONFIG_INSTALL = @CONFIG_INSTALL@
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@ CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@
HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@ HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@
# -I. for config files. # -I. for config files.
@ -768,7 +769,6 @@ ALL_64_TARGET_OBS = \
alpha-nbsd-tdep.o \ alpha-nbsd-tdep.o \
alpha-obsd-tdep.o \ alpha-obsd-tdep.o \
alpha-tdep.o \ alpha-tdep.o \
amd64.o \
amd64-darwin-tdep.o \ amd64-darwin-tdep.o \
amd64-dicos-tdep.o \ amd64-dicos-tdep.o \
amd64-fbsd-tdep.o \ amd64-fbsd-tdep.o \
@ -778,6 +778,7 @@ ALL_64_TARGET_OBS = \
amd64-sol2-tdep.o \ amd64-sol2-tdep.o \
amd64-tdep.o \ amd64-tdep.o \
amd64-windows-tdep.o \ amd64-windows-tdep.o \
arch/amd64.o \
ia64-linux-tdep.o \ ia64-linux-tdep.o \
ia64-tdep.o \ ia64-tdep.o \
ia64-vms-tdep.o \ ia64-vms-tdep.o \
@ -2304,6 +2305,10 @@ clean mostlyclean: $(CONFIG_CLEAN)
rm -f test-cp-name-parser$(EXEEXT) rm -f test-cp-name-parser$(EXEEXT)
rm -f xml-builtin.c stamp-xml rm -f xml-builtin.c stamp-xml
rm -f $(DEPDIR)/* 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 # This used to depend on c-exp.c m2-exp.c TAGS
# I believe this is wrong; the makefile standards for distclean just # I believe this is wrong; the makefile standards for distclean just
@ -2322,6 +2327,9 @@ distclean: clean
rm -f config.log config.cache rm -f config.log config.cache
rm -f Makefile rm -f Makefile
rm -rf $(DEPDIR) rm -rf $(DEPDIR)
for i in $(CONFIG_SRC_SUBDIR); do \
rmdir $$i/$(DEPDIR); \
done
maintainer-clean: local-maintainer-clean do-maintainer-clean distclean maintainer-clean: local-maintainer-clean do-maintainer-clean distclean
realclean: maintainer-clean realclean: maintainer-clean
@ -2948,9 +2956,9 @@ ifeq ($(DEPMODE),depmode=gcc3)
# into place if the compile succeeds. We need this because gcc does # into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file. # not atomically write the dependency output file.
override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \ override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
-MF $(DEPDIR)/$(basename $(@F)).Tpo -MF $(@D)/$(DEPDIR)/$(@F).Tpo
override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \ override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(@F).Tpo \
$(DEPDIR)/$(basename $(@F)).Po $(@D)/$(DEPDIR)/$(@F).Po
else else
override COMPILE.pre = source='$<' object='$@' libtool=no \ override COMPILE.pre = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC) DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)

15
gdb/configure vendored
View File

@ -733,6 +733,7 @@ LIBINTL_DEP
LIBINTL LIBINTL
USE_NLS USE_NLS
CCDEPMODE CCDEPMODE
CONFIG_SRC_SUBDIR
DEPDIR DEPDIR
am__leading_dot am__leading_dot
CXX_DIALECT CXX_DIALECT
@ -5949,6 +5950,13 @@ DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depdir" 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= depcc="$CC" am_compiler_list=
am_depcomp=$ac_aux_dir/depcomp am_depcomp=$ac_aux_dir/depcomp
@ -18006,6 +18014,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# INIT-COMMANDS # INIT-COMMANDS
# #
ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"
_ACEOF _ACEOF
@ -18017,6 +18026,7 @@ do
case $ac_config_target in case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
"depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;; "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" ;; "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" ;; "$ac_config_links_1") CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
"gcore") CONFIG_FILES="$CONFIG_FILES gcore" ;; "gcore") CONFIG_FILES="$CONFIG_FILES gcore" ;;
@ -18640,6 +18650,11 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
case $ac_file$ac_mode in case $ac_file$ac_mode in
"depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; "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 ;; "gcore":F) chmod +x gcore ;;
"Makefile":F) "Makefile":F)
case x$CONFIG_HEADERS in case x$CONFIG_HEADERS in

View File

@ -44,6 +44,17 @@ AX_CXX_COMPILE_STDCXX(11, , mandatory)
# Dependency checking. # Dependency checking.
ZW_CREATE_DEPDIR ZW_CREATE_DEPDIR
# Create sub-directories for objects and dependencies.
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]) ZW_PROG_COMPILER_DEPENDENCIES([CC])
gnulib_extra_configure_args= gnulib_extra_configure_args=

View File

@ -194,7 +194,7 @@ i[34567]86-*-darwin*)
i386-darwin-tdep.o solib-darwin.o" i386-darwin-tdep.o solib-darwin.o"
if test "x$enable_64_bit_bfd" = "xyes"; then if test "x$enable_64_bit_bfd" = "xyes"; then
# Target: GNU/Linux x86-64 # 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 fi
;; ;;
i[34567]86-*-dicos*) i[34567]86-*-dicos*)
@ -225,7 +225,7 @@ i[34567]86-*-nto*)
;; ;;
i[34567]86-*-solaris2* | x86_64-*-solaris2*) i[34567]86-*-solaris2* | x86_64-*-solaris2*)
# Target: Solaris x86_64 # 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 \ amd64-sol2-tdep.o i386-sol2-tdep.o sol2-tdep.o \
solib-svr4.o" solib-svr4.o"
;; ;;
@ -237,7 +237,7 @@ i[34567]86-*-linux*)
linux-tdep.o linux-record.o" linux-tdep.o linux-record.o"
if test "x$enable_64_bit_bfd" = "xyes"; then if test "x$enable_64_bit_bfd" = "xyes"; then
# Target: GNU/Linux x86-64 # 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 fi
build_gdbserver=yes build_gdbserver=yes
;; ;;
@ -660,52 +660,52 @@ vax-*-*)
x86_64-*-darwin*) x86_64-*-darwin*)
# Target: Darwin/x86-64 # 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 \ i386-darwin-tdep.o amd64-darwin-tdep.o \
solib-darwin.o" solib-darwin.o"
;; ;;
x86_64-*-dicos*) x86_64-*-dicos*)
# Target: DICOS/x86-64 # 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" dicos-tdep.o i386-dicos-tdep.o amd64-dicos-tdep.o"
;; ;;
x86_64-*-elf*) 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*) x86_64-*-linux*)
# Target: GNU/Linux x86-64 # 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 \ i387-tdep.o i386.o i386-linux-tdep.o glibc-tdep.o \
solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o" solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
build_gdbserver=yes build_gdbserver=yes
;; ;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
# Target: FreeBSD/amd64 # 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 \ i386.o i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
fbsd-tdep.o solib-svr4.o" fbsd-tdep.o solib-svr4.o"
;; ;;
x86_64-*-mingw* | x86_64-*-cygwin*) x86_64-*-mingw* | x86_64-*-cygwin*)
# Target: MingW/amd64 # 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 \ i386-tdep.o i386.o i386-cygwin-tdep.o i387-tdep.o \
windows-tdep.o" windows-tdep.o"
build_gdbserver=yes build_gdbserver=yes
;; ;;
x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu) x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
# Target: NetBSD/amd64 # 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" i386.o i387-tdep.o nbsd-tdep.o solib-svr4.o"
;; ;;
x86_64-*-openbsd*) x86_64-*-openbsd*)
# Target: OpenBSD/amd64 # 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 \ i387-tdep.o i386-bsd-tdep.o i386-obsd-tdep.o \
i386.o obsd-tdep.o bsd-uthread.o solib-svr4.o" i386.o obsd-tdep.o bsd-uthread.o solib-svr4.o"
;; ;;
x86_64-*-rtems*) 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" i386-bsd-tdep.o"
;; ;;
xtensa*-*-linux*) gdb_target=linux xtensa*-*-linux*) gdb_target=linux