public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
From: Michael Frysinger <vapier@sourceware.org>
To: newlib-cvs@sourceware.org
Subject: [newlib-cygwin] newlib: speed up targ-include setup & add error checking
Date: Tue,  1 Mar 2022 00:39:32 +0000 (GMT)	[thread overview]
Message-ID: <20220301003932.6D55B3858D20@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=a531ad97267fa483fa6a9e7543bac331bbf295b9

commit a531ad97267fa483fa6a9e7543bac331bbf295b9
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Sat Feb 19 00:54:20 2022 -0500

    newlib: speed up targ-include setup & add error checking
    
    The current targ-include setup runs `cp` every header file it installs,
    in serial.  This can be a little noticeable on systems, so cleanup the
    logic to rely on cp's ability to copy multiple files to a directory in
    a single call.
    
    We still need a check for empty directories with no headers (i.e. the
    glob doesn't match anything), so add a helper variable to contain that
    logic to reduce the boiler plate a little.

Diff:
---
 newlib/Makefile.am | 84 ++++++++++++------------------------------------
 newlib/Makefile.in | 93 +++++++++++++++---------------------------------------
 2 files changed, 47 insertions(+), 130 deletions(-)

diff --git a/newlib/Makefile.am b/newlib/Makefile.am
index 6ee0adf04..ba0a3822f 100644
--- a/newlib/Makefile.am
+++ b/newlib/Makefile.am
@@ -204,77 +204,35 @@ all-recursive: stmp-targ-include
 # The targ-include directory just holds the includes files for the
 # particular system and machine we have been configured for.  It is
 # used while building.
+TARG_INCLUDE_CP_DIR = \
+	; srcdir="$(srcdir)/libc/$$s"; dstdir="targ-include/$$d"; \
+	if (cd $$srcdir 2>/dev/null && [ "`echo *.h`" != "*.h" ]); then cp $$srcdir/*.h $$dstdir/; fi
 stmp-targ-include: config.status
 	$(AM_V_GEN)rm -rf targ-include stmp-targ-include
 	$(AM_V_at)$(MAKE) targ-include/sys \
 		targ-include/machine \
 		targ-include/bits
-	-$(AM_V_at)if [ -n "$(shared_machine_dir)" ]; then \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/machine/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/machine/; \
-	    done; \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/sys/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/sys/; \
-	    done; \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/include/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/; \
-	    done; \
+	$(AM_V_at)if [ -n "$(shared_machine_dir)" ]; then \
+	    s=machine/$(shared_machine_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    s=machine/$(shared_machine_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    s=machine/$(shared_machine_dir)/include d= $(TARG_INCLUDE_CP_DIR) || exit $$?; \
 	  fi
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/machine/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/sys/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/sys/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*; do \
+	$(AM_V_at)s=machine/$(machine_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=machine/$(machine_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=machine/$(machine_dir)/include d= $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/include d= $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*/; do \
 	    if [ -d $$i ]; then \
-		for j in $$i/*.h; do \
-		    if [ ! -d targ-include/`basename $$i` ]; then \
-		    	mkdir targ-include/`basename $$i`; \
-		    fi; \
-	      	    cp $$j targ-include/`basename $$i`/`basename $$j`; \
-		done \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/sys/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/sys/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/bits/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/bits/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
+		d=`basename $$i`; \
+		$(MKDIR_P) targ-include/$$d; \
+		s=sys/${sys_dir}/include/$$d $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    fi \
 	  done
+	$(AM_V_at)s=sys/$(sys_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/bits d=bits $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine/$(machine_dir) d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine/$(machine_dir)/include d=machine $(TARG_INCLUDE_CP_DIR)
 	$(AM_V_at)$(MAKE) targ-include/newlib.h
 	$(AM_V_at)touch $@
 
diff --git a/newlib/Makefile.in b/newlib/Makefile.in
index 6213d6328..e0deacb61 100644
--- a/newlib/Makefile.in
+++ b/newlib/Makefile.in
@@ -1420,6 +1420,14 @@ libm_a_SOURCES = $(am__append_6) $(am__append_9) $(libm_common_src) \
 libm_a_CFLAGS = $(AM_CFLAGS) $(libm_a_CFLAGS_$(subst /,_,$(@D))) $(libm_a_CFLAGS_$(subst /,_,$(@D)_$(<F)))
 libm_a_CCASFLAGS = $(AM_CCASFLAGS) $(libm_a_CCASFLAGS_$(subst /,_,$(@D))) $(libm_a_CCASFLAGS_$(subst /,_,$(@D)_$(<F)))
 libm_a_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/libm/common $(libm_a_CPPFLAGS_$(subst /,_,$(@D))) $(libm_a_CPPFLAGS_$(subst /,_,$(@D)_$(<F)))
+
+# The targ-include directory just holds the includes files for the
+# particular system and machine we have been configured for.  It is
+# used while building.
+TARG_INCLUDE_CP_DIR = \
+	; srcdir="$(srcdir)/libc/$$s"; dstdir="targ-include/$$d"; \
+	if (cd $$srcdir 2>/dev/null && [ "`echo *.h`" != "*.h" ]); then cp $$srcdir/*.h $$dstdir/; fi
+
 CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
 MULTISRCTOP = 
 MULTIBUILDTOP = 
@@ -8727,81 +8735,32 @@ targ-include/_newlib_version.h: _newlib_version.h targ-include
 	$(AM_V_GEN)cp _newlib_version.h $@
 
 all-recursive: stmp-targ-include
-
-# The targ-include directory just holds the includes files for the
-# particular system and machine we have been configured for.  It is
-# used while building.
 stmp-targ-include: config.status
 	$(AM_V_GEN)rm -rf targ-include stmp-targ-include
 	$(AM_V_at)$(MAKE) targ-include/sys \
 		targ-include/machine \
 		targ-include/bits
-	-$(AM_V_at)if [ -n "$(shared_machine_dir)" ]; then \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/machine/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/machine/; \
-	    done; \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/sys/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/sys/; \
-	    done; \
-	    for i in $(srcdir)/libc/machine/$(shared_machine_dir)/include/*.h; do \
-		[ -f $$i ] && cp $$i targ-include/; \
-	    done; \
+	$(AM_V_at)if [ -n "$(shared_machine_dir)" ]; then \
+	    s=machine/$(shared_machine_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    s=machine/$(shared_machine_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    s=machine/$(shared_machine_dir)/include d= $(TARG_INCLUDE_CP_DIR) || exit $$?; \
 	  fi
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/machine/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/sys/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/sys/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/machine/$(machine_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*; do \
+	$(AM_V_at)s=machine/$(machine_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=machine/$(machine_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=machine/$(machine_dir)/include d= $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/include d= $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*/; do \
 	    if [ -d $$i ]; then \
-		for j in $$i/*.h; do \
-		    if [ ! -d targ-include/`basename $$i` ]; then \
-		    	mkdir targ-include/`basename $$i`; \
-		    fi; \
-	      	    cp $$j targ-include/`basename $$i`/`basename $$j`; \
-		done \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/sys/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/sys/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/bits/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/bits/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
-	  done
-	-$(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/include/*.h; do \
-	    if [ -f $$i ]; then \
-	      cp $$i targ-include/machine/; \
-	    else true; fi ; \
+		d=`basename $$i`; \
+		$(MKDIR_P) targ-include/$$d; \
+		s=sys/${sys_dir}/include/$$d $(TARG_INCLUDE_CP_DIR) || exit $$?; \
+	    fi \
 	  done
+	$(AM_V_at)s=sys/$(sys_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/bits d=bits $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine/$(machine_dir) d=machine $(TARG_INCLUDE_CP_DIR)
+	$(AM_V_at)s=sys/$(sys_dir)/machine/$(machine_dir)/include d=machine $(TARG_INCLUDE_CP_DIR)
 	$(AM_V_at)$(MAKE) targ-include/newlib.h
 	$(AM_V_at)touch $@


                 reply	other threads:[~2022-03-01  0:39 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20220301003932.6D55B3858D20@sourceware.org \
    --to=vapier@sourceware.org \
    --cc=newlib-cvs@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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).