When using newer Xcode releases, older `gfortran` may be given a
deployment target that is not understood if the host is on a new enough
version. Forward the deployment target from the main project to the
testing project to check with similar settings as the main project.
long's in windows are 4 bytes (MSVS, intel compilers). Use int64_t and int32_t
to ensure 8 byte integers for ILP interface.
support 8 byte integer flag for intel ifort compiler
CMake will automatically generate the proper flag to tell each compiler
that our sources use fixed format. Drop our manual use of `-qfixed` for
the XL Fortran compiler because it breaks CMake's FortranCInterface
detection (which uses free-format sources).
This commit abstracts the detailed list of libraries associated with
LAPACK and streamlines the configuration of user projects. They can now
simply specify ${LAPACK_LIBRARIES} independently of the LAPACK build options.
Co-authored-by: Pablo Hernandez <pablo.hernandez@kitware.com>
With cmake is best to require out-of-source builds,
and to avoid intalling into the same directory as the
build was performed.
Both of these situations can cause very confusing situations
that can frustrate new users of the software package, so
check for and provide guidance to the end-users.
These files were initially contributed to the ITK
(www.itk.org) project and have been widely re-used
by many other projects.
NOTE: This patch is dependant on pull request #16
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block. This is no longer the preferred style.
NOTE: MUST USE GNU compliant version of sed
Run the following shell code:
for c in else endif endforeach endfunction endmacro endwhile; do
echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed \
&& git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' \
| xargs -0 gsed -i -f convert.sed \
&& rm convert.sed
Ancient CMake versions required upper-case commands. Later command
names became case-insensitive. Now the preferred style is lower-case.
Run the following shell code:
NOTE: MUST USE GNU compliant version of sed
cmake --help-command-list \
| grep -v "cmake version" \
| while read c; do
echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g'
done >convert.sed \
&& git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' \
| xargs -0 gsed -i -f convert.sed \
&& rm convert.sed
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
"One of the improvements with the patches is that SOVERSION and VERSION are now properly set and the proper symlinks are created:
```
liblapack.so -> liblapack.so.3
liblapack.so.3 -> liblapack.so.3.5.0
liblapack.so.3.5.0
```
Since BLAS is shipped with LAPACK and no separate version number is given for BLAS, I applied the same there, too."
Tested on Julie's Mac
TO DO: To test under Windows
====
Updated OSX RPATH settings
In response to CMake 3.0 generating warnings regarding policy CMP0042,
the OSX RPATH settings have been updated per recommendations found
in the CMake Wiki:
http://www.cmake.org/Wiki/CMake_RPATH_handling#Mac_OS_X_and_the_RPATH
Provide CMake packages for both LAPACK and LAPACKE
Teach "lapack-config.cmake" to provide variables
LAPACK_blas_LIBRARIES
LAPACK_lapack_LIBRARIES
that contain either the target names when using the reference
implementation or the system libraries found for them.
Configure a "lapacke-config.cmake" file for the build and install
trees to package LAPACKE. Teach it to load the LAPACK package
installed with it. Provide variables
LAPACKE_INCLUDE_DIRS
LAPACKE_LIBRARIES
containing the header file search path for lapacke headers
and the list of lapacke library targets.
This requires CMake 2.8.10 to separate the installation export
for the lapacke library from the other targets.
Now we can generate dll for LAPACK and LAPACKE directly for Mingw so that FORTRAN compiler is longer needed.
Because LAPACKE contains some routines from MATGEN (for PLASMA), LAPACKE will requires the tmglib library.
Add some LAPACK 3.4.0 routines were missing in the CMAKE LAPACK build.
Here is a patch for lapack to provide MS-format dll import libraries
from the MinGW GNU toolchain. It is ready for others to try before it
goes upstream. You just need to have MinGW GNU Fortran 4.x and one of
the VS IDEs installed. Configure a MinGW build with BUILD_SHARED_LIBS
set to ON. The resulting build (and install) tree will provide both
GNU-format and MS-format import libraries for the DLLs.
A C application built with MSVC and linked to the MinGW-built lapack
DLLs will run but requires the GNU runtime DLLs from MinGW to be available.
I tested this with both 32-bit and 64-bit builds. For the latter I used
the mingw64 gfortran. In both cases I just put the GNU runtime directory
in my PATH. I think both libgfortran-3.dll and libgcc_s_dw2-1.dll are
needed.
This may be used to create a binary LAPACK distribution for Windows that
will work without any GNU tools installed. One needs only to provide the
MinGW GNU runtime libraries along with blas.dll and lapack.dll.
-Brad