summaryrefslogtreecommitdiff
path: root/libstdc++/config/aix.ml
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++/config/aix.ml')
-rw-r--r--libstdc++/config/aix.ml35
1 files changed, 28 insertions, 7 deletions
diff --git a/libstdc++/config/aix.ml b/libstdc++/config/aix.ml
index dec7a905a34..5d6b6b245eb 100644
--- a/libstdc++/config/aix.ml
+++ b/libstdc++/config/aix.ml
@@ -1,9 +1,30 @@
-# AIX has wierd shared/non-shared libraries.
+# AIX has weird shared/non-shared libraries.
-ARLIB = libstdc++-ar.a.$(VERSION)
-ARLINK = libstdc++-ar.a
-SHLINK = libstdc++.a
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-DEPLIBS = ../$(SHLIB)
+ARLIB =
+ARLINK =
+
+# Build shared object with interface versioning in name.
+# Archive resulting shared object in a library.
+AIXLINK = libstdc++.a
+AIXLIB = libstdc++-$(VERSION).a
+AIXSHLIB = shr$(LIBSTDCXX_INTERFACE)$(CXX_INTERFACE).o
+SHFLAGS = -Wl,-bexpall
SHDEPS = -lm
-SHFLAGS = -Wl,-unix
+SHOPT = -shared
+
+LIBS = $(AIXLIB) $(AIXLINK)
+
+$(AIXSHLIB): stdlist
+ $(CC) $(LIBCXXFLAGS) $(SHFLAGS) $(SHOPT) -o $(AIXSHLIB) `cat stdlist` $(SHDEPS)
+
+# Delete $(AIXSHLIB) so that it is not included in stdlist if rebuilding.
+$(AIXLIB): $(AIXSHLIB)
+ -rm -f t$(AIXLIB)
+ $(AR) $(AR_FLAGS) t$(AIXLIB) $(AIXSHLIB)
+ mv t$(AIXLIB) $(AIXLIB)
+ -rm -f $(AIXSHLIB)
+
+$(AIXLINK):
+ -rm -f $(AIXLINK)
+ $(LN_S) $(AIXLIB) $(AIXLINK) || cp $(AIXLIB) $(AIXLINK)
+