make/lib/LibCommon.gmk
changeset 49440 396ea30afbd5
parent 49261 d5c43e9f08fb
child 50126 98f57dff16f3
child 56421 92bea2b7732a
--- a/make/lib/LibCommon.gmk	Wed Mar 28 21:00:09 2018 +0200
+++ b/make/lib/LibCommon.gmk	Wed Mar 28 23:56:08 2018 +0200
@@ -36,8 +36,31 @@
 # elegant solution to this.
 WIN_JAVA_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
 
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx windows), )
-  DISABLE_MAPFILES := true
+# Tell the compiler not to export any functions unless declared so in
+# the source code. On Windows, this is the default and cannot be changed.
+# On Mac, we have always exported all symbols, probably due to oversight
+# and/or misunderstanding. To emulate this, don't hide any symbols
+# by default.
+# Also provide an override for non-conformant libraries.
+ifeq ($(TOOLCHAIN_TYPE), gcc)
+  CFLAGS_JDKLIB += -fvisibility=hidden
+  CXXFLAGS_JDKLIB += -fvisibility=hidden
+  LDFLAGS_JDKLIB += -Wl,--exclude-libs,ALL
+  EXPORT_ALL_SYMBOLS := -fvisibility=default
+else ifeq ($(TOOLCHAIN_TYPE), clang)
+  ifneq ($(OPENJDK_TARGET_OS), macosx)
+    CFLAGS_JDKLIB += -fvisibility=hidden
+    CXXFLAGS_JDKLIB += -fvisibility=hidden
+    EXPORT_ALL_SYMBOLS := -fvisibility=default
+  endif
+else ifeq ($(TOOLCHAIN_TYPE), solstudio)
+  CFLAGS_JDKLIB += -xldscope=hidden
+  CXXFLAGS_JDKLIB += -xldscope=hidden
+  EXPORT_ALL_SYMBOLS := -xldscope=global
+else ifeq ($(TOOLCHAIN_TYPE), xlc)
+  CFLAGS_JDKLIB += -qvisibility=hidden
+  CXXFLAGS_JDKLIB += -qvisibility=hidden
+  EXPORT_ALL_SYMBOLS := -qvisibility=default
 endif
 
 ################################################################################