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
#ifndef CBLAS_H
#define CBLAS_H
#include <stddef.h>
+#include <stdint.h>
#ifdef __cplusplus
* 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;
#ifndef CBLAS_F77_H
#define CBLAS_F77_H
+#include <stdint.h>
+
#ifdef CRAY
#include <fortran.h>
#define F77_CHAR _fcd
#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
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]")
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")
#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