#
# Set this variable to the top of the LLVM source tree.
#
LLVM_SRC_ROOT = @LLVM_SRC@

#
# Set this variable to the top level directory where LLVM was built
# (this is *not* the same as OBJ_ROOT as defined in LLVM's Makefile.config).
#
LLVM_OBJ_ROOT = @LLVM_OBJ@

#
# Include LLVM's Master Makefile.
#
include $(LLVM_SRC_ROOT)/Makefile.common

#
# Extra rules and information for building bytecode libraries.
#
ifdef BCNAME

#
# Location of the LLVM Tools
#
TOOLS    = $(LLVM_OBJ_ROOT)/tools/$(CONFIGURATION)

#
# LLVM Tool Definitions...
#
LCC      = $(LLVMGCCDIR)/bin/gcc
LCC1     = $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1
LCXX     = $(LLVMGCCDIR)/bin/g++
LCC1XX   = $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1plus
LLI      = $(TOOLS)/lli
LLC      = $(TOOLS)/llc
LAS      = $(TOOLS)/as
LGCCAS   = $(TOOLS)/gccas
LGCCLD   = $(TOOLS)/gccld -L$(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH) -L$(LLVMGCCDIR)/lib
LGCCLDPROG = $(TOOLS)/gccld
LDIS     = $(TOOLS)/dis 
LOPT     = $(TOOLS)/opt
LLINK    = $(TOOLS)/link
LANALYZE = $(TOOLS)/analyze
LBUGPOINT= $(TOOLS)/bugpoint

LCCFLAGS  += -O2 -Wall
LCXXFLAGS += -O2 -Wall

#
# Declare the following suffixes
#
.SUFFIXES: .bc,.ll

DESTLIBDIR  := $(LEVEL)/bytecode/$(CONFIGURATION)
DESTLIBNAME := $(DESTLIBDIR)/lib$(BCNAME).bc

all:: $(DESTLIBNAME)

# Figure out what object files we want to build...
LObjs    := $(sort $(addsuffix .bc, $(basename $(Source))))
LObjects := $(addprefix $(CONFIGURATION)/, $(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)
	$(VERB) $(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)
	$(VERB) cp $(DESTLIBNAME) $(INSTALL_DIR)

#
# Rules for building bytecode libraries
#
$(CONFIGURATION)/%.bc: $(CONFIGURATION)/%.ll $(CONFIGURATION)/.dir
	$(VERB) echo "Assembling " $<
	$(VERB) $(LAS) -f $< -o $@

$(CONFIGURATION)/%.ll: %.c $(CONFIGURATION)/.dir
	$(VERB) echo "Compiling " $<
	$(VERB) $(LLVMGCCDIR)/bin/gcc $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@
endif
