##----------------------------------------------------------*- 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.bc
Output/%.bc: %.c $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.cpp to Output/X.bc
Output/%.bc: %.cpp $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.cc to Output/X.bc
Output/%.bc: %.cc $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.C to Output/X.bc
Output/%.bc: %.C $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.m to Output/X.bc
Output/%.bc: %.m $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.mm to Output/X.bc
Output/%.bc: %.mm $(LCC_PROGRAMS) Output/.dir $(INCLUDES)
	-$(LCXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(X_TARGET_FLAGS) -c $< -o $@ -emit-llvm

# 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
