make in HPC environment fails with 'echo$ notfound'
Posted: Fri Nov 16, 2018 6:41 pm
Hi,
I am trying to build Yambo as part of QE 6.3. It works perfectly on an older HPC environment (CentOS 6.9, Intel compiler suite, OpenMPI 1.6). The make there is OS make 3.81.
However, on a newer HPC machine where we have some very recent userland from Nix (Make version 4.2.1) building Yambo fails for any compiler, be that Intel 16 or GCC 5.4.0.
I have seen already an answer on this forum, which appears to be related to the same problem : viewtopic.php?f=1&t=1396 . In fact, I believe this is one of our users, based on the paths there. Now the answer suggests forcing using Intel icc as the preprocessor. It doesn't explain why pure GCC build fails when there is no Intel in the paths.
The offending line seem to be the call to $(driver) function that has teh @echo at the end.
Then,
For some reason, the new make results in following expansion (from make -n in the driver directory):
See the DOLLAR? On CentOS6 it expands to the harmless and expected echo with no dollars.
I am at loss as to what to do about this issue. Could anyone please advise? Thank you very much in advance!
--
Grigory Shamov
WestGrid Site Lead / HPC Specialist
University of Manitoba
E2-588 EITC Building,
(204) 474-9625
I am trying to build Yambo as part of QE 6.3. It works perfectly on an older HPC environment (CentOS 6.9, Intel compiler suite, OpenMPI 1.6). The make there is OS make 3.81.
However, on a newer HPC machine where we have some very recent userland from Nix (Make version 4.2.1) building Yambo fails for any compiler, be that Intel 16 or GCC 5.4.0.
Code: Select all
>>>[Linking yambo]<<<
make[3]: Entering directory '/home/gshamov/devel/qe/qe-6.3/yambo-stable/driver'
/bin/sh: echo$: command not found
make[3]: *** [Makefile:85: yambo] Error 127
make[3]: Leaving directory '/home/gshamov/devel/qe/qe-6.3/yambo-stable/driver'
The offending line seem to be the call to $(driver) function that has teh @echo at the end.
Code: Select all
$(target): $(dep_file) $(objs)
$(driver)$
$(link)$
$(modmove)$
$(dircheck)$
@mv $@ $(exec_prefix)
Code: Select all
#
# Functions
#
define driver
@if test -f $(prefix)/driver/yambo.h; then $(cpp) $(cppflags) $(dopts) $(prefix)/driver/yambo.h > $(prefix)/driver/yambo_cpp.h; fi
@if test -f $(prefix)/driver/ypp.h; then $(cpp) $(cppflags) $(dopts) $(prefix)/driver/ypp.h > $(prefix)/driver/ypp_cpp.h; fi
@( eval $(cc) $(cflags) -c $(prefix)/driver/getopt.c > /dev/null)
@( eval $(cc) $(cflags) $(dopts) -D_$@ -c $(prefix)/driver/driver.c > /dev/null)
@rm -f $(prefix)/driver/yambo_cpp.h $(prefix)/driver/ypp_cpp.h
@echo
endef
Code: Select all
[gshamov@ driver]$[i] make -n[/i]
if test -f /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/yambo.h; then gcc -E -P -D_MPI -D_FFTW -D_SCALAPACK -D_TIMING -D_linux /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/yambo.h > /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/yambo_cpp.h; fi
if test -f /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/ypp.h; then gcc -E -P -D_MPI -D_FFTW -D_SCALAPACK -D_TIMING -D_linux /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/ypp.h > /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/ypp_cpp.h; fi
( eval mpicc -g -O2 -D_C_US -D_FORTRAN_US -c /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/getopt.c > /dev/null)
( eval mpicc -g -O2 -D_C_US -D_FORTRAN_US -D_MPI -D_FFTW -D_SCALAPACK -D_TIMING -D_linux -D_yambo -c /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/driver.c > /dev/null)
rm -f /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/yambo_cpp.h /home/gshamov/devel/qe/qe-6.3/YAMBO/driver/ypp_cpp.h
[b]echo$[/b]
I am at loss as to what to do about this issue. Could anyone please advise? Thank you very much in advance!
--
Grigory Shamov
WestGrid Site Lead / HPC Specialist
University of Manitoba
E2-588 EITC Building,
(204) 474-9625