New install command fails with external GASNET

Issue #51 resolved
Dan Bonachea created an issue

The new install command does not work correctly with external GASNET=/path/to/gasnet

If the external GASNet is an install tree, it drops dead right away:

{pcp-d-5 ~/UPC/upcxx} rm -Rf .nobs/ ; env GASNET=/home/pcp1/bonachea/UPC/inst-ex-debug DBGSYM=1 OPTLEV=0 ./install test3                                           
UPCXX revision: a0d6e07
System: Linux pcp-d-5 3.10.0-693.1.1.el7.x86_64 #1 SMP Tue Aug 15 08:36:44 CDT 2017 x86_64 x86_64 x86_64 GNU/Linux
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: Scientific
Description:    Scientific Linux release 7.3 (Nitrogen)
Release:        7.3
Codename:       Nitrogen

Date: Fri Sep 22 14:00:30 PDT 2017
Current directory: /home/pcp1/bonachea/UPC/upcxx
Install directory:
Settings: GASNET='/home/pcp1/bonachea/UPC/inst-ex-debug' OPTLEV='0' DBGSYM='1'

/usr/local/pkg/gcc/7.2.0/bin/g++
g++ (GCC) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

/usr/local/pkg/gcc/7.2.0/bin/gcc
gcc (GCC) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Configuring GASNet...
(in /home/pcp1/bonachea/UPC/upcxx/.nobs/art/d284e6d5e76b0a1d331ad1a66739b933cbd9d35f)
/home/pcp1/bonachea/UPC/inst-ex-debug/configure --enable-debug --disable-psm --disable-mxm --disable-portals4 --disable-ofi --disable-dev-warnings

Building GASNet...
(in /home/pcp1/bonachea/UPC/upcxx/.nobs/art/d284e6d5e76b0a1d331ad1a66739b933cbd9d35f)
make

*** Something FAILED! ***
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make

make: *** No targets specified and no makefile found.  Stop.
UPC++ Installation failed. Please report the entire log above to: upcxx@googlegroups.com

If the external GASNet is a build tree, then things are more subtly broken.

An external GASNet by definition is either debug or opt, and the installer currently incorrectly assumes it is both, which is always incorrect.

If the external GASNet was configured for debug, the nobs installer eventually drops dead while trying to build the optimized UPC++ libraries against a debug GASNet:

g++ -std=c++11 -D_GNU_SOURCE=1 -I/home/pcp1/bonachea/UPC/upcxx/.nobs/art/0a7ba1ef0158d03f0d7127ade4a98b19e09f7572 -DUPCXX_BACKEND=gasnet1_seq -D_GNU_SOURCE=1 -DGASNET_SEQ -I/home/pcp1/bonachea/UPC/upcxx/poop/gasnet.opt/include -I/home/pcp1/bonachea/UPC/upcxx/poop/gasnet.opt/include/smp-conduit -O3 -Wall -g3 -Wall -Wpointer-arith -Wwrite-strings -Wmissing-format-attribute -Wno-unused -Wno-unused-parameter -Wno-address -c /home/pcp1/bonachea/UPC/upcxx/src/backend/gasnet/handle_cb.cpp -o /home/pcp1/bonachea/UPC/upcxx/.nobs/art/93101a2292dc093b1c81adf2eb79626afc4c1d6d.handle_cb.cpp.o

In file included from /home/pcp1/bonachea/UPC/upcxx/poop/gasnet.opt/include/gasnet.h:11:0,
                 from /home/pcp1/bonachea/UPC/upcxx/src/backend/gasnet/handle_cb.cpp:3:
/home/pcp1/bonachea/UPC/upcxx/poop/gasnet.opt/include/gasnetex.h:771:6: error: #error Tried to compile GASNet client code with optimization enabled but also GASNET_DEBUG (which seriously hurts performance). Reconfigure/rebuild GASNet without --enable-debug
     #error Tried to compile GASNet client code with optimization enabled but also GASNET_DEBUG (which seriously hurts performance). Reconfigure/rebuild GASNet without --enable-debug
      ^~~~~

If the external GASNet build tree was configured for opt, the same GASNet gets installed twice, in directories called "gasnet.opt" and "gasnet.debug", where the second is pretty misleading. This setup is not necessarily harmful (as it should be safe to build a debug UPC++ against an optimized GASNet), but it's definitely surprising.

I'm not sure what the right behavior should be here for the new installer. Perhaps the solution is simply to prohibit external GASNet for the new "full" installer (in which case we need to document that restriction and update the script to enforce it instead of doing brain-dead things). It also means we probably need to continue supporting the --single installer for use with external GASNet if we think that's important (which I think it is, if that's the only way for a user to build against a modified/patched GASNet).

Comments (4)

  1. Former user Account Deleted

    External gasnet is ok for full install so long as GASNET points to a url, tarball, or source tree (I have confirmed that source tree works on my laptop). Anything that has already passed through configure (build and install trees) cannot be reasonably supported. So I think all that's needed is more aggressive checking.

  2. Dan Bonachea reporter

    I think all that's needed is more aggressive checking.

    Seems reasonable.

    Anything that has already passed through configure (build and install trees) cannot be reasonably supported.

    Based on this, I think our nightly CI will probably continue to use install --single and an external GASNET build tree for automated testing, because it already has a full configure and build of EX, so a adding two additional configure and builds of EX just wastes test cycles (and reduces the number of platforms we can test in one night). So please plan to continue supporting install --single with external GASNET build tree for at least that purpose.

  3. Log in to comment