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

# TARGET_FLAGS can come in from the command line, and tests may add to them,
# so use an internal target name to combine them. Just using += to add to
# TARGET_FLAGS in the TEST.* makefiles doesn't work out.
X_TARGET_FLAGS = $(TARGET_FLAGS) $(TEST_TARGET_FLAGS)

ifeq ($(ARCH),XCore)
X_TARGET_FLAGS += $(XCORE_TARGET_FLAGS)
endif

STATS = -stats -time-passes

.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

FAILURE  = $(LLVM_SRC_ROOT)/test/Failure.sh
LLCLIBS := $(LLCLIBS) -lm

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

# Compile from X.c to Output/X.ll
Output/%.ll: %.c $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.cpp to Output/X.ll
Output/%.ll: %.cpp $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.cc to Output/X.ll
Output/%.ll: %.cc $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.C to Output/X.ll
Output/%.ll: %.C $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.m to Output/X.ll
Output/%.ll: %.m $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.mm to Output/X.ll
Output/%.ll: %.mm $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -S $< -o $@ $(LLVMCC_EMITIR_FLAG)

# Compile from X.ll to X.bc
%.bc: %.ll $(LLVMAS)
	-$(LLVMAS) $< -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) $< -o $@

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

%: %.c

%.o: %.c

%.o: %.m

%.o: %.mm
