[RFC] Replicate src dir in build dir
authorYao Qi <yao.qi@linaro.org>
Fri, 6 Oct 2017 10:13:30 +0000 (11:13 +0100)
committerYao Qi <yao.qi@linaro.org>
Fri, 6 Oct 2017 10:13:30 +0000 (11:13 +0100)
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.

gdb/ChangeLog
gdb/Makefile.in
gdb/configure
gdb/configure.ac
gdb/configure.tgt

index 966472c45e7c6c6b17eb18e7c9dd3dd2f6f5c28d..93389b2d9a02d4f93f9927ba0ed241a2672ee2b3 100644 (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>
 
        PR build/22188
index 9454e3a62fc8d93a2a8b2cb1ee3def4a99f8cc62..b831ab687b4d522fcf78af2d8c84ef3a87ee2d7a 100644 (file)
@@ -634,6 +634,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.
@@ -768,7 +769,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 \
@@ -778,6 +778,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 \
@@ -2304,6 +2305,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
@@ -2322,6 +2327,9 @@ distclean: clean
        rm -f config.log config.cache
        rm -f Makefile
        rm -rf $(DEPDIR)
+       for i in $(CONFIG_SRC_SUBDIR); do \
+               rmdir $$i/$(DEPDIR); \
+       done
 
 maintainer-clean: local-maintainer-clean do-maintainer-clean distclean
 realclean: maintainer-clean
@@ -2948,9 +2956,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)
index 303c7ba7ab4e63a4fa0d9069a4269028e63520b3..4d473cc934cd3b4e72509ae5114fb0cd1112ce2d 100755 (executable)
@@ -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
@@ -18006,6 +18014,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
 
@@ -18017,6 +18026,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" ;;
@@ -18640,6 +18650,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
index 9dc4c77360ee2116744fc035f92fa8d504ee5036..4d8d6c7e7676bbc47c128480dddeec6e6b4fc441 100644 (file)
@@ -44,6 +44,17 @@ AX_CXX_COMPILE_STDCXX(11, , mandatory)
 
 # Dependency checking.
 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])
 
 gnulib_extra_configure_args=
index 122a72608fbb9125edb54f141db76884ff403db1..40c44b7658cea183cc715ea9adfbe5178512264c 100644 (file)
@@ -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* | x86_64-*-solaris2*)
        # 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"
        ;;
@@ -237,7 +237,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
        ;;
@@ -660,52 +660,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