#
# 1. LEVEL - Must be set as per normal semantics: The depth from the top of tree
# 2. LIBNAME - Name of library to link together. Forms lib<LIBNAME>.bc
+# 3. EXPORTED_SYMBOL_LIST - If this symbol is defined, it contains a comma
+# separated list of symbols that are exported by the library. All other
+# symbols are marked internal, reducing namespace pollution.
#
DESTLIBDIR := $(LEVEL)/test/Libraries/Output
.PRECIOUS: $(LObjects)
+# If the library specified a list of symbols to export, add an internalize pass
+# to the link options.
+ifdef EXPORTED_SYMBOL_LIST
+LLINK_OPTS += -internalize -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
+endif
+
# Link the library, then perform postlink optimization...
-$(DESTLIBNAME): $(DESTLIBDIR)/.dir $(LObjects)
+$(DESTLIBNAME): $(DESTLIBDIR)/.dir $(LObjects) $(LLINK) $(LOPT)
$(LLINK) -f $(LObjects) $(LDFLAGS) | \
- $(LOPT) -f -funcresolve -deadtypeelim -globaldce -o $@
+ $(LOPT) -f -q -funcresolve -deadtypeelim $(LLINK_OPTS) -globaldce -o $@
# Install target for libraries: Copy into the gcc install directory.
#