diff options
author | dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-09 20:48:48 +0000 |
---|---|---|
committer | dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-09 20:48:48 +0000 |
commit | 4c87b50c790029271d24922011793f5e219ecef7 (patch) | |
tree | 10510d74a5813885f41938cf584b9c70b5f0e1b3 /libgcc/config/rs6000 | |
parent | 57687d8b3d8c6255f9bb8ba02e02281bafe695e4 (diff) | |
download | gcc-4c87b50c790029271d24922011793f5e219ecef7.tar.gz |
2014-12-09 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
(libgcc_s) Optional filename-based shared library versioning on AIX.
* gcc/doc/install.texi: Describe --with-aix-soname option.
* Makefile.in (with_aix_soname): Define.
* config/rs6000/t-slibgcc-aix: Act upon --with-aix-soname option.
* configure.ac: Accept --with-aix-soname=aix|svr4|both option.
* configure: Recreate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218539 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc/config/rs6000')
-rw-r--r-- | libgcc/config/rs6000/t-slibgcc-aix | 82 |
1 files changed, 66 insertions, 16 deletions
diff --git a/libgcc/config/rs6000/t-slibgcc-aix b/libgcc/config/rs6000/t-slibgcc-aix index 288c2c9a4aa..2de307e91cc 100644 --- a/libgcc/config/rs6000/t-slibgcc-aix +++ b/libgcc/config/rs6000/t-slibgcc-aix @@ -16,24 +16,74 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. -# Build a shared libgcc library. -SHLIB_EXT = .a -SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ - -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/shr.o \ - @multilib_flags@ @shlib_objs@ -lc \ - `case @multilib_dir@ in \ - *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \ - *) echo -lc ;; esac` ; \ - rm -f @multilib_dir@/tmp-@shlib_base_name@.a ; \ - $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-@shlib_base_name@.a \ - @multilib_dir@/shr.o ; \ - mv @multilib_dir@/tmp-@shlib_base_name@.a \ - @multilib_dir@/@shlib_base_name@.a ; \ - rm -f @multilib_dir@/shr.o +# Build a shared libgcc library according to --with-aix-soname selection: +# aix-soname=aix: +# libgcc_s.a(shr.o) # traditional (-bnortl) +# +# aix-soname=both: +# libgcc_s.a(shr.o) # traditional (-bnortl) +# libgcc_s.so.1(shrXX.o,shrXX.imp) # the SONAME (-G) +# libgcc_s.so -> libgcc_s.so.1 # the symlink +# +# aix-soname=svr4: +# libgcc_s.so.1(shrXX.o,shrXX.imp) # the SONAME (-G) +# libgcc_s.so -> libgcc_s.so.1 # the symlink +SHLIB_EXT_aix = .a +SHLIB_EXT_both = .so +SHLIB_EXT_svr4 = .so +SHLIB_EXT = $(SHLIB_EXT_$(with_aix_soname)) +SHLIB_SOVERSION = 1 +SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION) +SHLIB_LINK = \ + if test svr4 != $(with_aix_soname) ; then \ + $(CC) $(LIBGCC2_CFLAGS) -shared -Wl,-bnortl -nodefaultlibs \ + -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/shr.o \ + @multilib_flags@ @shlib_objs@ -lc \ + `case @multilib_dir@ in \ + *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \ + *) echo -lc ;; esac` ; \ + rm -f @multilib_dir@/tmp-@shlib_base_name@.a ; \ + $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-@shlib_base_name@.a \ + @multilib_dir@/shr.o ; \ + mv @multilib_dir@/tmp-@shlib_base_name@.a \ + @multilib_dir@/@shlib_base_name@.a ; \ + rm -f @multilib_dir@/shr.o ; \ + fi ; \ + if test aix != $(with_aix_soname) ; then \ + case @multilib_dir@ in *64*) shr='shr_64' ;; *) shr='shr' ;; esac ; \ + $(CC) $(LIBGCC2_CFLAGS) -shared -Wl,-G -nodefaultlibs \ + -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/$$shr.o \ + @multilib_flags@ @shlib_objs@ -lc \ + `case @multilib_dir@ in \ + *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \ + *) echo -lc ;; esac` ; \ + $(STRIP_FOR_TARGET) -X32_64 -e @multilib_dir@/$$shr.o ; \ + { echo "\#! $(SHLIB_SONAME)($$shr.o)" ; \ + case @multilib_dir@ in *64*) echo '\# 64' ;; *) echo '\# 32' ;; esac ; \ + cat @shlib_map_file@ ; \ + } > @multilib_dir@/$$shr.imp ; \ + rm -f @multilib_dir@/tmp-$(SHLIB_SONAME) ; \ + $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-$(SHLIB_SONAME) \ + @multilib_dir@/$$shr.imp @multilib_dir@/$$shr.o ; \ + mv @multilib_dir@/tmp-$(SHLIB_SONAME) \ + @multilib_dir@/$(SHLIB_SONAME) ; \ + rm -f @multilib_dir@/@shlib_base_name@.so ; \ + $(LN_S) $(SHLIB_SONAME) @multilib_dir@/@shlib_base_name@.so ; \ + rm -f @multilib_dir@/$$shr.imp @multilib_dir@/$$shr.o ; \ + fi SHLIB_INSTALL = \ $(mkinstalldirs) $(DESTDIR)$(slibdir)@shlib_slibdir_qual@; \ - $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.a \ - $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/ + if test svr4 != $(with_aix_soname) ; then \ + $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.a \ + $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/ ; \ + fi ; \ + if test aix != $(with_aix_soname) ; then \ + $(INSTALL_DATA) @multilib_dir@/$(SHLIB_SONAME) \ + $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/ ; \ + rm -f $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so ; \ + $(LN_S) $(SHLIB_SONAME) \ + $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so ; \ + fi SHLIB_LIBS = -lc `case @multilib_dir@ in *pthread*) echo -lpthread ;; esac` SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk SHLIB_MAPFILES = libgcc-std.ver |