From: Tony Kelman Date: Sat, 25 Oct 2014 05:27:00 +0000 (-0700) Subject: add SYMBOLPREFIX and SYMBOLSUFFIX makefile options X-Git-Tag: v0.2.13~1^2~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0b4602b753812100abb556f9c84c600231b6a940;p=platform%2Fupstream%2Fopenblas.git add SYMBOLPREFIX and SYMBOLSUFFIX makefile options for adding a prefix or suffix to all exported symbol names in the shared library Useful to avoid conflicts with other BLAS libraries, especially when using 64 bit integer interfaces in OpenBLAS Note that since OSX does not have the objcopy utility, setting these options to non-empty values on Mac requires the objconv tool, available (GPL license) from http://www.agner.org/optimize/#objconv --- 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..f2f6881 100644 --- a/exports/Makefile +++ b/exports/Makefile @@ -88,12 +88,18 @@ 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 +../$(LIBNAME).renamed : ../$(LIBNAME) objconv.def + $(OBJCONV) @objconv.def ../$(LIBNAME) ../$(LIBNAME).renamed +$(LIBDYNNAME) : ../$(LIBNAME).renamed osx.def +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,16 +109,22 @@ ifeq ($(OSNAME), Linux) so : ../$(LIBSONAME) +ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX)) ../$(LIBSONAME) : ../$(LIBNAME) linktest.c +else +../$(LIBNAME).renamed : ../$(LIBNAME) objcopy.def + $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME) ../$(LIBNAME).renamed +../$(LIBSONAME) : ../$(LIBNAME).renamed linktest.c +endif ifneq ($(C_COMPILER), LSB) $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \ - -Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \ + -Wl,--whole-archive $< -Wl,--no-whole-archive \ -Wl,-soname,$(LIBPREFIX).so.$(MAJOR_VERSION) $(EXTRALIB) $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK. else #for LSB env LSBCC_SHAREDLIBS=gfortran $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \ - -Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \ + -Wl,--whole-archive $< -Wl,--no-whole-archive \ -Wl,-soname,$(LIBPREFIX).so.$(MAJOR_VERSION) $(EXTRALIB) $(FC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK. endif @@ -125,9 +137,15 @@ ifeq ($(OSNAME), $(filter $(OSNAME),FreeBSD NetBSD)) so : ../$(LIBSONAME) +ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX)) ../$(LIBSONAME) : ../$(LIBNAME) linktest.c +else +../$(LIBNAME).renamed : ../$(LIBNAME) objcopy.def + $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME) ../$(LIBNAME).renamed +../$(LIBSONAME) : ../$(LIBNAME).renamed linktest.c +endif $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \ - -Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive \ + -Wl,--whole-archive $< -Wl,--no-whole-archive \ $(FEXTRALIB) $(EXTRALIB) $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK. rm -f linktest @@ -178,17 +196,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"; } # }