ILP support

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
This commit is contained in:
Larson, Eric 2021-09-24 13:03:59 -07:00 committed by Markus Mützel
parent 3efbf968f1
commit 8fe3555792
5 changed files with 27 additions and 6 deletions

View File

@ -1,6 +1,7 @@
#ifndef CBLAS_H
#define CBLAS_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
@ -11,9 +12,9 @@ extern "C" { /* Assume C declarations for C++ */
* Enumerated and derived types
*/
#ifdef WeirdNEC
#define CBLAS_INDEX long
#define CBLAS_INDEX int64_t
#else
#define CBLAS_INDEX int
#define CBLAS_INDEX int32_t
#endif
typedef enum {CblasRowMajor=101, CblasColMajor=102} CBLAS_LAYOUT;

View File

@ -9,6 +9,8 @@
#ifndef CBLAS_F77_H
#define CBLAS_F77_H
#include <stdint.h>
#ifdef CRAY
#include <fortran.h>
#define F77_CHAR _fcd
@ -17,8 +19,12 @@
#define F77_STRLEN(a) (_fcdlen)
#endif
#ifndef F77_INT
#ifdef WeirdNEC
#define F77_INT long
#define F77_INT int64_t
#else
#define F77_INT int32_t
#endif
#endif
#ifdef F77_CHAR

View File

@ -14,6 +14,19 @@ macro( CheckLAPACKCompilerFlags )
set( FPE_EXIT FALSE )
# FORTRAN ILP default
if ( FORTRAN_ILP )
if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
if ( WIN32 )
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /integer-size:64")
else ()
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -integer-size 64")
endif()
else()
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8")
endif()
endif()
# GNU Fortran
if( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
if( "${CMAKE_Fortran_FLAGS}" MATCHES "-ffpe-trap=[izoupd]")

View File

@ -53,7 +53,7 @@ if(BUILD_INDEX64)
set(LAPACKELIB "lapacke64")
set(TMGLIB "tmglib64")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWeirdNEC -DLAPACK_ILP64 -DHAVE_LAPACK_CONFIG_H")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8")
set(FORTRAN_ILP TRUE)
else()
set(BLASLIB "blas")
set(CBLASLIB "cblas")

View File

@ -49,12 +49,13 @@ extern "C" {
#endif /* __cplusplus */
#include <stdlib.h>
#include <stdint.h>
#ifndef lapack_int
#if defined(LAPACK_ILP64)
#define lapack_int long
#define lapack_int int64_t
#else
#define lapack_int int
#define lapack_int int32_t
#endif
#endif