##----------------------------------------------------------*- Makefile -*-===##
##
## Common rules for generating, linking, and compiling via LLVM.  This is
## used to implement a robust testing framework for LLVM
##
##-------------------------------------------------------------------------===##

# If the user specified a TEST= option on the command line, we do not want to do
# the default testing type.  Instead, we change the default target to be the
# test:: target.
#
ifdef TEST
test::
endif

# We do not want to make .d files for tests! 
DISABLE_AUTO_DEPENDENCIES=1

include ${LEVEL}/Makefile.common

# Specify ENABLE_STATS on the command line to enable -stats and -time-passes
# output from gccas and gccld.
ifdef ENABLE_STATS
STATS = -stats -time-passes
endif

.PHONY: clean default

# These files, which might be intermediate results, should not be deleted by
# make
.PRECIOUS: Output/%.bc  Output/%.ll
.PRECIOUS: Output/%.tbc Output/%.tll
.PRECIOUS: Output/.dir
.PRECIOUS: Output/%.llvm.bc
.PRECIOUS: Output/%.llvm

# Find the location of the platform specific LLVM GCC libraries
LLVMGCCLIBDIR=$(dir $(shell $(LLVMGCC) -print-file-name=libgcc.a))

# LLVM Tool Definitions (LLVMGCC, LLVMGXX, LLVMAS are provided by Makefile.rules)
LLI      = $(LLVMTOOLCURRENT)/lli$(EXEEXT)
LLC      = $(LLVMTOOLCURRENT)/llc$(EXEEXT)
LGCCAS   = $(LLVMTOOLCURRENT)/gccas$(EXEEXT)
LGCCLD   = $(LGCCLDPROG) -L$(LLVMGCCLIBDIR) -L$(LLVMGCCDIR)/lib \
                         -L$(LLVMGCCDIR)/bytecode-libs
LDIS     = $(LLVMTOOLCURRENT)/llvm-dis$(EXEEXT)
LOPT     = $(LLVMTOOLCURRENT)/opt$(EXEEXT)
LLINK    = $(LLVMTOOLCURRENT)/llvm-link$(EXEEXT)
LPROF    = $(LLVMTOOLCURRENT)/llvm-prof$(EXEEXT)
LANALYZE = $(LLVMTOOLCURRENT)/analyze$(EXEEXT)
LBUGPOINT= $(LLVMTOOLCURRENT)/bugpoint$(EXEEXT)

LCCFLAGS  += -O2 -Wall
LCXXFLAGS += -O2 -Wall
LLCFLAGS =
FAILURE  = $(LLVM_SRC_ROOT)/test/Failure.sh
TESTRUNR = @echo Running test: $<; \
             PATH=$(LLVMTOOLCURRENT):$(LLVM_SRC_ROOT)/test/Scripts:$(PATH) \
                  $(LLVM_SRC_ROOT)/test/TestRunner.sh

LLCLIBS := $(LLCLIBS) -lm

clean::
	$(RM) -f a.out core
	$(RM) -rf Output/

# Compile from X.c to Output/X.ll
Output/%.ll: %.c $(LCC1) Output/.dir $(INCLUDES)
	-$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@

# Compile from X.cpp to Output/X.ll
Output/%.ll: %.cpp $(LCC1XX) Output/.dir $(INCLUDES)
	-$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@

# Compile from X.cc to Output/X.ll
Output/%.ll: %.cc $(LCC1XX) Output/.dir $(INCLUDES)
	-$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@

# LLVM Assemble from Output/X.ll to Output/X.bc.  Output/X.ll must have come
# from GCC output, so use GCCAS.
#
Output/%.bc: Output/%.ll $(LGCCAS)
	-$(LGCCAS) $(STATS) $< -o $@

# LLVM Assemble from X.ll to Output/X.bc.  Because we are coming directly from
# LLVM source, use the non-transforming assembler.
#
Output/%.bc: %.ll $(LLVMAS) Output/.dir
	-$(LLVMAS) -f $< -o $@

## Cancel built-in implicit rules that override above rules
%: %.s

%: %.c

%.o: %.c

