+# Does the library want an archive version built?
+ifdef BUILD_ARCHIVE
+all:: $(LIBNAME_ACUR)
+install:: install-archive-library
+endif
+
+#--------------------------------------------------------------------
+# Rules for building libraries
+#--------------------------------------------------------------------
+
+LinkBCLib := $(LLVMGCC) -shared -nostdlib
+ifdef EXPORTED_SYMBOL_LIST
+LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
+else
+ ifdef EXPORTED_SYMBOL_FILE
+LinkBCLib += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
+ else
+LinkBCLib += -Xlinker -disable-internalize
+ endif
+endif
+
+
+# Rule for building bytecode libraries.
+$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs) $(DESTLIBBYTECODE)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) bytecode library
+ $(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
+ @${ECHO} ======= Finished building $(LIBRARYNAME) bytecode library =======
+#
+# Rules for building dynamically linked libraries.
+#
+$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) dynamic release library
+ $(VERB) $(Link) -o $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
+ $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+ @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic release library =======
+
+$(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) dynamic profile library
+ $(VERB) $(Link) -o $*.la $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
+ $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+ @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic profile library =======
+
+$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) dynamic debug library
+ $(VERB) $(Link) -o $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
+ $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+ @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic debug library =======
+
+install-dynamic-library: $(LIBNAME_CUR)
+ $(MKDIR) $(DESTDIR)$(libdir)
+ $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_CUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+
+#
+# Rules for building static archive libraries.
+#
+$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) archive release library
+ @$(RM) -f $@
+ $(VERB) $(Link) -03 -o $@ $(ObjectsO) $(LibSubDirs) -static
+ @${ECHO} Finished building $(LIBRARYNAME) archive release library =======
+
+$(LIBNAME_AP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) archive profile library
+ @$(RM) -f $@
+ $(VERB) $(Link) -03 $(PROFILE) -o $@ $(ObjectsP) $(LibSubDirs) -static
+ @${ECHO} ======= Finished building $(LIBRARYNAME) archive profile library =======
+
+$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
+ @${ECHO} Linking $(LIBRARYNAME) archive debug library
+ @$(RM) -f $@
+ $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
+ @${ECHO} ======= Finished building $(LIBRARYNAME) archive debug library =======
+
+install-archive-library: $(LIBNAME_ACUR)
+ $(MKDIR) $(DESTDIR)$(libdir)
+ $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_ACUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a
+
+#
+# Rules for building .o libraries.
+#
+# JTC:
+# Note that for this special case, we specify the actual object files
+# instead of their libtool counterparts. This is because libtool
+# doesn't want to generate a reloadable object file unless it is given
+# .o files explicitly.
+#
+# Note that we're making an assumption here: If we build a .lo file,
+# it's corresponding .o file will be placed in the same directory.
+#
+# I think that is safe.
+#
+$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
+ @${ECHO} "Linking `basename $@`"
+ $(VERB) $(Relink) -o $@ $(RObjectsO) $(LibSubDirs)