[GRASS-dev] A couple problems compiling with icc

Hi,

I managed to compile GRASS with Intel's icc and icpc compilers v12.1.3
on Debian/stable 64bit, mostly to test out the auto-parallelization to
see what would be good candidates for OpenMP work. it wasn't too ugly:

CC=icc CXX=icpc CFLAGS="-O2 -xHost -ipo -static-intel -parallel -Wall" \
  ./configure \
    --with-tcltk-includes=/usr/include/tcl8.5 --with-cairo \
    --with-motif --with-python=/usr/bin/python2.6-config \
    --with-readline --with-cxx --with-odbc --with-sqlite \
    --with-freetype --with-freetype-includes=/usr/include/freetype2 \
    --without-postgres --with-proj-share=/usr/share/proj \
    --enable-64bit --with-pthread -with-openmp \
    --with-wxwidgets=/usr/lib/wx/config/gtk2-unicode-release-2.8 \
    --with-geos \
    --with-libs="/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64 /opt/intel/mkl/lib/intel64" \
    2>&1 | tee config_log.txt

I had to manually add "-liomp5" to LINK_FLAGS in Platform.make, not sure
how to do that with ./configure and doubt that LINK_FLAGS is the correct
place to it.

export LD_LIBRARY_PATH=/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64
# not sure if necessary, but can't hurt..

LD=xild time make -j 8
# how to set alternate 'ld' from ./configure?

it all went ok but for 3 errors:
--
Errors in:
/home/hbowman/dev/grass/src/icc/grass-6.4.2/general/manage/cmd
/home/hbowman/dev/grass/src/icc/grass-6.4.2/imagery/i.smap/shapiro
/home/hbowman/dev/grass/src/icc/grass-6.4.2/vector/v.univar
--

I fixed manage/cmd in devbr6, it was looking for list.h but the file
was actually one directory higher.

i.smap/shapiro in devbr6 I did not fix, it too was looking for a header
which was in ../bouman/bouman.h. I tried adding to shapiro/Makefile:
  LOCAL_HEADERS = ../bouman/bouman.h
but it doesn't help, nor does setting the path on the #include line.
Does the object need to be linked as well? (??)

Finally, and also 6.x only(?), with v.univar it did not like to set a
global variable to nan as part of the variable definition:
...
double max = 0.0 / 0.0;
...
main.c(56): error: floating-point operation result is out of range

but in other places in the code where 0./0. is used to create a nan it
does not complain. (hence I wonder if the global variableness of it is
what makes it special)

?

thanks,
Hamish

Hamish wrote:

it all went ok but for 3 errors:
--
Errors in:
/home/hbowman/dev/grass/src/icc/grass-6.4.2/general/manage/cmd
/home/hbowman/dev/grass/src/icc/grass-6.4.2/imagery/i.smap/shapiro

swapping out 'ar' for Intel's version fixed those two:

include/Make/Platform.make
-AR = ar
+AR = xiar

still the v.univar 0./0. error remains though.

Hamish