added lapack-3.6.0
This commit is contained in:
53
lapack-netlib/CMAKE/CheckFortranTypeSizes.cmake
Normal file
53
lapack-netlib/CMAKE/CheckFortranTypeSizes.cmake
Normal file
@@ -0,0 +1,53 @@
|
||||
# This module perdorms several try-compiles to determine the default integer
|
||||
# size being used by the fortran compiler
|
||||
#
|
||||
# After execution, the following variables are set. If they are un set then
|
||||
# size detection was not possible
|
||||
#
|
||||
# SIZEOF_INTEGER - Number of bytes used to store the default INTEGER type
|
||||
# SIZEOF_REAL - Number of bytes used to store the default REAL type
|
||||
# SIZEOF_LOGICAL - Number of bytes used to store the default LOGICAL type
|
||||
# SIZEOF_CHARACTER - Number of bytes used to store the default CHARACTER type
|
||||
#
|
||||
#=============================================================================
|
||||
# Author: Chuck Atkins
|
||||
# Copyright 2011
|
||||
#=============================================================================
|
||||
|
||||
# Check the size of a single fortran type
|
||||
macro( _CHECK_FORTRAN_TYPE_SIZE _TYPE_NAME _TEST_SIZES )
|
||||
|
||||
foreach( __TEST_SIZE ${_TEST_SIZES} )
|
||||
set( __TEST_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortran${_TYPE_NAME}Size${__TEST_SIZE}.f90 )
|
||||
file( WRITE ${__TEST_FILE}
|
||||
"
|
||||
PROGRAM check_size
|
||||
${_TYPE_NAME}*${__TEST_SIZE}, TARGET :: a
|
||||
${_TYPE_NAME}, POINTER :: pa
|
||||
pa => a
|
||||
END PROGRAM
|
||||
")
|
||||
try_compile( SIZEOF_${_TYPE_NAME} ${CMAKE_BINARY_DIR} ${__TEST_FILE} )
|
||||
if( SIZEOF_${_TYPE_NAME} )
|
||||
message( STATUS "Testing default ${_TYPE_NAME}*${__TEST_SIZE} - found" )
|
||||
set( SIZEOF_${_TYPE_NAME} ${__TEST_SIZE} CACHE INTERNAL "Size of the default ${_TYPE_NAME} type" FORCE )
|
||||
break()
|
||||
else()
|
||||
message( STATUS "Testing default ${_TYPE_NAME}*${__TEST_SIZE} -" )
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
endmacro()
|
||||
|
||||
|
||||
macro( CHECK_FORTRAN_TYPE_SIZES )
|
||||
if( NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90 )
|
||||
message( FATAL_ERROR "Type size tests require Fortran 90 support" )
|
||||
endif()
|
||||
|
||||
_CHECK_FORTRAN_TYPE_SIZE( "INTEGER" "2;4;8;16" )
|
||||
_CHECK_FORTRAN_TYPE_SIZE( "REAL" "4;8;12;16" )
|
||||
_CHECK_FORTRAN_TYPE_SIZE( "LOGICAL" "1;2;4;8;16" )
|
||||
_CHECK_FORTRAN_TYPE_SIZE( "CHARACTER" "1;2;4;8;16" )
|
||||
endmacro()
|
||||
|
||||
90
lapack-netlib/CMAKE/CheckLAPACKCompilerFlags.cmake
Normal file
90
lapack-netlib/CMAKE/CheckLAPACKCompilerFlags.cmake
Normal file
@@ -0,0 +1,90 @@
|
||||
# This module checks against various known compilers and thier respective
|
||||
# flags to determine any specific flags needing to be set.
|
||||
#
|
||||
# 1. If FPE traps are enabled either abort or disable them
|
||||
# 2. Specify fixed form if needed
|
||||
# 3. Ensure that Release builds use O2 instead of O3
|
||||
#
|
||||
#=============================================================================
|
||||
# Author: Chuck Atkins
|
||||
# Copyright 2011
|
||||
#=============================================================================
|
||||
|
||||
macro( CheckLAPACKCompilerFlags )
|
||||
|
||||
set( FPE_EXIT FALSE )
|
||||
|
||||
# GNU Fortran
|
||||
if( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
|
||||
if( "${CMAKE_Fortran_FLAGS}" MATCHES "-ffpe-trap=[izoupd]")
|
||||
set( FPE_EXIT TRUE )
|
||||
endif()
|
||||
|
||||
# Intel Fortran
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
|
||||
if( "${CMAKE_Fortran_FLAGS}" MATCHES "[-/]fpe(-all=|)0" )
|
||||
set( FPE_EXIT TRUE )
|
||||
endif()
|
||||
|
||||
# SunPro F95
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
|
||||
if( ("${CMAKE_Fortran_FLAGS}" MATCHES "-ftrap=") AND
|
||||
NOT ("${CMAKE_Fortran_FLAGS}" MATCHES "-ftrap=(%|)none") )
|
||||
set( FPE_EXIT TRUE )
|
||||
elseif( NOT (CMAKE_Fortran_FLAGS MATCHES "-ftrap=") )
|
||||
message( STATUS "Disabling FPE trap handlers with -ftrap=%none" )
|
||||
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ftrap=%none"
|
||||
CACHE STRING "Flags for Fortran compiler." FORCE )
|
||||
endif()
|
||||
|
||||
# IBM XL Fortran
|
||||
elseif( (CMAKE_Fortran_COMPILER_ID STREQUAL "VisualAge" ) OR # CMake 2.6
|
||||
(CMAKE_Fortran_COMPILER_ID STREQUAL "XL" ) ) # CMake 2.8
|
||||
if( "${CMAKE_Fortran_FLAGS}" MATCHES "-qflttrap=[a-zA-Z:]:enable" )
|
||||
set( FPE_EXIT TRUE )
|
||||
endif()
|
||||
|
||||
if( NOT ("${CMAKE_Fortran_FLAGS}" MATCHES "-qfixed") )
|
||||
message( STATUS "Enabling fixed format F90/F95 with -qfixed" )
|
||||
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfixed"
|
||||
CACHE STRING "Flags for Fortran compiler." FORCE )
|
||||
endif()
|
||||
|
||||
# HP Fortran
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "HP" )
|
||||
if( "${CMAKE_Fortran_FLAGS}" MATCHES "\\+fp_exception" )
|
||||
set( FPE_EXIT TRUE )
|
||||
endif()
|
||||
|
||||
if( NOT ("${CMAKE_Fortran_FLAGS}" MATCHES "\\+fltconst_strict") )
|
||||
message( STATUS "Enabling strict float conversion with +fltconst_strict" )
|
||||
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} +fltconst_strict"
|
||||
CACHE STRING "Flags for Fortran compiler." FORCE )
|
||||
endif()
|
||||
|
||||
# Most versions of cmake don't have good default options for the HP compiler
|
||||
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g"
|
||||
CACHE STRING "Flags used by the compiler during debug builds" FORCE )
|
||||
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_MINSIZEREL} +Osize"
|
||||
CACHE STRING "Flags used by the compiler during release minsize builds" FORCE )
|
||||
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_RELEASE} +O2"
|
||||
CACHE STRING "Flags used by the compiler during release builds" FORCE )
|
||||
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} +O2 -g"
|
||||
CACHE STRING "Flags used by the compiler during release with debug info builds" FORCE )
|
||||
else()
|
||||
endif()
|
||||
|
||||
if( "${CMAKE_Fortran_FLAGS_RELEASE}" MATCHES "O[3-9]" )
|
||||
message( STATUS "Reducing RELEASE optimization level to O2" )
|
||||
string( REGEX REPLACE "O[3-9]" "O2" CMAKE_Fortran_FLAGS_RELEASE
|
||||
"${CMAKE_Fortran_FLAGS_RELEASE}" )
|
||||
set( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}"
|
||||
CACHE STRING "Flags used by the compiler during release builds" FORCE )
|
||||
endif()
|
||||
|
||||
|
||||
if( FPE_EXIT )
|
||||
message( FATAL_ERROR "Floating Point Exception (FPE) trap handlers are currently explicitly enabled in the compiler flags. LAPACK is designed to check for and handle these cases internally and enabling these traps will likely cause LAPACK to crash. Please re-configure with floating point exception trapping disabled." )
|
||||
endif()
|
||||
|
||||
endmacro()
|
||||
28
lapack-netlib/CMAKE/CheckTimeFunction.cmake
Normal file
28
lapack-netlib/CMAKE/CheckTimeFunction.cmake
Normal file
@@ -0,0 +1,28 @@
|
||||
# - Check if the Fortran function exists.
|
||||
# CHECK_TIME_FUNCTION(FUNCTION VARIABLE TYPE)
|
||||
# - macro which checks if the Fortran function exists
|
||||
# FUNCTION - the name of the Fortran function
|
||||
# VARIABLE - variable to store the result
|
||||
#
|
||||
|
||||
macro(CHECK_TIME_FUNCTION FUNCTION VARIABLE)
|
||||
|
||||
try_compile(RES
|
||||
${PROJECT_BINARY_DIR}/INSTALL
|
||||
${PROJECT_SOURCE_DIR}/INSTALL
|
||||
TIMING secondtst_${FUNCTION}
|
||||
OUTPUT_VARIABLE OUTPUT)
|
||||
|
||||
if(RES)
|
||||
set(${VARIABLE} ${FUNCTION} CACHE INTERNAL "Have Fortran function ${FUNCTION}")
|
||||
message(STATUS "Looking for Fortran ${FUNCTION} - found")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Fortran ${FUNCTION} exists. ${OUTPUT} \n\n")
|
||||
else(RES)
|
||||
message(STATUS "Looking for Fortran ${FUNCTION} - not found")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Fortran ${FUNCTION} does not exist. \n ${OUTPUT} \n")
|
||||
endif(RES)
|
||||
endmacro(CHECK_TIME_FUNCTION)
|
||||
|
||||
|
||||
105
lapack-netlib/CMAKE/FortranMangling.cmake
Normal file
105
lapack-netlib/CMAKE/FortranMangling.cmake
Normal file
@@ -0,0 +1,105 @@
|
||||
# Macro that defines variables describing the Fortran name mangling
|
||||
# convention
|
||||
#
|
||||
# Sets the following outputs on success:
|
||||
#
|
||||
# INTFACE
|
||||
# Add_
|
||||
# NoChange
|
||||
# f77IsF2C
|
||||
# UpCase
|
||||
#
|
||||
macro(FORTRAN_MANGLING CDEFS)
|
||||
MESSAGE(STATUS "=========")
|
||||
GET_FILENAME_COMPONENT(F77_NAME ${CMAKE_Fortran_COMPILER} NAME)
|
||||
GET_FILENAME_COMPONENT(F77_PATH ${CMAKE_Fortran_COMPILER} PATH)
|
||||
SET(F77 ${F77_NAME} CACHE INTERNAL "Name of the fortran compiler.")
|
||||
|
||||
IF(${F77} STREQUAL "ifort.exe")
|
||||
#settings for Intel Fortran
|
||||
SET(F77_OPTION_COMPILE "/c" CACHE INTERNAL
|
||||
"Fortran compiler option for compiling without linking.")
|
||||
SET(F77_OUTPUT_OBJ "/Fo" CACHE INTERNAL
|
||||
"Fortran compiler option for setting object file name.")
|
||||
SET(F77_OUTPUT_EXE "/Fe" CACHE INTERNAL
|
||||
"Fortran compiler option for setting executable file name.")
|
||||
ELSE(${F77} STREQUAL "ifort.exe")
|
||||
# in other case, let user specify their fortran configrations.
|
||||
SET(F77_OPTION_COMPILE "-c" CACHE STRING
|
||||
"Fortran compiler option for compiling without linking.")
|
||||
SET(F77_OUTPUT_OBJ "-o" CACHE STRING
|
||||
"Fortran compiler option for setting object file name.")
|
||||
SET(F77_OUTPUT_EXE "-o" CACHE STRING
|
||||
"Fortran compiler option for setting executable file name.")
|
||||
SET(F77_LIB_PATH "" CACHE PATH
|
||||
"Library path for the fortran compiler")
|
||||
SET(F77_INCLUDE_PATH "" CACHE PATH
|
||||
"Include path for the fortran compiler")
|
||||
ENDIF(${F77} STREQUAL "ifort.exe")
|
||||
|
||||
|
||||
MESSAGE(STATUS "Testing FORTRAN_MANGLING")
|
||||
|
||||
MESSAGE(STATUS "Compiling Finface.f...")
|
||||
|
||||
execute_process ( COMMAND ${CMAKE_Fortran_COMPILER} ${F77_OPTION_COMPILE} ${PROJECT_SOURCE_DIR}/lapacke/mangling/Fintface.f
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
RESULT_VARIABLE RESULT
|
||||
ERROR_VARIABLE ERROR)
|
||||
|
||||
if(RESULT EQUAL 0)
|
||||
MESSAGE(STATUS "Compiling Finface.f successful")
|
||||
else()
|
||||
MESSAGE(FATAL_ERROR " Compiling Finface.f FAILED")
|
||||
MESSAGE(FATAL_ERROR " Error:\n ${ERROR}")
|
||||
endif()
|
||||
|
||||
MESSAGE(STATUS "Compiling Cintface.c...")
|
||||
|
||||
execute_process ( COMMAND ${CMAKE_C_COMPILER} ${F77_OPTION_COMPILE} ${PROJECT_SOURCE_DIR}/lapacke/mangling/Cintface.c
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
RESULT_VARIABLE RESULT
|
||||
ERROR_VARIABLE ERROR)
|
||||
|
||||
if(RESULT EQUAL 0)
|
||||
MESSAGE(STATUS "Compiling Cintface.c successful")
|
||||
else()
|
||||
MESSAGE(FATAL_ERROR " Compiling Cintface.c FAILED")
|
||||
MESSAGE(FATAL_ERROR " Error:\n ${ERROR}")
|
||||
endif()
|
||||
|
||||
MESSAGE(STATUS "Linking Finface.f and Cintface.c...")
|
||||
|
||||
execute_process ( COMMAND ${CMAKE_Fortran_COMPILER} ${F77_OUTPUT_OBJ} xintface.exe Fintface.o Cintface.o
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
RESULT_VARIABLE RESULT
|
||||
ERROR_VARIABLE ERROR)
|
||||
|
||||
if(RESULT EQUAL 0)
|
||||
MESSAGE(STATUS "Linking Finface.f and Cintface.c successful")
|
||||
else()
|
||||
MESSAGE(FATAL_ERROR " Linking Finface.f and Cintface.c FAILED")
|
||||
MESSAGE(FATAL_ERROR " Error:\n ${ERROR}")
|
||||
endif()
|
||||
|
||||
MESSAGE(STATUS "Running ./xintface...")
|
||||
|
||||
execute_process ( COMMAND ./xintface.exe
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
|
||||
RESULT_VARIABLE xintface_RES
|
||||
OUTPUT_VARIABLE xintface_OUT
|
||||
ERROR_VARIABLE xintface_ERR)
|
||||
|
||||
|
||||
if (xintface_RES EQUAL 0)
|
||||
STRING(REPLACE "\n" "" xintface_OUT "${xintface_OUT}")
|
||||
MESSAGE(STATUS "Fortran MANGLING convention: ${xintface_OUT}")
|
||||
SET(CDEFS ${xintface_OUT})
|
||||
else()
|
||||
MESSAGE(FATAL_ERROR "FORTRAN_MANGLING:ERROR ${xintface_ERR}")
|
||||
endif()
|
||||
|
||||
endmacro(FORTRAN_MANGLING)
|
||||
10
lapack-netlib/CMAKE/lapack-config-build.cmake.in
Normal file
10
lapack-netlib/CMAKE/lapack-config-build.cmake.in
Normal file
@@ -0,0 +1,10 @@
|
||||
# Load lapack targets from the build tree if necessary.
|
||||
set(_LAPACK_TARGET "@_lapack_config_build_guard_target@")
|
||||
if(_LAPACK_TARGET AND NOT TARGET "${_LAPACK_TARGET}")
|
||||
include("@LAPACK_BINARY_DIR@/lapack-targets.cmake")
|
||||
endif()
|
||||
unset(_LAPACK_TARGET)
|
||||
|
||||
# Report the blas and lapack raw or imported libraries.
|
||||
set(LAPACK_blas_LIBRARIES "@BLAS_LIBRARIES@")
|
||||
set(LAPACK_lapack_LIBRARIES "@LAPACK_LIBRARIES@")
|
||||
15
lapack-netlib/CMAKE/lapack-config-install.cmake.in
Normal file
15
lapack-netlib/CMAKE/lapack-config-install.cmake.in
Normal file
@@ -0,0 +1,15 @@
|
||||
# Compute locations from <prefix>/lib/cmake/lapack-<v>/<self>.cmake
|
||||
get_filename_component(_LAPACK_SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
|
||||
# Load lapack targets from the install tree if necessary.
|
||||
set(_LAPACK_TARGET "@_lapack_config_install_guard_target@")
|
||||
if(_LAPACK_TARGET AND NOT TARGET "${_LAPACK_TARGET}")
|
||||
include("${_LAPACK_SELF_DIR}/lapack-targets.cmake")
|
||||
endif()
|
||||
unset(_LAPACK_TARGET)
|
||||
|
||||
# Report the blas and lapack raw or imported libraries.
|
||||
set(LAPACK_blas_LIBRARIES "@BLAS_LIBRARIES@")
|
||||
set(LAPACK_lapack_LIBRARIES "@LAPACK_LIBRARIES@")
|
||||
|
||||
unset(_LAPACK_SELF_DIR)
|
||||
Reference in New Issue
Block a user