aix: xlc: Use -Wl,-b,expfull for old compiler versions
authorAndres Freund <[email protected]>
Tue, 13 Sep 2022 17:55:03 +0000 (10:55 -0700)
committerAndres Freund <[email protected]>
Fri, 16 Sep 2022 15:46:36 +0000 (08:46 -0700)
Unfortunately xlc 12.1 and earlier don't support -qvisibility. Therefore
be7c15b194a doesn't suffice to make extension libraries work without the
explicit mkldexport step removed in fe6a64a58ab. While 12.1 is EOL, there is
some desire to leave buildfarm animals using it run a bit longer. But instead
of adding back the complicated mkldexport step, we can use -Wl,-b,expfull to
force all symbols to be exported.

Reviewed-By: Tom Lane <[email protected]>
Discussion: https://postgr.es/m/2490844.1663123546@sss.pgh.pa.us

configure
configure.ac

index f325bd85b88c73809dc2714dd77c18b27cac9aa5..67ddeb87c8624caa07fc3ec956c30bdb3c895ff3 100755 (executable)
--- a/configure
+++ b/configure
@@ -7101,6 +7101,11 @@ if test x"$pgac_cv_prog_CXX_cxxflags__qvisibility_hidden" = x"yes"; then
 fi
 
   have_visibility_attribute=$pgac_cv_prog_CC_cflags__qvisibility_hidden
+  # Old xlc versions (<13.1) don't have support for -qvisibility. Use expfull to force
+  # all extension module symbols to be exported.
+  if test "$pgac_cv_prog_CC_cflags__qvisibility_hidden" != "yes"; then
+    CFLAGS_SL_MODULE="$CFLAGS_SL_MODULE -Wl,-b,expfull"
+  fi
 fi
 
 if test "$have_visibility_attribute" = "yes"; then
index 7792ae5bad34cbcbf0e1131ca999fb7f3b17e0db..6b1b30d07a629a43aae3ee683bdc1c93b521523e 100644 (file)
@@ -592,6 +592,11 @@ elif test "$PORTNAME" = "aix"; then
   PGAC_PROG_CC_VAR_OPT(CFLAGS_SL_MODULE, [-qvisibility=hidden])
   PGAC_PROG_VARCXX_VARFLAGS_OPT(CXX, CXXFLAGS_SL_MODULE, [-qvisibility=hidden])
   have_visibility_attribute=$pgac_cv_prog_CC_cflags__qvisibility_hidden
+  # Old xlc versions (<13.1) don't have support for -qvisibility. Use expfull to force
+  # all extension module symbols to be exported.
+  if test "$pgac_cv_prog_CC_cflags__qvisibility_hidden" != "yes"; then
+    CFLAGS_SL_MODULE="$CFLAGS_SL_MODULE -Wl,-b,expfull"
+  fi
 fi
 
 if test "$have_visibility_attribute" = "yes"; then