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

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
