From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by sourceware.org (Postfix) with ESMTPS id 31F573858C20 for ; Mon, 21 Feb 2022 20:51:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 31F573858C20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rtems.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lf1-f45.google.com with SMTP id u20so20820916lff.2 for ; Mon, 21 Feb 2022 12:51:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:reply-to :from:date:message-id:subject:to:cc; bh=FM4/dVgxNURQ3Kx8F/zx+JeY+xCRyVKEx1I39PzkGUk=; b=cP1emUakdmySOh8xM/6hCJqJRBpv5b0D7mKoiCor8d7K4yTBbhsX7ZQUfqtJ6svMpm No1IiBVoRTbWOmwzdK8fnUuTSa/rxy0+abz46Sff4Ts7E8bGHVLnRbnnjBJc+4R4UtGR 2jAw1epVYw5Ibbcn7+ZO4tZjkPWbz+zuEAzgq/7yZSdX8BynSoJX5a2MFxYiw46mBHX4 4VxPGZjnoM8Wb2SeeuTTZr7JnC97Pj1zJC9COpgENZDwqakcfaJUIp6mZ6dIRGxV1RNF rdGErsufyRIEI/4ixd8g8jQYOcRJa4jqubhvg4lPhaocZOtNUOuDfVwxK9vKjrpuXQZp T6Uw== X-Gm-Message-State: AOAM530SE2I+OX0ME1h1GKVX0J3HbwJc0MFRkxeqak0w+ASkqnB75Fd7 I0Xsv/IAeednKgSO0d/6LMTpNqrhC2xi1A== X-Google-Smtp-Source: ABdhPJwqnDw7HB/plO2sjOH/dKaOb/L2Dvfz0mPNEjuxc5MBDPyOsPyDFtlHzIUGZmtCZcs65im1Aw== X-Received: by 2002:a05:6512:4017:b0:443:b9ee:2a3d with SMTP id br23-20020a056512401700b00443b9ee2a3dmr12041168lfb.593.1645476678245; Mon, 21 Feb 2022 12:51:18 -0800 (PST) Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com. [209.85.208.177]) by smtp.gmail.com with ESMTPSA id m7sm1205307lfr.82.2022.02.21.12.51.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 21 Feb 2022 12:51:17 -0800 (PST) Received: by mail-lj1-f177.google.com with SMTP id r20so16410323ljj.1 for ; Mon, 21 Feb 2022 12:51:17 -0800 (PST) X-Received: by 2002:a2e:88d3:0:b0:244:c1ac:bc69 with SMTP id a19-20020a2e88d3000000b00244c1acbc69mr15659439ljk.326.1645476677149; Mon, 21 Feb 2022 12:51:17 -0800 (PST) MIME-Version: 1.0 References: <20220221204327.2945-1-vapier@gentoo.org> In-Reply-To: <20220221204327.2945-1-vapier@gentoo.org> Reply-To: joel@rtems.org From: Joel Sherrill Date: Mon, 21 Feb 2022 14:51:05 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] newlib: libm: workaround ar duplicate member behavior To: Mike Frysinger Cc: Newlib X-Spam-Status: No, score=-3037.6 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, HTML_MESSAGE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, 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 Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 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: Mon, 21 Feb 2022 20:51:23 -0000 Could this be de-duped with the gnu make sort command? That would avoid the copy. Alternatively, I see some awk one liners on the web to uniq the set. Or just invoke uniq. --joel On Mon, Feb 21, 2022, 2:43 PM Mike Frysinger wrote: > GNU ar has undocumented behavior where it doesn't dedupe its inputs if > they're all on the same command line, so we have to dedupe ourselves. > --- > newlib/Makefile.am | 16 ++++++++++++++++ > newlib/Makefile.in | 15 ++++++++++----- > 2 files changed, 26 insertions(+), 5 deletions(-) > > diff --git a/newlib/Makefile.am b/newlib/Makefile.am > index 80256952da3d..5bbe266cc4d5 100644 > --- a/newlib/Makefile.am > +++ b/newlib/Makefile.am > @@ -124,6 +124,22 @@ libm_a_CCASFLAGS = $(AM_CCASFLAGS) > $(libm_a_CCASFLAGS_$(subst /,_,$(@D))) $(libm > libm_a_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/libm/common > $(libm_a_CPPFLAGS_$(subst /,_,$(@D))) $(libm_a_CPPFLAGS_$(subst > /,_,$(@D)_$( $(libm_a_OBJECTS): stmp-targ-include > > +## GNU ar has undocumented behavior when specifying the same name > multiple times > +## in a single invocation, so we have to dedupe ourselves by copying > objects to > +## a temporary directory. We start with using ln to create fast > hardlinks. If > +## that fails, GNU cp has annoying behavior where you can't copy multiple > files > +## to the same target filename, so have to run cp for each input in a > loop. > +## https://sourceware.org/PR28917 > +libm.a: $(libm_a_OBJECTS) $(libm_a_DEPENDENCIES) > + $(AM_V_at)rm -rf $@ $@.tmp && mkdir $@.tmp > + $(AM_V_AR)if ! ln $(libm_a_OBJECTS) $@.tmp/ 2>/dev/null; then \ > + rm -f $@.tmp/*; \ > + for o in $(libm_a_OBJECTS); do cp $$o $@.tmp/ || exit $$?; > done; \ > + fi; \ > + $(AR) $(ARFLAGS) $@ $@.tmp/*.o > + $(AM_V_at)rm -rf $@.tmp > + $(AM_V_at)$(RANLIB) $@ > + > if HAVE_MULTISUBDIR > $(BUILD_MULTISUBDIR): > $(MKDIR_P) $@ > diff --git a/newlib/Makefile.in b/newlib/Makefile.in > index 2b60ef1ca96c..84f3e0cbde37 100644 > --- a/newlib/Makefile.in > +++ b/newlib/Makefile.in > @@ -3248,11 +3248,6 @@ libm/machine/x86_64/libm_a-fetestexcept.$(OBJEXT): > \ > libm/machine/x86_64/libm_a-feupdateenv.$(OBJEXT): \ > libm/machine/x86_64/$(am__dirstamp) > > -libm.a: $(libm_a_OBJECTS) $(libm_a_DEPENDENCIES) > $(EXTRA_libm_a_DEPENDENCIES) > - $(AM_V_at)-rm -f libm.a > - $(AM_V_AR)$(libm_a_AR) libm.a $(libm_a_OBJECTS) $(libm_a_LIBADD) > - $(AM_V_at)$(RANLIB) libm.a > - > mostlyclean-compile: > -rm -f *.$(OBJEXT) > -rm -f libm/common/*.$(OBJEXT) > @@ -8650,6 +8645,16 @@ libg.a: libc.a > $(AM_V_GEN)ln libc.a libg.a >/dev/null 2>/dev/null || cp libc.a > libg.a > $(libm_a_OBJECTS): stmp-targ-include > > +libm.a: $(libm_a_OBJECTS) $(libm_a_DEPENDENCIES) > + $(AM_V_at)rm -rf $@ $@.tmp && mkdir $@.tmp > + $(AM_V_AR)if ! ln $(libm_a_OBJECTS) $@.tmp/ 2>/dev/null; then \ > + rm -f $@.tmp/*; \ > + for o in $(libm_a_OBJECTS); do cp $$o $@.tmp/ || exit $$?; > done; \ > + fi; \ > + $(AR) $(ARFLAGS) $@ $@.tmp/*.o > + $(AM_V_at)rm -rf $@.tmp > + $(AM_V_at)$(RANLIB) $@ > + > @HAVE_MULTISUBDIR_TRUE@$(BUILD_MULTISUBDIR): > @HAVE_MULTISUBDIR_TRUE@ $(MKDIR_P) $@ > > -- > 2.34.1 > >