[Smeagol-discuss] Compiling smeagol on Mac OS X
Lianheng Tong
ucaplto at ucl.ac.uk
Thu Jan 15 16:24:08 GMT 2009
Hi All,
I just succeeded in compiling smeagol-1.0b with siesta-1.3p on a Mac
workstation with intel due-core processors using gfortran .
I wish to share some experiences with you guys, if you want to
compile smeagol on a Mac too.
The mac I am using had XTools installed on it. But its gcc package
did not include gfortran, so I downloaded a separate gfortran from
the web.
Setting up the makefiles is in general quite straight forward, not
much different from the way you set it up on a linux machine. But
there are some Mac specific settings and some gfortran specific
settings one need to watch out:
in arch.make file, I set the flags:
SIESTA_ARCH=darwin
FC=/usr/local/bin/gfortran # this is where my gfortran is installed
FFLAGS= -ffixed-line-length-none -O3
FFLAGS_DEBUG = -ffixed-line-length-none -g -O0
LDFLAGS= -ffixed-line-length-none -O3
TRANSPORTFLAGS= -ffixed-line-length-none -O3
The important flag here is the "-ffixed-line-length-none", it is is
essential for gfortran. gfortran seems to have trouble distinguishing
the FORTRAN standards and it automatically assumes column cut-off at
column number 72. This causes many syntax errors. This flag forces
gfortran to regard the entire line as part of the code. I have not
seen a piece of code in siesta or smeagol that comments in the same
line as the code, so it should be okay.
-O3 is level 3 optimisation
LIBS= -framework vecLib
This is mac specific. XTools comes with optimised BLAS and LAPACK
libraries, included in the vecLib framework. Thus to link to the
libraries you need to use the above flag. gfortran recognises the -
framework option. In case your compiler does not recognise this, you
can use:
-Wl,-framework -Wl,vecLib
instead. Note there is NO SPACE behind ".".
The rest of arch.make file are pretty standard, I am only compiling
it in serial, so left all MPI related flags empty.
Now let us move on to the Makefile, I DID HAVE to modify it a little
to make it work.
I am using the linpack provided in the smeagol package, so in theory
I don't have to modify anything. However just as I did, you will get
the error messages:
(cd ../linpack; /usr/local/bin/gfortran -ffixed-line-length-none -O3
*.f; \
ar -rv linpack.smeagol.a *.o; \
mv linpack.smeagol.a /Users/ltong/work/src/smeagol.1.0b/Src)
/usr/bin/ld: Undefined symbols:
_zaxpy_
_zscal_
_zswap_
_izamax_
_MAIN__
collect2: ld returned 1 exit status
ar: creating archive linpack.smeagol.a
a - *.o
ar: *.o: No such file or directory
and then later on as the linpack library is empty the compilation fails:
/usr/bin/ld: warning empty archive: linpack.smeagol.a (can't load
from it)
/usr/bin/ld: Undefined symbols:
_zgedi_
_zgefa_
collect2: ld returned 1 exit status
make: *** [siesta] Error 1
The reason for the failure is because while making the linpack
subroutines, the compiler could not find the BLAS libraries. This may
be a gfortran issue, so changing the line:
(cd ../linpack; $(FC) $(TRANSPORTFLAGS) *.f; \
to
(cd ../linpack; $(FC) $(TRANSPORTFLAGS) *.f -framework vecLib; \
Eliminates all the undefined symbols errors except the symbol "_MAIN__"
The reason for the _MAIN__ error may be due to the fact that the
compiler is trying to compile the subroutines as a self-contained
program. So adding a "-c" flag solves the problem:
(cd ../linpack; $(FC) -c $(TRANSPORTFLAGS) *.f -framework vecLib; \
Also if you man ar on a Mac, you will realise that -r option does not
have a v sub-option. So I changed the next line to:
ar -r linpack.smeagol.a *.o; \
This is the Makefile done.
Before you compile, make sure also that you replace the negf2k.F and
emt2k.F files with the fixed versions. These can be found on the
mailing list.
If you follow the above steps smeagol should compile.
However, I am still getting the warning messages:
pdosg.F:221.22:
goto 170
1
pdosg.F:234.15:
170 enddo
2
Warning: Deleted feature: GOTO at (1) jumps to END of construct at (2)
/usr/local/bin/gfortran -c -ffixed-line-length-none -O3 pdosk.F
pdosk.F:257.24:
GOTO 170
1
pdosk.F:275.17:
170 ENDDO
2
Warning: Deleted feature: GOTO at (1) jumps to END of construct at (2)
This looks like a gfortran issue, and I don't know the solution. The
language standard on gfortran is default to be "gnu", and it is the
most forgiving standard allowed for the compiler.
I did a test run, and smeagol seems to be running fine. Although I
am still worried about the warning messages, I have yet to encounter
a problem.
That is it. If anyone has the idea on how to solve the above
problem, please let me know! Thanks a lot.
Best regards,
Lianheng
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.tchpc.tcd.ie/pipermail/smeagol-discuss/attachments/20090115/2c71b7ae/attachment.html
More information about the Smeagol-discuss
mailing list