Skip to content

Commit a8028e9

Browse files
committed
Fix undefined reference to cblas_[sd]cabs1
cblas.h defines double cblas_dcabs1(const void *z); float cblas_scabs1(const void *c); but does not provide an implementation. This commit adds the missing implementation in the common CBLAS style and eliminates the linker error when calling the above function.
1 parent 02b71fc commit a8028e9

File tree

7 files changed

+70
-4
lines changed

7 files changed

+70
-4
lines changed

CBLAS/include/cblas_f77.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@
9797
#define F77_csrot_base F77_GLOBAL(csrot, CSROT)
9898
#define F77_zrotg_base F77_GLOBAL(zrotg, ZROTG)
9999
#define F77_zdrot_base F77_GLOBAL(zdrot, ZDROT)
100+
#define F77_scabs1_sub_base F77_GLOBAL(scabs1sub, SCABS1SUB)
101+
#define F77_dcabs1_sub_base F77_GLOBAL(dcabs1sub, DCABS1SUB)
100102

101103
/*
102104
* Level 2 BLAS
@@ -221,6 +223,7 @@
221223
#define F77_snrm2_sub(...) F77_snrm2_sub_base(__VA_ARGS__)
222224
#define F77_sasum_sub(...) F77_sasum_sub_base(__VA_ARGS__)
223225
#define F77_isamax_sub(...) F77_isamax_sub_base(__VA_ARGS__)
226+
#define F77_scabs1_sub(...) F77_scabs1_sub_base(__VA_ARGS__)
224227

225228
/* Double Precision */
226229

@@ -238,6 +241,7 @@
238241
#define F77_dnrm2_sub(...) F77_dnrm2_sub_base(__VA_ARGS__)
239242
#define F77_dasum_sub(...) F77_dasum_sub_base(__VA_ARGS__)
240243
#define F77_idamax_sub(...) F77_idamax_sub_base(__VA_ARGS__)
244+
#define F77_dcabs1_sub(...) F77_dcabs1_sub_base(__VA_ARGS__)
241245

242246
/* Single Complex Precision */
243247

@@ -602,6 +606,7 @@ void F77_xerbla_base(FCHAR, void *
602606
void F77_csscal_base( FINT, const float *, void *, FINT);
603607
void F77_scnrm2_sub_base( FINT, const void *, FINT, float *);
604608
void F77_scasum_sub_base( FINT, const void *, FINT, float *);
609+
void F77_scabs1_sub_base( const void *, float *);
605610

606611
/* Double Complex Precision */
607612

@@ -618,6 +623,7 @@ void F77_xerbla_base(FCHAR, void *
618623
void F77_dznrm2_sub_base( FINT, const void *, FINT, double *);
619624
void F77_dzasum_sub_base( FINT, const void *, FINT, double *);
620625
void F77_izamax_sub_base( FINT, const void *, FINT, FINT2);
626+
void F77_dcabs1_sub_base( const void *, double *);
621627

622628
/*
623629
* Level 2 Fortran Prototypes

CBLAS/src/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,16 @@ set(DLEV1 cblas_drotg.c cblas_drotmg.c cblas_drot.c cblas_drotm.c
2929
set(CLEV1 cblas_crotg.c cblas_csrot.c
3030
cblas_cswap.c cblas_cscal.c cblas_csscal.c cblas_ccopy.c
3131
cblas_caxpy.c cblas_cdotu_sub.c cblas_cdotc_sub.c
32-
cblas_icamax.c cdotcsub.f cdotusub.f icamaxsub.f)
32+
cblas_icamax.c cdotcsub.f cdotusub.f icamaxsub.f
33+
cblas_scabs1.c scabs1sub.f )
3334

3435
# Files for level 1 double precision complex
3536
set(ZLEV1 cblas_zrotg.c cblas_zdrot.c
3637
cblas_zswap.c cblas_zscal.c cblas_zdscal.c cblas_zcopy.c
3738
cblas_zaxpy.c cblas_zdotu_sub.c cblas_zdotc_sub.c cblas_dznrm2.c
3839
cblas_dzasum.c cblas_izamax.c zdotcsub.f zdotusub.f
39-
dzasumsub.f dznrm2sub.f izamaxsub.f)
40+
dzasumsub.f dznrm2sub.f izamaxsub.f
41+
cblas_dcabs1.c dcabs1sub.f)
4042

4143
# Common files for level 1 single precision
4244
set(SCLEV1 cblas_scasum.c scasumsub.f cblas_scnrm2.c scnrm2sub.f)

CBLAS/src/Makefile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,16 @@ dlev1 = cblas_drotg.o cblas_drotmg.o cblas_drot.o cblas_drotm.o \
3939
clev1 = cblas_crotg.o cblas_csrot.o \
4040
cblas_cswap.o cblas_cscal.o cblas_csscal.o cblas_ccopy.o \
4141
cblas_caxpy.o cblas_cdotu_sub.o cblas_cdotc_sub.o \
42-
cblas_icamax.o cdotcsub.o cdotusub.o icamaxsub.o
42+
cblas_icamax.o cdotcsub.o cdotusub.o icamaxsub.o \
43+
cblas_scabs1.o scabs1sub.o
4344

4445
# Files for level 1 double precision complex
4546
zlev1 = cblas_zrotg.o cblas_zdrot.o \
4647
cblas_zswap.o cblas_zscal.o cblas_zdscal.o cblas_zcopy.o \
4748
cblas_zaxpy.o cblas_zdotu_sub.o cblas_zdotc_sub.o cblas_dznrm2.o \
4849
cblas_dzasum.o cblas_izamax.o zdotcsub.o zdotusub.o \
49-
dzasumsub.o dznrm2sub.o izamaxsub.o
50+
dzasumsub.o dznrm2sub.o izamaxsub.o \
51+
cblas_dcabs1.o dcabs1sub.o
5052

5153
# Common files for level 1 single precision
5254
sclev1 = cblas_scasum.o scasumsub.o cblas_scnrm2.o scnrm2sub.o

CBLAS/src/cblas_dcabs1.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* cblas_scabs1.c
3+
*
4+
* The program is a C interface to scabs1.
5+
*
6+
*/
7+
#include "cblas.h"
8+
#include "cblas_f77.h"
9+
double cblas_dcabs1(const void *c)
10+
{
11+
double cabs1 = 0.0;
12+
F77_dcabs1_sub(c, &cabs1);
13+
return cabs1;
14+
}
15+

CBLAS/src/cblas_scabs1.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* cblas_scabs1.c
3+
*
4+
* The program is a C interface to scabs1.
5+
*
6+
*/
7+
#include "cblas.h"
8+
#include "cblas_f77.h"
9+
float cblas_scabs1(const void *c)
10+
{
11+
float cabs1 = 0.0;
12+
F77_scabs1_sub(c, &cabs1);
13+
return cabs1;
14+
}
15+

CBLAS/src/dcabs1sub.f

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
c dcabs1.f
2+
c
3+
c The program is a fortran wrapper for dcabs1.
4+
c
5+
subroutine dcabs1sub(z, cabs1)
6+
c
7+
external dcabs1
8+
double complex z
9+
double precision dcabs1, cabs1
10+
c
11+
cabs1=dcabs1(z)
12+
return
13+
end

CBLAS/src/scabs1sub.f

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
c scabs1.f
2+
c
3+
c The program is a fortran wrapper for scabs1.
4+
c
5+
subroutine scabs1sub(z, cabs1)
6+
c
7+
external scabs1
8+
complex z
9+
real scabs1, cabs1
10+
c
11+
cabs1=scabs1(z)
12+
return
13+
end

0 commit comments

Comments
 (0)