# test/Libraries/Makefile.libs # # This makefile should be used by subdirectories, which are libraries that are # to be compiled to llvm bytecode and linked together with a specified name. # # Variables to be defined before including this makefile: # # 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.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 DESTLIBNAME := $(LEVEL)/test/Libraries/Output/lib$(LIBNAME).bc all:: $(DESTLIBNAME) include $(LEVEL)/test/Makefile.tests # Figure out what object files we want to build... LObjs := $(sort $(addsuffix .bc, $(basename $(Source)))) LObjects := $(addprefix Output/,$(LObjs)) .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 # Standard set of postlink optimizations... LLINK_OPTS += -inline -globaldce -funcresolve -deadtypeelim -instcombine -simplifycfg # Link the library, then perform postlink optimization... $(DESTLIBNAME): $(DESTLIBDIR)/.dir $(LObjects) $(LLINK) $(LOPT) $(LLINK) -f $(LObjects) $(LDFLAGS) | \ $(LOPT) -f -q $(LLINK_OPTS) -o $@ # Install target for libraries: Copy into the gcc install directory. # INSTALL_DIR := $(LLVMGCCDIR)/bytecode-libs/ install:: $(DESTLIBNAME) cp $(DESTLIBNAME) $(INSTALL_DIR)