Skip to content

Commit

Permalink
Patch openblas to add 64_ suffix when using 64 bit ints
Browse files Browse the repository at this point in the history
  • Loading branch information
tkelman committed Oct 19, 2014
1 parent 636f481 commit 85180c0
Show file tree
Hide file tree
Showing 2 changed files with 339 additions and 3 deletions.
26 changes: 23 additions & 3 deletions deps/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,10 @@ endif

# 64-bit BLAS interface
ifeq ($(USE_BLAS64), 1)
OPENBLAS_BUILD_OPTS += INTERFACE64=1
OPENBLAS_BUILD_OPTS += INTERFACE64=1 SYMBOLSUFFIX="64_"
ifeq ($(OS),Darwin)
OPENBLAS_BUILD_OPTS += OBJCONV=$(JULIAHOME)/deps/objconv/objconv
endif
endif

# Decide whether to build for 32-bit or 64-bit arch
Expand Down Expand Up @@ -864,6 +867,7 @@ endif
mkdir -p openblas-$(OPENBLAS_VER) && \
$(TAR) -C openblas-$(OPENBLAS_VER) --strip-components 1 -xf $<
perl -i -ple 's/^\s*(EXTRALIB\s*\+=\s*-lSystemStubs)\s*$$/# $$1/g' openblas-$(OPENBLAS_VER)/Makefile.system
cd openblas-$(OPENBLAS_VER) && patch -p1 < ../openblas-symbol-rename.patch
echo 1 > $@
$(OPENBLAS_OBJ_SOURCE): openblas-$(OPENBLAS_VER)/config.status
$(MAKE) -C openblas-$(OPENBLAS_VER) $(OPENBLAS_BUILD_OPTS) || (echo "*** Clean the OpenBLAS build with 'make -C deps clean-openblas'. Rebuild with 'make OPENBLAS_USE_THREAD=0 if OpenBLAS had trouble linking libpthread.so, and with 'make OPENBLAS_TARGET_ARCH=NEHALEM' if there were errors building SandyBridge support. Both these options can also be used simultaneously. ***" && false)
Expand Down Expand Up @@ -1032,6 +1036,16 @@ ifeq ($(USEIFC),1)
ARPACK_FFLAGS += -i8
else
ARPACK_FFLAGS += -fdefault-integer-8
ifeq ($(USE_SYSTEM_BLAS), 0)
ifneq ($(USE_INTEL_MKL), 1)
ARPACK_OPENBLASFCNS1 = axpy copy gemv geqr2 lacpy lahqr lanhs larnv lartg lascl laset scal trevc trmm trsen
ARPACK_OPENBLASFCNS2 = dot ger labad laev2 lamch lanst lanv2 lapy2 larf larfg lasr nrm2 orm2r rot steqr swap
ARPACK_OPENBLASFCNS3 = dotc geru unm2r
ARPACK_FFLAGS += $(foreach fcn, $(ARPACK_OPENBLASFCNS1) $(ARPACK_OPENBLASFCNS2), -Ds$(fcn)=s$(fcn)_64 -Dd$(fcn)=d$(fcn)_64)
ARPACK_FFLAGS += $(foreach fcn, $(ARPACK_OPENBLASFCNS1) $(ARPACK_OPENBLASFCNS3), -Dc$(fcn)=c$(fcn)_64 -Dz$(fcn)=z$(fcn)_64)
ARPACK_FFLAGS += -Dscnrm2=scnrm2_64 -Ddznrm2=dznrm2_64 -Dcsscal=csscal_64 -Dzdscal=zdscal_64
endif
endif
endif
endif

Expand Down Expand Up @@ -1287,8 +1301,14 @@ SUITESPARSE_OBJ_SOURCE = SuiteSparse-$(SUITESPARSE_VER)/UMFPACK/Lib/libumfpack.a
SUITESPARSE_OBJ_TARGET = $(build_shlibdir)/libspqr.$(SHLIB_EXT)

