I've compiled GeographicLib-1.49 with Intel compilers, which mostly works. Here are the steps and output, using cmake version 3.9.1:
$ mkdir INTEL
$ cd INTEL
$ cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc ..
-- The C compiler identification is Intel 17.0.1.20161005
-- The CXX compiler identification is Intel 17.0.1.20161005
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check size of long double
-- Check size of long double - done
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Performing Test FLOAT_CONVERSION
-- Performing Test FLOAT_CONVERSION - Failed
-- Performing Test CXX11TEST14
-- Performing Test CXX11TEST14 - Success
-- Performing Test CXX11_MATH
-- Performing Test CXX11_MATH - Success
-- Performing Test CXX11_STATIC_ASSERT
-- Performing Test CXX11_STATIC_ASSERT - Success
CMake Warning (dev) at /path/to/CMake/3.9.1/share/cmake-3.9/Modules/FindOpenMP.cmake:200 (if):
Policy CMP0054 is not set: Only interpret if() arguments as variables or
keywords when unquoted. Run "cmake --help-policy CMP0054"for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
Quoted variables like "c" will no longer be dereferenced when the policy is
set to NEW. Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
/path/to/CMake/3.9.1/share/cmake-3.9/Modules/FindOpenMP.cmake:324 (_OPENMP_GET_FLAGS)
examples/CMakeLists.txt:36 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/GeographicLib-1.49/INTEL
I'm not sure if the CMake warnings are important, or not...
$ make
Scanning dependencies of target GeographicLib
[0%] Building CXX object src/CMakeFiles/GeographicLib.dir/Accumulator.cpp.o
[1%] Building CXX object src/CMakeFiles/GeographicLib.dir/AlbersEqualArea.cpp.o
[1%] Building CXX object src/CMakeFiles/GeographicLib.dir/AzimuthalEquidistant.cpp.o
[3%] Building CXX object src/CMakeFiles/GeographicLib.dir/CassiniSoldner.cpp.o
[3%] Building CXX object src/CMakeFiles/GeographicLib.dir/CircularEngine.cpp.o
[5%] Building CXX object src/CMakeFiles/GeographicLib.dir/DMS.cpp.o
[5%] Building CXX object src/CMakeFiles/GeographicLib.dir/Ellipsoid.cpp.o
[7%] Building CXX object src/CMakeFiles/GeographicLib.dir/EllipticFunction.cpp.o
[7%] Building CXX object src/CMakeFiles/GeographicLib.dir/GARS.cpp.o
[9%] Building CXX object src/CMakeFiles/GeographicLib.dir/GeoCoords.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[9%] Building CXX object src/CMakeFiles/GeographicLib.dir/Geocentric.cpp.o
[11%] Building CXX object src/CMakeFiles/GeographicLib.dir/Geodesic.cpp.o
[11%] Building CXX object src/CMakeFiles/GeographicLib.dir/GeodesicExact.cpp.o
[13%] Building CXX object src/CMakeFiles/GeographicLib.dir/GeodesicExactC4.cpp.o
[13%] Building CXX object src/CMakeFiles/GeographicLib.dir/GeodesicLine.cpp.o
[15%] Building CXX object src/CMakeFiles/GeographicLib.dir/GeodesicLineExact.cpp.o
[15%] Building CXX object src/CMakeFiles/GeographicLib.dir/Geohash.cpp.o
[17%] Building CXX object src/CMakeFiles/GeographicLib.dir/Geoid.cpp.o
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[17%] Building CXX object src/CMakeFiles/GeographicLib.dir/Georef.cpp.o
[19%] Building CXX object src/CMakeFiles/GeographicLib.dir/Gnomonic.cpp.o
[19%] Building CXX object src/CMakeFiles/GeographicLib.dir/GravityCircle.cpp.o
[21%] Building CXX object src/CMakeFiles/GeographicLib.dir/GravityModel.cpp.o
[21%] Building CXX object src/CMakeFiles/GeographicLib.dir/LambertConformalConic.cpp.o
[23%] Building CXX object src/CMakeFiles/GeographicLib.dir/LocalCartesian.cpp.o
[23%] Building CXX object src/CMakeFiles/GeographicLib.dir/MGRS.cpp.o
[25%] Building CXX object src/CMakeFiles/GeographicLib.dir/MagneticCircle.cpp.o
[25%] Building CXX object src/CMakeFiles/GeographicLib.dir/MagneticModel.cpp.o
[27%] Building CXX object src/CMakeFiles/GeographicLib.dir/Math.cpp.o
[27%] Building CXX object src/CMakeFiles/GeographicLib.dir/NormalGravity.cpp.o
[29%] Building CXX object src/CMakeFiles/GeographicLib.dir/OSGB.cpp.o
[29%] Building CXX object src/CMakeFiles/GeographicLib.dir/PolarStereographic.cpp.o
[31%] Building CXX object src/CMakeFiles/GeographicLib.dir/PolygonArea.cpp.o
[31%] Building CXX object src/CMakeFiles/GeographicLib.dir/Rhumb.cpp.o
[33%] Building CXX object src/CMakeFiles/GeographicLib.dir/SphericalEngine.cpp.o
[33%] Building CXX object src/CMakeFiles/GeographicLib.dir/TransverseMercator.cpp.o
[35%] Building CXX object src/CMakeFiles/GeographicLib.dir/TransverseMercatorExact.cpp.o
[35%] Building CXX object src/CMakeFiles/GeographicLib.dir/UTMUPS.cpp.o
[37%] Building CXX object src/CMakeFiles/GeographicLib.dir/Utility.cpp.o
[37%] Linking CXX shared library libGeographic.so
[37%] Built target GeographicLib
Scanning dependencies of target usage
[39%] Building usage code for TransverseMercatorProj
[39%] Building usage code for CartConvert
[41%] Building usage code for ConicProj
[41%] Building usage code for GeodesicProj
[43%] Building usage code for GeoConvert
[43%] Building usage code for GeodSolve
[45%] Building usage code for GeoidEval
[45%] Building usage code for Gravity
[47%] Building usage code for MagneticField
[47%] Building usage code for Planimeter
[49%] Building usage code for RhumbSolve
[50%] Converting the man pages to online usage
[50%] Built target usage
Scanning dependencies of target ConicProj
[50%] Building CXX object tools/CMakeFiles/ConicProj.dir/ConicProj.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[52%] Linking CXX executable ConicProj
[52%] Built target ConicProj
Scanning dependencies of target MagneticField
[54%] Building CXX object tools/CMakeFiles/MagneticField.dir/MagneticField.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[54%] Linking CXX executable MagneticField
[54%] Built target MagneticField
Scanning dependencies of target scripts
[54%] Generating geographiclib-get-geoids
[56%] Generating geographiclib-get-gravity
[56%] Generating geographiclib-get-magnetic
[56%] Built target scripts
Scanning dependencies of target GeoConvert
[56%] Building CXX object tools/CMakeFiles/GeoConvert.dir/GeoConvert.cpp.o
[58%] Linking CXX executable GeoConvert
[58%] Built target GeoConvert
Scanning dependencies of target Gravity
[60%] Building CXX object tools/CMakeFiles/Gravity.dir/Gravity.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[60%] Linking CXX executable Gravity
[60%] Built target Gravity
Scanning dependencies of target GeoidEval
[62%] Building CXX object tools/CMakeFiles/GeoidEval.dir/GeoidEval.cpp.o
[62%] Linking CXX executable GeoidEval
[62%] Built target GeoidEval
Scanning dependencies of target GeodesicProj
[62%] Building CXX object tools/CMakeFiles/GeodesicProj.dir/GeodesicProj.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[64%] Linking CXX executable GeodesicProj
[64%] Built target GeodesicProj
Scanning dependencies of target GeodSolve
[64%] Building CXX object tools/CMakeFiles/GeodSolve.dir/GeodSolve.cpp.o
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[66%] Linking CXX executable GeodSolve
[66%] Built target GeodSolve
Scanning dependencies of target Planimeter
[68%] Building CXX object tools/CMakeFiles/Planimeter.dir/Planimeter.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[68%] Linking CXX executable Planimeter
[68%] Built target Planimeter
Scanning dependencies of target TransverseMercatorProj
[70%] Building CXX object tools/CMakeFiles/TransverseMercatorProj.dir/TransverseMercatorProj.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[70%] Linking CXX executable TransverseMercatorProj
[70%] Built target TransverseMercatorProj
Scanning dependencies of target CartConvert
[70%] Building CXX object tools/CMakeFiles/CartConvert.dir/CartConvert.cpp.o
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[72%] Linking CXX executable CartConvert
[72%] Built target CartConvert
Scanning dependencies of target RhumbSolve
[74%] Building CXX object tools/CMakeFiles/RhumbSolve.dir/RhumbSolve.cpp.o
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
remark #11076: To get full report use -qopt-report=4 -qopt-report-phase ipo[74%] Linking CXX executable RhumbSolve
[74%] Built target RhumbSolve
Scanning dependencies of target tools
[74%] Built target tools
Scanning dependencies of target manpages
[76%] Building man page for TransverseMercatorProj
[78%] Building man page for CartConvert
[78%] Building man page for ConicProj
[80%] Building man page for GeodesicProj
[80%] Building man page for GeoConvert
[82%] Building man page for GeodSolve
[82%] Building man page for GeoidEval
[84%] Building man page for Gravity
[84%] Building man page for MagneticField
[86%] Building man page for Planimeter
[86%] Building man page for RhumbSolve
[86%] Building all the man pages
[86%] Built target manpages
Scanning dependencies of target htmlman
[86%] Building html version of man page for TransverseMercatorProj
[86%] Building html version of man page for CartConvert
[88%] Building html version of man page for ConicProj
[88%] Building html version of man page for GeodesicProj
[90%] Building html version of man page for GeoConvert
[90%] Building html version of man page for GeodSolve
[92%] Building html version of man page for GeoidEval
[92%] Building html version of man page for Gravity
[94%] Building html version of man page for MagneticField
[94%] Building html version of man page for Planimeter
[96%] Building html version of man page for RhumbSolve
[98%] Building html versions of the man pages
[98%] Built target htmlman
Scanning dependencies of target man
[98%] Built target man
Scanning dependencies of target javascript
[100%] Built target javascript
There are several Intel optimization remarks. I can dig into these, if needed. And now the tests:
Sorry, it's taken so long to approve your message. I didn't see the notice that it was in the moderation queue.
The Intel compiler will be supported in the next version of GeographicLib. Here are the main changes:
# Tell Intel compiler to do arithmetic accurately. This is needed to
# stop the compiler from ignoring parentheses in expressions like
# (a + b) + c and from simplifying 0.0 + x to x (which is wrong if
# x = -0.0).
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
if (MSVC)
set (CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} /fp:precise /Qdiag-disable:11074,11076")
else ()
set (CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -fp-model precise -diag-disable=11074,11076")
endif ()
endif ()
I would like to take you up on your offer to do testing when I'm closer to making the release. Please send me your E-mail address.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I've compiled GeographicLib-1.49 with Intel compilers, which mostly works. Here are the steps and output, using cmake version 3.9.1:
I'm not sure if the CMake warnings are important, or not...
There are several Intel optimization remarks. I can dig into these, if needed. And now the tests:
And picking appart Testing/Temporary/LastTest.log:
If you have no access to Intel compilers, I can do some testing.
Sorry, it's taken so long to approve your message. I didn't see the notice that it was in the moderation queue.
The Intel compiler will be supported in the next version of GeographicLib. Here are the main changes:
I would like to take you up on your offer to do testing when I'm closer to making the release. Please send me your E-mail address.