##----------------------------------------------------------*- 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

TOOLS    = $(LLVMTOOLCURRENT)

# LLVM Tool Definitions...
#
LCC      = $(LLVMGCC)   ## FIXME: remove these definitions, use LLVMGCC directly
LCXX     = $(LLVMGXX)   ## FIXME: remove these definitions, use LLVMGXX directly
LAS      = $(LLVMAS)    ## FIXME: remove these definitions, use LLVMAS directly

LLI      = $(TOOLS)/lli
LLC      = $(TOOLS)/llc
LGCCAS   = $(TOOLS)/gccas
LGCCLD   = $(TOOLS)/gccld -L$(LLVMGCCDIR)/lib/gcc/$(LLVMGCCARCH) -L$(LLVMGCCDIR)/lib
LGCCLDPROG = $(TOOLS)/gccld
LDIS     = $(TOOLS)/llvm-dis 
LOPT     = $(TOOLS)/opt
LLINK    = $(TOOLS)/llvm-link
LANALYZE = $(TOOLS)/analyze
LBUGPOINT= $(TOOLS)/bugpoint

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

# Native Tool Definitions
NATGCC  = $(CC)
CP	= /bin/cp -f

## If TRACE or TRACEM is "yes", set the appropriate llc flag (-trace or -tracem)
## mark that tracing on, and set the TRACELIBS variable.
TRACEFLAGS = 
ifeq ($(TRACE), yes)
    TRACEFLAGS = -trace
    TRACELIBS := -L$(LEVEL)/test/Libraries/Output -linstr.$(ARCH)
endif

ifeq ($(TRACEM), yes)
    TRACEFLAGS = -tracem
    TRACELIBS := -L$(LEVEL)/test/Libraries/Output -linstr.$(ARCH)
endif

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)
	$(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@

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

# Compile from X.cc to Output/X.ll
Output/%.ll: %.cc $(LCC1XX) Output/.dir $(INCLUDES)
	$(LCXX) $(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 $(LAS) Output/.dir
	$(LAS) -f $< -o $@

#
# Testing versions of provided utilities...
#
Output/%.tll: %.c $(LCC1) Output/.dir $(INCLUDES)
	@echo "======== Compiling $<"
	$(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ || \
	    ( rm -f $@; $(FAILURE) $@ )

Output/%.tll: %.cpp $(LCC1XX) Output/.dir $(INCLUDES)
	@echo "======== Compiling $<"
	$(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ || \
	    ( rm -f $@; $(FAILURE) $@ )

Output/%.tbc: Output/%.tll $(LAS)
	@echo "======== Assembling $<"
	$(LAS) -f $< -o $@ || \
            ( rm -f $@; $(FAILURE) $@ )


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

%: %.c

%.o: %.c

