From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) by sourceware.org (Postfix) with ESMTP id E64C73858D28 for ; Sat, 26 Feb 2022 04:10:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E64C73858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gentoo.org Received: by smtp.gentoo.org (Postfix, from userid 559) id 8806C342DCF; Sat, 26 Feb 2022 04:10:51 +0000 (UTC) From: Mike Frysinger To: newlib@sourceware.org Subject: [PATCH] newlib: speed up targ-include setup & add error checking Date: Fri, 25 Feb 2022 23:10:50 -0500 Message-Id: <20220226041050.23067-1-vapier@gentoo.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220225002737.21507-1-vapier@gentoo.org> References: <20220225002737.21507-1-vapier@gentoo.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Feb 2022 04:10:54 -0000 The current targ-include setup runs `cp` and `basename` for 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 single directory. We still need the for loop to check for empty directories with no headers (i.e. the glob doesn't match anything). --- 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 b5060fc16109..c80b6d80dc04 100644 --- a/newlib/Makefile.am +++ b/newlib/Makefile.am @@ -207,77 +207,35 @@ targ-include/_newlib_version.h: _newlib_version.h 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 71db9e4d0aff..d49b30e768a5 100644 --- a/newlib/Makefile.in +++ b/newlib/Makefile.in @@ -3993,6 +3993,14 @@ libm_a_SOURCES = $(am__append_141) $(am__append_144) \ libm_a_CFLAGS = $(AM_CFLAGS) $(libm_a_CFLAGS_$(subst /,_,$(@D))) $(libm_a_CFLAGS_$(subst /,_,$(@D)_$(/dev/null && [ "`echo *.h`" != "*.h" ]); then cp $$srcdir/*.h $$dstdir/; fi + CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host MULTISRCTOP = MULTIBUILDTOP = @@ -23488,81 +23496,32 @@ targ-include/newlib.h: newlib.h targ-include targ-include/_newlib_version.h: _newlib_version.h targ-include $(AM_V_GEN)cp _newlib_version.h $@ - -# 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 $@ -- 2.34.1