NO_LAPACKE = 0
endif
+ifndef NEED2UNDERSCORES
+NEED2UNDERSCORES=0
+endif
+
ifeq ($(OSNAME), WINNT)
ifeq ($(F_COMPILER), GFORTRAN)
EXTRALIB += -lgfortran
-Wl,--out-implib,libgoto2_shared.lib $(FEXTRALIB)
libopenblas.def : gensymbol
- perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
libgoto2_shared.def : gensymbol
- perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
libgoto_hpl.def : gensymbol
- perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
$(LIBDYNNAME) : ../$(LIBNAME) osx.def
$(CC) $(CFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
rm -f goto.$(SUFFIX)
linux.def : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol linux $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol linux $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
osx.def : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
aix.def : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > $(@F)
+ perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > $(@F)
symbol.S : gensymbol
- perl ./gensymbol win2kasm noarch dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > symbol.S
+ perl ./gensymbol win2kasm noarch dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > symbol.S
test : linktest.c
$(CC) $(CFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) -lm && echo OK.
rm -f linktest
linktest.c : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol linktest $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) > linktest.c
+ perl ./gensymbol linktest $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) > linktest.c
clean ::
@rm -f *.def *.dylib __.SYMDEF*
# ALLAUX -- Auxiliary routines called from all precisions
# already provided by @blasobjs: xerbla, lsame
- ilaenv, ieeeck, lsamen, xerbla_array, iparmq,
- ilaprec, ilatrans, ilauplo, iladiag, chla_transtype,
+ ilaenv, ieeeck, lsamen, iparmq,
+ ilaprec, ilatrans, ilauplo, iladiag,
ilaver, slamch, slamc3,
# SCLAUX -- Auxiliary routines called from both REAL and COMPLEX.
#LAPACKE_zlagsy_work,
);
+#These function may need 2 underscores.
+@lapack_embeded_underscore_objs=(xerbla_array, chla_transtype,);
+
if ($ARGV[5] == 1) {
#NO_LAPACK=1
@underscore_objs = (@blasobjs, @misc_underscore_objs);
} elsif (-d "../lapack-3.1.1" || -d "../lapack-3.4.0" || -d "../lapack-3.4.1" ||
-d "../lapack-3.4.2" || -d "../lapack-netlib") {
- @underscore_objs = (@blasobjs, @lapackobjs, @lapackobjs2, @misc_underscore_objs);
+
+ if ($ARGV[7] == 0){
+ # NEED2UNDERSCORES=0
+ # Don't need 2 underscores
+ @underscore_objs = (@blasobjs, @lapackobjs, @lapackobjs2, @misc_underscore_objs, @lapack_embeded_underscore_objs);
+ }else{
+ # Need 2 underscores
+ @underscore_objs = (@blasobjs, @lapackobjs, @lapackobjs2, @misc_underscore_objs);
+ @need_2underscore_objs = (@lapack_embeded_underscore_objs);
+ };
+
} else {
@underscore_objs = (@blasobjs, @lapackobjs, @misc_underscore_objs);
}
print $objs, $bu, "\n";
}
+ foreach $objs (@need_2underscore_objs) {
+ print $objs, $bu, $bu, "\n";
+ }
+
# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
print $objs, "\n";
print "_", $objs, $bu, "\n";
}
+ foreach $objs (@need_2underscore_objs) {
+ print "_", $objs, $bu, $bu, "\n";
+ }
+
# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
print "_", $objs, "\n";
print $objs, $bu, "\n";
}
+ foreach $objs (@need_2underscore_objs) {
+ print $objs, $bu, $bu, "\n";
+ }
+
# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
print $objs, "\n";
print "\t$uppercase=$objs", "_ \@", $count, "\n";
$count ++;
}
+
+ foreach $objs (@need_2underscore_objs) {
+ $uppercase = $objs;
+ $uppercase =~ tr/[a-z]/[A-Z]/;
+ print "\t$objs=$objs","__ \@", $count, "\n";
+ $count ++;
+ print "\t",$objs, "__=$objs","__ \@", $count, "\n";
+ $count ++;
+ print "\t$uppercase=$objs", "__ \@", $count, "\n";
+ $count ++;
+ }
#for misc_common_objs
foreach $objs (@misc_common_objs) {
print "\t$uppercase\_ = $objs","_\n";
$count ++;
}
+
+ foreach $objs (@need_2underscore_objs) {
+ $uppercase = $objs;
+ $uppercase =~ tr/[a-z]/[A-Z]/;
+ print "\t$objs=$objs","__ \@", $count, "\n";
+ $count ++;
+ print "\t",$objs, "__=$objs","__ \@", $count, "\n";
+ $count ++;
+ print "\t$uppercase=$objs", "__ \@", $count, "\n";
+ $count ++;
+ }
+
exit(0);
}
print "_", $uppercase, "_:\n";
print "\tjmp\t_", $objs, "_\n";
}
+
+ foreach $objs (@need_2underscore_objs) {
+ $uppercase = $objs;
+ $uppercase =~ tr/[a-z]/[A-Z]/;
+ print "\t.align 16\n";
+ print "\t.globl _", $uppercase, "__\n";
+ print "_", $uppercase, "__:\n";
+ print "\tjmp\t_", $objs, "__\n";
+ }
+
exit(0);
}
foreach $objs (@underscore_objs) {
print $objs, $bu, "();\n" if $objs ne "xerbla";
}
+
+ foreach $objs (@need_2underscore_objs) {
+ print $objs, $bu, $bu, "();\n";
+ }
+
# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
print $objs, "();\n";
$vendor = IBM;
$openmp = "-openmp";
}
+
+ # for embeded underscore name, e.g. zho_ge, it may append 2 underscores.
+ $data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`;
+ if ($data =~ /zho_ge__/) {
+ $need2bu = 1;
+ }
}
if ($vendor eq "") {
$link =~ s/\-rpath\s+/\-rpath\@/g;
+ $link =~ s/\-rpath-link\s+/\-rpath-link\@/g;
+
@flags = split(/[\s\,\n]/, $link);
# remove leading and trailing quotes from each flag.
@flags = map {s/^['"]|['"]$//g; $_} @flags;
$linker_L .= "-Wl,". $flags . " ";
}
- if ($flags =~ /^\-rpath/) {
+ if ($flags =~ /^\-rpath\@/) {
+ $flags =~ s/\@/\,/g;
+ if ($vendor eq "PGI") {
+ $flags =~ s/lib$/libso/;
+ }
+ $linker_L .= "-Wl,". $flags . " " ;
+ }
+
+ if ($flags =~ /^\-rpath-link\@/) {
$flags =~ s/\@/\,/g;
if ($vendor eq "PGI") {
$flags =~ s/lib$/libso/;
print CONFFILE "#define BUNDERSCORE\t$bu\n" if $bu ne "";
print CONFFILE "#define NEEDBUNDERSCORE\t1\n" if $bu ne "";
+print CONFFILE "#define NEED2UNDERSCORES\t1\n" if $need2bu ne "";
+
+print MAKEFILE "NEED2UNDERSCORES=1\n" if $need2bu ne "";
if (($linker_l ne "") || ($linker_a ne "")) {
print MAKEFILE "FEXTRALIB=$linker_L $linker_l $linker_a\n";
};
#endif
-extern void dtrtri_lapack_(char *UPLO, char *DIAG, int *N, double *a, int *ldA, int *Info);
+extern void BLASFUNC(dtrtrilapack)(char *UPLO, char *DIAG, int *N, double *a, int *ldA, int *Info);
int NAME(char *UPLO, char *DIAG, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){
// double trtri_U single thread error
// call dtrtri from lapack for a walk around.
if(uplo==0){
- dtrtri_lapack_(UPLO, DIAG, N, a, ldA, Info);
+ BLASFUNC(dtrtrilapack)(UPLO, DIAG, N, a, ldA, Info);
#ifndef PPC440
blas_memory_free(buffer);
#endif