Merge branch 'master' into export_import_cblas_globals

This commit is contained in:
Simon Maertens
2026-04-23 14:54:10 +02:00
29 changed files with 99 additions and 35 deletions
+1 -1
View File
@@ -129,7 +129,7 @@ if(BUILD_INDEX64_EXT_API)
set_target_properties(${BLASLIB}_64_obj PROPERTIES POSITION_INDEPENDENT_CODE ON)
#Add _64 suffix to all Fortran functions via macros
foreach(F IN LISTS SOURCES_64_F)
if(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG")
if(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" OR CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
set_source_files_properties(${F} PROPERTIES COMPILE_FLAGS "-fpp")
else()
set_source_files_properties(${F} PROPERTIES COMPILE_FLAGS "-cpp")
+10 -3
View File
@@ -13,9 +13,16 @@ endif()
set(LAPACK_INSTALL_EXPORT_NAME ${CBLASLIB}-targets)
include(CheckCSourceCompiles)
check_c_source_compiles("int __attribute__((weak)) main() {};"
HAS_ATTRIBUTE_WEAK_SUPPORT)
if(WIN32)
# MSVC does not support __attribute__((weak)) and the Intel compiler supports
# it but produces linker errors when used in CBLAS, so we disable it for all
# Windows builds.
set(HAS_ATTRIBUTE_WEAK_SUPPORT FALSE)
else()
include(CheckCSourceCompiles)
check_c_source_compiles("int __attribute__((weak)) main() {};"
HAS_ATTRIBUTE_WEAK_SUPPORT)
endif()
include_directories(include ${LAPACK_BINARY_DIR}/include)
add_subdirectory(src)
+4 -2
View File
@@ -47,7 +47,8 @@
#else
#include <complex>
#endif
#if _MSC_VER
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
#define lapack_complex_float _Fcomplex
#else
#define lapack_complex_float float _Complex
@@ -69,7 +70,8 @@
#else
#include <complex>
#endif
#if _MSC_VER
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
#define lapack_complex_double _Dcomplex
#else
#define lapack_complex_double double _Complex
+1 -1
View File
@@ -99,7 +99,7 @@ typedef struct { double real, imag; } _lapack_complex_double;
#define lapack_complex_double_real(z) ((z).real())
#define lapack_complex_double_imag(z) ((z).imag())
#elif _MSC_VER
#elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
#include <complex.h>
#define lapack_complex_float _Fcomplex
+59 -4
View File
@@ -32,6 +32,9 @@
#include "lapacke_utils.h"
#include <stdlib.h>
#include <string.h>
static int nancheck_flag = -1;
void LAPACKE_set_nancheck( int flag )
@@ -39,21 +42,73 @@ void LAPACKE_set_nancheck( int flag )
nancheck_flag = ( flag ) ? 1 : 0;
}
typedef struct {
int found;
char *value;
} lapacke_env_var;
static inline lapacke_env_var LAPACKE_getenv(const char *var_name)
{
size_t var_length = 0;
/* Get the length of the environment variable value */
#if defined(_WIN32)
errno_t result = getenv_s( &var_length, NULL, 0, var_name );
if ( result != 0 || var_length == 0 ) {
return (lapacke_env_var){ 0, NULL };
}
#else
const char *env = getenv( var_name );
if ( env == NULL ) {
return (lapacke_env_var){ 0, NULL };
}
var_length = strlen( env ) + 1;
#endif
/* Allocate memory for the environment variable value */
char *value = (char *)LAPACKE_malloc( var_length );
if ( value == NULL ) {
return (lapacke_env_var){ 0, NULL };
}
/* Get the value of the environment variable */
#if defined(_WIN32)
result = getenv_s( &var_length, value, var_length, var_name );
if ( result != 0 ) {
LAPACKE_free( value );
return (lapacke_env_var){ 0, NULL };
}
#else
memcpy( value, env, var_length );
#endif
return (lapacke_env_var){ 1, value };
}
static inline void LAPACKE_freenv(lapacke_env_var *var)
{
if ( var->found && var->value != NULL ) {
LAPACKE_free( var->value );
}
var->found = 0;
var->value = NULL;
}
int LAPACKE_get_nancheck( )
{
char* env;
if ( nancheck_flag != -1 ) {
return nancheck_flag;
}
/* Check environment variable, once and only once */
env = getenv( "LAPACKE_NANCHECK" );
if ( !env ) {
lapacke_env_var lapacke_nancheck = LAPACKE_getenv( "LAPACKE_NANCHECK" );
if ( !lapacke_nancheck.found ) {
/* By default, NaN checking is enabled */
nancheck_flag = 1;
} else {
nancheck_flag = atoi( env ) ? 1 : 0;
nancheck_flag = atoi( lapacke_nancheck.value ) ? 1 : 0;
}
LAPACKE_freenv( &lapacke_nancheck );
return nancheck_flag;
}
+1 -1
View File
@@ -43,7 +43,7 @@ lapack_complex_double lapack_make_complex_double( double re, double im ) {
z = re + im * I;
#elif defined(LAPACK_COMPLEX_CPP)
z = std::complex<double>(re,im);
#elif _MSC_VER
#elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
z = _Cbuild(re, im);
#else /* C99 is default */
z = re + im*I;
+1 -1
View File
@@ -43,7 +43,7 @@ lapack_complex_float lapack_make_complex_float( float re, float im ) {
z = re + im * I;
#elif defined(LAPACK_COMPLEX_CPP)
z = std::complex<float>(re,im);
#elif _MSC_VER
#elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
z = _FCbuild(re, im);
#else /* C99 is default */
z = re + im*I;
+1 -1
View File
@@ -209,7 +209,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(EV) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(EV)
COMPLEX EV
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -253,7 +253,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(EV) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(EV)
COMPLEX EV
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -285,7 +285,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -284,7 +284,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -347,7 +347,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -150,7 +150,7 @@
INTEGER I, LASTV, LASTC
* ..
* .. External Subroutines ..
EXTERNAL CAXPY, CGEMV, CGER, CSCAL
EXTERNAL CAXPY, CGEMV, CGERC, CSCAL
* ..
* .. Intrinsic Functions ..
INTRINSIC CONJG
+1 -1
View File
@@ -228,7 +228,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI)
DOUBLE PRECISION WR, WI
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -295,7 +295,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI)
DOUBLE PRECISION WR, WI
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -298,7 +298,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
DOUBLE PRECISION ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -297,7 +297,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
DOUBLE PRECISION ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -382,7 +382,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
DOUBLE PRECISION ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -228,7 +228,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI)
REAL WR, WI
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -295,7 +295,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(WR, WI)
REAL WR, WI
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -298,7 +298,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
REAL ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -297,7 +297,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
REAL ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -382,7 +382,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHAR, ALPHAI, BETA)
REAL ALPHAR, ALPHAI, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -209,7 +209,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(EV) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(EV)
COMPLEX*16 EV
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -253,7 +253,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELECT_PROC_TYPE(EV) BIND(C)
LOGICAL FUNCTION SELECT_PROC_TYPE(EV)
COMPLEX*16 EV
END FUNCTION SELECT_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -285,7 +285,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX*16 ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -284,7 +284,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX*16 ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -347,7 +347,7 @@
* ..
* .. Function Arguments ..
INTERFACE
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA) BIND(C)
LOGICAL FUNCTION SELCTG_PROC_TYPE(ALPHA,BETA)
COMPLEX*16 ALPHA, BETA
END FUNCTION SELCTG_PROC_TYPE
END INTERFACE
+1 -1
View File
@@ -176,7 +176,7 @@
EXTERNAL LSAME
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, ZLARF1, ZLARF1F
EXTERNAL XERBLA, ZLARF1L, ZLARF1F
* ..
* .. Intrinsic Functions ..
INTRINSIC DCONJG, MAX