[petsc-dev] Experimental GNU make build system

Satish Balay balay at mcs.anl.gov
Tue Jun 4 16:05:04 CDT 2013

On Tue, 4 Jun 2013, Jed Brown wrote:

> Satish Balay <balay at mcs.anl.gov> writes:
> > I can use cygpath directly from gmakefile to handle this.
> >
> >         @cygpath -w $^ > ar.args
> I don't understand how this works.  Doesn't it overflow the argument
> list just as surely as the other methods?  Wouldn't we need to write the
> arguments file incrementally if we're going to pass the file names on
> the command line?

As I understand it - 32k limit is for windows apps [using windows
compiler dlls?]. Cygwin binaries appear to handle long args properly.

[the previous issue we had was when using 'cmd1 && cmd1' or 'cmd1 |
cmd1' via make - which is now fixed in the updated cygwin dll]

The following updated thingy also works - but with a [false] warning
from win32fe. I must have seen this before and assumed '@file' didn't
work from win32fe

I guess I should look at fixing win32fe to handle '@file' properly



balay at msnehalem2 ~/petsc.clone
$ make -f gmakefile PETSC_ARCH=arch-cmplx -j 20 V=1
/home/balay/petsc.clone/bin/win32fe/win32fe lib -a /home/balay/petsc.clone/arch-cmplx/lib/libpetsc.lib @`cygpath -w /home/balay/petsc.clone/arch-cmplx/lib/libpetsc.lib.args`
Warning: win32fe: File Not Found: @C:\cygwin\home\balay\petsc.clone\arch-cmplx\lib\libpetsc.lib.args
kspams.o : warning LNK4221: no public symbols found; archive member will be inaccessible
/usr/bin/true /home/balay/petsc.clone/arch-cmplx/lib/libpetsc.lib

balay at msnehalem2 ~/petsc.clone
$ make test
Running test examples to verify correct installation
Using PETSC_DIR=/home/balay/petsc.clone and PETSC_ARCH=arch-cmplx
C/C++ example src/snes/examples/tutorials/ex19 run successfully with 1 MPI process
Fortran example src/snes/examples/tutorials/ex5f run successfully with 1 MPI process
Completed test examples

balay at msnehalem2 ~/petsc.clone
$ git diff gmakefile
diff --git a/gmakefile b/gmakefile
index bf9ce21..83a1a54 100644
--- a/gmakefile
+++ b/gmakefile
@@ -68,9 +68,11 @@ $(libpetsc_shared) : $(srcs.o) | $$(@D)/.DIR
 $(libpetsc_static) : obj := $(srcs.o)

 %.$(AR_LIB_SUFFIX) : $$(obj) | $$(@D)/.DIR
-       @$(RM) $@
-       $(call quiet,AR) $(AR_FLAGS) $@ $^
+       @$(RM) $@ $@.args
+       @cygpath -w $^ > $@.args
+       $(call quiet,AR) $(AR_FLAGS) $@ @`cygpath -w $@.args`
        $(call quiet,RANLIB) $@
+       @$(RM) $@.args

 # with-single-library=0
 libpkg = $(foreach pkg, $1, $(LIBDIR)/libpetsc$(pkg).so)

balay at msnehalem2 ~/petsc.clone

More information about the petsc-dev mailing list