diff --git a/deps/Makefile b/deps/Makefile index 81363f2584b6f..8de79e16e20b5 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -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 @@ -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) @@ -1032,6 +1036,18 @@ 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) +ARPACK_FFLAGS += $(foreach fcn, $(ARPACK_OPENBLASFCNS1) $(ARPACK_OPENBLASFCNS2), -Dd$(fcn)=d$(fcn)_64) +ARPACK_FFLAGS += $(foreach fcn, $(ARPACK_OPENBLASFCNS1) $(ARPACK_OPENBLASFCNS3), -Dc$(fcn)=c$(fcn)_64) +ARPACK_FFLAGS += $(foreach fcn, $(ARPACK_OPENBLASFCNS1) $(ARPACK_OPENBLASFCNS3), -Dz$(fcn)=z$(fcn)_64) +ARPACK_FFLAGS += -Dscnrm2=scnrm2_64 -Ddznrm2=dznrm2_64 -Dcsscal=csscal_64 -Dzdscal=zdscal_64 +endif +endif endif endif @@ -1287,8 +1303,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 diff --git a/deps/openblas-symbol-rename.patch b/deps/openblas-symbol-rename.patch new file mode 100644 index 0000000000000..2ae87f1ad1faf --- /dev/null +++ b/deps/openblas-symbol-rename.patch @@ -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"; + } + # } +