ILP support
authorLarson, Eric <eric.larson@intel.com>
Fri, 24 Sep 2021 20:03:59 +0000 (13:03 -0700)
committerMarkus Mützel <markus.muetzel@gmx.de>
Thu, 24 Mar 2022 18:09:23 +0000 (19:09 +0100)
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

lapack-netlib/CBLAS/include/cblas.h
lapack-netlib/CBLAS/include/cblas_f77.h
lapack-netlib/CMAKE/CheckLAPACKCompilerFlags.cmake
lapack-netlib/CMakeLists.txt
lapack-netlib/LAPACKE/include/lapacke_config.h

index 9e93796..7593064 100644 (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;
index 36d4a71..bb3f3a4 100644 (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
    #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
index add0d17..15a8f01 100644 (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]")
index a30efbb..b704e72 100644 (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")
index 8262c34..c654295 100644 (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