ifeq ($(USE_BLAS64), 1)
UMFPACK_CONFIG = -DLONGBLAS='long long'
CHOLMOD_CONFIG = -DLONGBLAS='long long'
UMFPACK_CONFIG = -DLONGBLAS='long long'
CHOLMOD_CONFIG = -DLONGBLAS='long long'
ifeq ($(USE_SYSTEM_BLAS), 0)
ifneq ($(USE_INTEL_MKL), 1)
UMFPACK_CONFIG += -DSUN64
CHOLMOD_CONFIG += -DSUN64
endif
endif
endif

SUITE_SPARSE_LIB = -lm
Expand Down
316 changes: 316 additions & 0 deletions deps/openblas-symbol-rename.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,316 @@
diff --git a/Makefile.system b/Makefile.system
index d2ff741..ec6339d 100644
--- a/Makefile.system
+++ b/Makefile.system
@@ -186,6 +186,8 @@ LD = $(CROSS_SUFFIX)ld
RANLIB = $(CROSS_SUFFIX)ranlib
NM = $(CROSS_SUFFIX)nm
DLLWRAP = $(CROSS_SUFFIX)dllwrap
+OBJCOPY = $(CROSS_SUFFIX)objcopy
+OBJCONV = $(CROSS_SUFFIX)objconv

#
# OS dependent settings
@@ -845,6 +847,14 @@ else
LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
endif

+ifndef SYMBOLPREFIX
+SYMBOLPREFIX =
+endif
+
+ifndef SYMBOLSUFFIX
+SYMBOLSUFFIX =
+endif
+
KERNELDIR = $(TOPDIR)/kernel/$(ARCH)

include $(TOPDIR)/Makefile.$(ARCH)
diff --git a/exports/Makefile b/exports/Makefile
index c798bc7..9ed5a0f 100644
--- a/exports/Makefile
+++ b/exports/Makefile
@@ -88,12 +88,17 @@ dll : ../$(LIBDLLNAME)
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive $(FEXTRALIB) $(EXTRALIB)

libopenblas.def : gensymbol
- perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
+ perl ./gensymbol win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)

libgoto_hpl.def : gensymbol
- perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
+ perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)

+ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
$(LIBDYNNAME) : ../$(LIBNAME) osx.def
+else
+$(LIBDYNNAME) : ../$(LIBNAME) osx.def objconv.def
+ $(OBJCONV) @objconv.def ../$(LIBNAME)
+endif
$(FC) $(FFLAGS) -all_load -headerpad_max_install_names -install_name $(CURDIR)/../$(LIBDYNNAME) -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)

dllinit.$(SUFFIX) : dllinit.c
@@ -103,7 +108,12 @@ ifeq ($(OSNAME), Linux)

so : ../$(LIBSONAME)

+ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
../$(LIBSONAME) : ../$(LIBNAME) linktest.c
+else
+../$(LIBSONAME) : ../$(LIBNAME) linktest.c objcopy.def
+ $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME)
+endif
ifneq ($(C_COMPILER), LSB)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
@@ -125,7 +135,12 @@ ifeq ($(OSNAME), $(filter $(OSNAME),FreeBSD NetBSD))

so : ../$(LIBSONAME)

+ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
../$(LIBSONAME) : ../$(LIBNAME) linktest.c
+else
+../$(LIBSONAME) : ../$(LIBNAME) linktest.c objcopy.def
+ $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME)
+endif
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
-Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \
$(FEXTRALIB) $(EXTRALIB)
@@ -178,17 +193,23 @@ static : ../$(LIBNAME)
rm -f goto.$(SUFFIX)

osx.def : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
+ perl ./gensymbol osx $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)

aix.def : gensymbol ../Makefile.system ../getarch.c
- perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > $(@F)
+ perl ./gensymbol aix $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)
+
+objcopy.def : gensymbol ../Makefile.system ../getarch.c
+ perl ./gensymbol objcopy $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)
+
+objconv.def : gensymbol ../Makefile.system ../getarch.c
+ perl ./gensymbol objconv $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > $(@F)

test : linktest.c
$(CC) $(CFLAGS) $(LDFLAGS) -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) $(NEED2UNDERSCORES) $(ONLY_CBLAS) > linktest.c
+ perl ./gensymbol linktest $(ARCH) $(BU) $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" > linktest.c

