From patchwork Tue Sep 19 14:42:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 22953 Received: (qmail 35892 invoked by alias); 19 Sep 2017 14:42:50 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 35804 invoked by uid 89); 19 Sep 2017 14:42:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-spam-relays-external:209.85.128.195, H*RU:209.85.128.195, mv X-HELO: mail-wr0-f195.google.com Received: from mail-wr0-f195.google.com (HELO mail-wr0-f195.google.com) (209.85.128.195) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 19 Sep 2017 14:42:45 +0000 Received: by mail-wr0-f195.google.com with SMTP id p37so2357404wrb.5 for ; Tue, 19 Sep 2017 07:42:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=xFMOHhtIz1Xpo6PVQhlwxXWsBMKWInZX+7y+SJd2QlQ=; b=AdDlD4xv6NSxs0HtyJ1VEVHE5wyv1YG6krvPJ2LW2xekaLltvkuQaAbH4ChvPV4WNG +ZXuTkK1qviWRvj1VM/ROwDS7Ul22OqzmmyYiEVnDCOgPi2jN2Yo8/Y8GijZ8zQz4Zho CVHlXSdEUSxO6C9y9AN97mhJDDeXsP7GoKxiZW/2BdUecSrpMYDBYyEv64iCCevYHgfi YGGoMbIZRGX2M4KHQmFuYBe62ncH/9iDF6p5x6i6aI062lsPPb1KlCN1Pb2p0mDHFVmS p3q5CDgZ9iv//0s1C+90QoGrIrh568JKo908pWbVkTmSxlZ+ZhB/N4eh9MKK+7Jn0bKa KoBw== X-Gm-Message-State: AHPjjUg6iwcapTK6qzr9m0+xPBD8enqg91XhnYRGJv2lR2eSu5+8J2Nj P1IeLZlGy9G/A+QWypm3byfiZw== X-Google-Smtp-Source: AOwi7QATquTpbLVfipNQZizLQr03Gkw3He9+7gzzebHXMCS8c2icY6fXhhatVp3MidMnM3B9SpskRw== X-Received: by 10.223.164.74 with SMTP id e10mr1736012wra.19.1505832163372; Tue, 19 Sep 2017 07:42:43 -0700 (PDT) Received: from E107787-LIN.cambridge.arm.com (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id h201sm1608890wmd.27.2017.09.19.07.42.42 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 19 Sep 2017 07:42:42 -0700 (PDT) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [RFC] Replicate src dir in build dir Date: Tue, 19 Sep 2017 15:42:39 +0100 Message-Id: <1505832159-23038-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes 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 * 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