From patchwork Tue Oct 1 18:39:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maciej W. Rozycki" X-Patchwork-Id: 1170129 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-509997-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="uj4QqQQR"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="E71uggcm"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46jSkN2PFRz9s4Y for ; Wed, 2 Oct 2019 04:40:10 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:in-reply-to:message-id:references :mime-version:content-type; q=dns; s=default; b=u7G+FrJzY0dpRtQH Ej0vDJgU/3QSNOi/G/ZxC69YbkFOE3Vaeh1PH0b2KCvEwf6VaDcVmxA5f4OtKHjF z8c0Bx+Ool2gqK9aFB4Me9wl/GW48XqXv9jx7mW46akL3WSADKxUEpcjTyGsiIYH qtvpQCXDmcHJBa86jc8+AapbVS0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:in-reply-to:message-id:references :mime-version:content-type; s=default; bh=ipYYI+/L8ovCKDV8Jcbhb9 J9K+Y=; b=uj4QqQQRkwBYIolIEyl3zVaKHxxVQsOpAMUdcl/VZ6H8kRu3mrojFY aUFLx2dks8LEqe6a6dqM4OmA0vLb94yUAKpsOMaHn2qqSEK8PpfLTJWX/9/mdrFs o7QBgMZjfV4yTXLuttz4dxqpGscdvY3Toxjl0ZodvusooZJzXwPLk= Received: (qmail 35237 invoked by alias); 1 Oct 2019 18:40:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 35226 invoked by uid 89); 1 Oct 2019 18:40:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-8.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS autolearn=ham version=3.3.1 spammy=Wire, Entering X-HELO: esa3.hgst.iphmx.com Received: from esa3.hgst.iphmx.com (HELO esa3.hgst.iphmx.com) (216.71.153.141) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 01 Oct 2019 18:40:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1569955200; x=1601491200; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=nU3Z1bzMNnvCZtxNKT0VPna8ugHUSxD9gpgHBSXhwEY=; b=E71uggcm8DrEOagMqac3C+Uk3kC2NfsG8EqE1dNWjEUUWJ5aXAPqOP9z A1TimYcgEGsHZsiu08k6f26bCjVnsmkuuyyTcLpr6v2AKX/HoWjL1EesG +FeNq2q5JapIZzGf7oPoDtMpObalGeyAQ93OSHyfsvZ8e4jNJu/onW96L Jbs3JDltMPyj3GsBsJhsEhOKyU4IXzY6QWmBotah+Bqze6SGzuIoZwg1i rGgbA0tQl4VWpNGkySi53Rabz1vcqbPKmlL4Hw1Oh2Fuyntd43ob7ONJa cjZfcFfdTT6+Vp19SUIjvpbng0XRPRRtve0HUPmTQukxnyaO5v9h4WPIe g==; IronPort-SDR: j2Iu1xM39ARHg799pmOih6m6yJ6xw47b2TfIenUazbRyjjj724Vkj30ysWuEg0ai+ysGxNQc9C HLRdNErWWerqg/T8qSTEkZxMZ47GIk5Rtbh9EK5c1JYuEVWtxhNwjvQdDJ89nT9NyO2vo/2YVu MDaRJ19mbIOH7lhJmmsyxqz6xdcnSfB/KPgaj7Igxhm4K4uUKH9ppxvCUHUyzCbprz2t6Zt7TN GG69SKe6Z0f2shSNZVLaRPsLpGmZ8GeGQ61W4sPw2s4zFtAQ5UfA506McTCC51nreqqyqPR95x XmI= Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 02 Oct 2019 02:39:59 +0800 IronPort-SDR: pOeOto6r7gNLFMiJYzQFqDxZxf+S+nzEjGjjfM3EZZgVkB6xQzgg4jTRywxZFiVdZBfJkz/59P EZNpoHackpDrzroatD0JSXaxZfJu+MzCtUg1Q5IctkA4kvKq2dTv80DDKICYK02FqcMgPciLJ1 m0ez3zFnEsoiys7h2I2in7bxnbBj80MGOfWw5+tcHDX0NbcwxtJhN4D+Lrm/Ydl9KEGcSoSCk2 qydzMq0eQVlNNk3YCQNs4NUIw4V4uHrUoF3uj9AI+9KC7bCN6QrcEgs2rgg81+mRP/6T5Vn3KA fwRbobVOoiwAqmkUJA1k3iKT Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Oct 2019 11:36:10 -0700 IronPort-SDR: QZR4sTdxgC6n3OxAHM/8ind5kEkQv4xxTybKRNhsCa3qPOAFcXYXlcO7jjnvO3dtivjm9oil7s Kh1QFpycPNIAqHsONpnwAVeVqbFKV7FTR800B6kldhwFjD9bT6qJByt9dIULgr/Xr4l3XTqKiG 1SchG1XJx14c2zDvC1mD04n2nQYlkW49Nshos+R3RtuchA3kRA4E2EK8lnCfiMcQz9dIzr2/5p 8QL31UJNGKTMnwe6C8LZdYu+vy4WGmT4ggAdrKHWGeFTDLWf0Zch2Sv28wWBXjTangrtgaEp5R bOU= WDCIronportException: Internal Received: from unknown (HELO redsun52) ([10.149.66.28]) by uls-op-cesaip02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Oct 2019 11:39:58 -0700 Date: Tue, 1 Oct 2019 19:39:49 +0100 (BST) From: "Maciej W. Rozycki" To: Arnaud Charlet cc: gcc-patches@gcc.gnu.org Subject: [committed v3 1/2] libada: Remove racy duplicate gnatlib installation In-Reply-To: <20191001082435.GA29559@adacore.com> Message-ID: References: <20190926074255.GA12138@adacore.com> <20190927071552.GA5648@adacore.com> <20191001082435.GA29559@adacore.com> User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 For some reason, presumably historical, the `install-gnatlib' target for the default multilib is invoked twice, once via the `ada.install-common' target in `gcc/ada/gcc-interface/Make-lang.in' invoked from gcc/ and again via the `install-libada' target in libada/. Apart from doing the same twice this is actually harmful in sufficiently parallelized `make' invocation, as the removal of old files performed within the `install-gnatlib' recipe in the former case actually races with the installation of new files done in the latter case, causing the recipe to fail and abort, however non-fatally, having not completed the installation of all the built files needed for the newly-built compiler to work correctly. This can be observed with a native `x86_64-linux-gnu' bootstrap: make[4]: Entering directory '.../gcc/ada' rm -rf .../lib/gcc/x86_64-linux-gnu/10.0.0/adalib rm: cannot remove '.../lib/gcc/x86_64-linux-gnu/10.0.0/adalib': Directory not empty make[4]: *** [gcc-interface/Makefile:512: install-gnatlib] Error 1 make[4]: Leaving directory '.../gcc/ada' make[3]: *** [.../gcc/ada/gcc-interface/Make-lang.in:853: install-gnatlib] Error 2 make[2]: [.../gcc/ada/gcc-interface/Make-lang.in:829: ada.install-common] Error 2 (ignored) which then causes missing files to be reported when an attempt is made to use the newly-installed non-functional compiler to build a `riscv-linux-gnu' cross-compiler: (cd ada/bldtools/sinfo; gnatmake -q xsinfo ; ./xsinfo sinfo.h ) error: "ada.ali" not found, "ada.ads" must be compiled error: "s-memory.ali" not found, "s-memory.adb" must be compiled gnatmake: *** bind failed. /bin/sh: ./xsinfo: No such file or directory make[2]: *** [.../gcc/ada/Make-generated.in:45: ada/sinfo.h] Error 127 make[2]: Leaving directory '.../gcc' make[1]: *** [Makefile:4369: all-gcc] Error 2 make[1]: Leaving directory '...' make: *** [Makefile:965: all] Error 2 Depending on timing `.../lib/gcc/x86_64-linux-gnu/10.0.0/adainclude' may cause an installation failure instead and the resulting compiler may be non-functional in a different way. Only invoke `install-gnatlib' from within gcc/ then if a legacy build process is being used with libada disabled and gnatlib built manually with `make -C gcc gnatlib'. gcc/ * Makefile.in (gnat_install_lib): New variable. * configure.ac: Substitute it. * configure: Regenerate. gcc/ada/ * gcc-interface/Make-lang.in (ada.install-common): Split into... (gnat-install-tools, gnat-install-lib): ... these. --- On Tue, 1 Oct 2019, Arnaud Charlet wrote: > > I have verified this change by running my combined build process where a > > native `x86_64-linux-gnu' configuration is built first and then used to > > build a `riscv64-linux-gnu' cross-compiler, both with `--disable-libada' > > specified, without and with this patch applied. I have added `make -C gcc > > gnatlib && make -C gcc gnattools' as an extra build step before `make > > install'. > > > > This has run up to failing to find `riscv64-linux-gnu' system headers in > > `make -C gcc gnatlib' as noted above, at which point the installation > > trees had both the same contents, including `x86_64-linux-gnu' gnatlib > > development files and static libraries as well as gnattools in particular. > > Can you also please do a native build with --disable-libada and > make -C gcc gnatlib && make -C gcc gnattools && make install > ? I had actually done that already, as described in the first paragraph quoted above. > Once successful, the change is OK, thanks for the extra work. Here's the final version I have committed then, with the small adjustment mentioned earlier on and having brought the formatting of the commit description broken in v2 back to order. Thank you for your review. Maciej Changes from v1: - gnatlib installation now retained in gcc/ada/gcc-interface/Make-lang.in and instead invoked iff `--disable-libada' has been requested at the top level. Changes from v2: - use an ordering dependency only between `gnat-install-lib' and `gnat-install-tools'. --- gcc/Makefile.in | 4 ++++ gcc/ada/gcc-interface/Make-lang.in | 5 ++++- gcc/configure | 15 +++++++++++++-- gcc/configure.ac | 10 ++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) gcc-lang-no-install-gnatlib.diff Index: gcc/gcc/Makefile.in =================================================================== --- gcc.orig/gcc/Makefile.in +++ gcc/gcc/Makefile.in @@ -1706,6 +1706,10 @@ $(FULL_DRIVER_NAME): ./xgcc # language hooks, generated by configure @language_hooks@ +# Wire in install-gnatlib invocation with `make install' for a configuration +# with top-level libada disabled. +gnat_install_lib = @gnat_install_lib@ + # per-language makefile fragments ifneq ($(LANG_MAKEFRAGS),) include $(LANG_MAKEFRAGS) Index: gcc/gcc/ada/gcc-interface/Make-lang.in =================================================================== --- gcc.orig/gcc/ada/gcc-interface/Make-lang.in +++ gcc/gcc/ada/gcc-interface/Make-lang.in @@ -822,7 +822,9 @@ doc/gnat-style.pdf: ada/gnat-style.texi # gnatlink, gnatls, gnatmake, gnatname, gnatprep, gnatxref, gnatfind, # gnatclean). # gnatdll is only used on Windows. -ada.install-common: +ada.install-common: $(gnat_install_lib) gnat-install-tools + +gnat-install-tools: $(MKDIR) $(DESTDIR)$(bindir) -if [ -f gnat1$(exeext) ] ; \ then \ @@ -843,6 +845,7 @@ doc/gnat-style.pdf: ada/gnat-style.texi # # Finally, install the library # +gnat-install-lib: | gnat-install-tools -if [ -f gnat1$(exeext) ] ; \ then \ $(MAKE) $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib; \ Index: gcc/gcc/configure =================================================================== --- gcc.orig/gcc/configure +++ gcc/gcc/configure @@ -814,6 +814,7 @@ SET_MAKE accel_dir_suffix real_target_noncanonical enable_as_accelerator +gnat_install_lib REPORT_BUGS_TEXI REPORT_BUGS_TO PKGVERSION @@ -7826,6 +7827,16 @@ else fi +# If top-level libada has been disabled, then wire in install-gnatlib +# invocation with `make install', so that one can build and install +# the library manually with `make -C gcc all gnatlib gnattools install'. +if test x"$enable_libada" = xno; then + gnat_install_lib=gnat-install-lib +else + gnat_install_lib= +fi + + if test x"$enable_as_accelerator_for" != x; then $as_echo "#define ACCEL_COMPILER 1" >>confdefs.h @@ -18819,7 +18830,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18822 "configure" +#line 18833 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18925,7 +18936,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18928 "configure" +#line 18939 "configure" #include "confdefs.h" #if HAVE_DLFCN_H Index: gcc/gcc/configure.ac =================================================================== --- gcc.orig/gcc/configure.ac +++ gcc/gcc/configure.ac @@ -982,6 +982,16 @@ AC_ARG_ENABLE(languages, esac], [enable_languages=c]) +# If top-level libada has been disabled, then wire in install-gnatlib +# invocation with `make install', so that one can build and install +# the library manually with `make -C gcc all gnatlib gnattools install'. +if test x"$enable_libada" = xno; then + gnat_install_lib=gnat-install-lib +else + gnat_install_lib= +fi +AC_SUBST(gnat_install_lib) + if test x"$enable_as_accelerator_for" != x; then AC_DEFINE(ACCEL_COMPILER, 1, [Define if this compiler should be built as the offload target compiler.])