clean ::
@rm -f *.def *.dylib __.SYMDEF*
diff --git a/exports/gensymbol b/exports/gensymbol
index bcea836..8bd2f17 100644
--- a/exports/gensymbol
+++ b/exports/gensymbol
@@ -2784,22 +2784,26 @@ $bu = $ARGV[2];

$bu = "" if (($bu eq "0") || ($bu eq "1"));

+$symbolprefix = $ARGV[9];
+
+$symbolsuffix = $ARGV[10];
+
if ($ARGV[0] eq "osx"){

@underscore_objs = (@underscore_objs, @misc_common_objs);
@no_underscore_objs = (@no_underscore_objs, @misc_common_objs);

foreach $objs (@underscore_objs) {
- print "_", $objs, $bu, "\n";
+ print "_", $symbolprefix, $objs, $bu, $symbolsuffix, "\n";
}

foreach $objs (@need_2underscore_objs) {
- print "_", $objs, $bu, $bu, "\n";
+ print "_", $symbolprefix, $objs, $bu, $bu, $symbolsuffix, "\n";
}

# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
- print "_", $objs, "\n";
+ print "_", $symbolprefix, $objs, $symbolsuffix, "\n";
}
# }
exit(0);
@@ -2811,16 +2815,58 @@ if ($ARGV[0] eq "aix"){
@no_underscore_objs = (@no_underscore_objs, @misc_common_objs);

foreach $objs (@underscore_objs) {
- print $objs, $bu, "\n";
+ print $symbolprefix, $objs, $bu, $symbolsuffix, "\n";
+ }
+
+ foreach $objs (@need_2underscore_objs) {
+ print $symbolprefix, $objs, $bu, $bu, $symbolsuffix, "\n";
+ }
+
+# if ($ARGV[4] == 0) {
+ foreach $objs (@no_underscore_objs) {
+ print $symbolprefix, $objs, $symbolsuffix, "\n";
+ }
+# }
+ exit(0);
+}
+
+if ($ARGV[0] eq "objcopy"){
+
+ @underscore_objs = (@underscore_objs, @misc_common_objs);
+ @no_underscore_objs = (@no_underscore_objs, @misc_common_objs);
+
+ foreach $objs (@underscore_objs) {
+ print $objs, $bu, " ", $symbolprefix, $objs, $bu, $symbolsuffix, "\n";
+ }
+
+ foreach $objs (@need_2underscore_objs) {
+ print $objs, $bu, $bu, " ", $symbolprefix, $objs, $bu, $bu, $symbolsuffix, "\n";
+ }
+
+# if ($ARGV[4] == 0) {
+ foreach $objs (@no_underscore_objs) {
+ print $objs, " ", $symbolprefix, $objs, $symbolsuffix, "\n";
+ }
+# }
+ exit(0);
+}
+
+if ($ARGV[0] eq "objconv"){
+
+ @underscore_objs = (@underscore_objs, @misc_common_objs);
+ @no_underscore_objs = (@no_underscore_objs, @misc_common_objs);
+
+ foreach $objs (@underscore_objs) {
+ print "-nr:_", $objs, $bu, ":_", $symbolprefix, $objs, $bu, $symbolsuffix, "\n";
}

foreach $objs (@need_2underscore_objs) {
- print $objs, $bu, $bu, "\n";
+ print "-nr:_", $objs, $bu, $bu, ":_", $symbolprefix, $objs, $bu, $bu, $symbolsuffix, "\n";
}

# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
- print $objs, "\n";
+ print "-nr:_", $objs, ":_", $symbolprefix, $objs, $symbolsuffix, "\n";
}
# }
exit(0);
@@ -2835,22 +2881,22 @@ if ($ARGV[0] eq "win2k"){
foreach $objs (@underscore_objs) {
$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t$objs=$objs","_ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, $symbolsuffix, "=$objs","_ \@", $count, "\n";
$count ++;
- print "\t",$objs, "_=$objs","_ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, "_", $symbolsuffix, "=$objs","_ \@", $count, "\n";
$count ++;
- print "\t$uppercase=$objs", "_ \@", $count, "\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, "=$objs", "_ \@", $count, "\n";
$count ++;
}

foreach $objs (@need_2underscore_objs) {
$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t$objs=$objs","__ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, $symbolsuffix, "=$objs","__ \@", $count, "\n";
$count ++;
- print "\t",$objs, "__=$objs","__ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, "__", $symbolsuffix, "=$objs","__ \@", $count, "\n";
$count ++;
- print "\t$uppercase=$objs", "__ \@", $count, "\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, "=$objs", "__ \@", $count, "\n";
$count ++;
}

@@ -2859,15 +2905,15 @@ if ($ARGV[0] eq "win2k"){

$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t",$objs, "_=$objs","_ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, "_", $symbolsuffix, "=$objs","_ \@", $count, "\n";
$count ++;
- print "\t$uppercase=$objs", "_ \@", $count, "\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, "=$objs", "_ \@", $count, "\n";
$count ++;
}


foreach $objs (@no_underscore_objs) {
- print "\t",$objs,"=$objs"," \@", $count, "\n";
+ print "\t",$symbolprefix,$objs,$symbolsuffix,"=$objs"," \@", $count, "\n";
$count ++;
}

@@ -2880,11 +2926,11 @@ if ($ARGV[0] eq "win2khpl"){
foreach $objs (@hplobjs) {
$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t$objs=$objs","_ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, $symbolsuffix, "=$objs","_ \@", $count, "\n";
$count ++;
- print "\t",$objs, "_=$objs","_ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, "_", $symbolsuffix, "=$objs","_ \@", $count, "\n";
$count ++;
- print "\t$uppercase=$objs", "_ \@", $count, "\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, "=$objs", "_ \@", $count, "\n";
$count ++;
}

@@ -2905,24 +2951,24 @@ if ($ARGV[0] eq "microsoft"){
foreach $objs (@underscore_objs) {
$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t$objs = $objs","_\n";
+ print "\t",$symbolprefix, $objs, $symbolsuffix, " = $objs","_\n";
$count ++;
- print "\t$objs\_ = $objs","_\n";
+ print "\t",$symbolprefix, $objs, "\_", $symbolsuffix, " = $objs","_\n";
$count ++;
- print "\t$uppercase = $objs","_\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, " = $objs","_\n";
$count ++;
- print "\t$uppercase\_ = $objs","_\n";
+ print "\t",$symbolprefix, $uppercase, "\_", $symbolsuffix, " = $objs","_\n";
$count ++;
}

foreach $objs (@need_2underscore_objs) {
$uppercase = $objs;
$uppercase =~ tr/[a-z]/[A-Z]/;
- print "\t$objs=$objs","__ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, $symbolsuffix, "=$objs","__ \@", $count, "\n";
$count ++;
- print "\t",$objs, "__=$objs","__ \@", $count, "\n";
+ print "\t",$symbolprefix, $objs, "__", $symbolsuffix, "=$objs","__ \@", $count, "\n";
$count ++;
- print "\t$uppercase=$objs", "__ \@", $count, "\n";
+ print "\t",$symbolprefix, $uppercase, $symbolsuffix, "=$objs", "__ \@", $count, "\n";
$count ++;
}

@@ -2936,16 +2982,16 @@ if ($ARGV[0] eq "linktest"){

print "int main(void){\n";
foreach $objs (@underscore_objs) {
- print $objs, $bu, "();\n" if $objs ne "xerbla";
+ print $symbolprefix, $objs, $bu, $symbolsuffix, "();\n" if $objs ne "xerbla";
}

foreach $objs (@need_2underscore_objs) {
- print $objs, $bu, $bu, "();\n";
+ print $symbolprefix, $objs, $bu, $bu, $symbolsuffix, "();\n";
}

# if ($ARGV[4] == 0) {
foreach $objs (@no_underscore_objs) {
- print $objs, "();\n";
+ print $symbolprefix, $objs, $symbolsuffix, "();\n";
}
# }

0 comments on commit 85180c0

Please sign in to comment.