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

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 $(LCC1) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.cpp to Output/X.bc
Output/%.bc: %.cpp $(LCC1XX) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.cc to Output/X.bc
Output/%.bc: %.cc $(LCC1XX) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.C to Output/X.bc
Output/%.bc: %.C $(LCC1XX) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.m to Output/X.bc
Output/%.bc: %.m $(LCC1) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGCC) $(CPPFLAGS) $(CFLAGS) $(LOPTFLAGS) $(TARGET_FLAGS) -c $< -o $@ -emit-llvm

# Compile from X.mm to Output/X.bc
Output/%.bc: %.mm $(LCC1XX) Output/.dir $(INCLUDES)
	@echo Compiling $(notdir $<) to $@
	-$(VERB) $(LLVMGXX) $(CPPFLAGS) $(CXXFLAGS) $(LOPTFLAGS) $(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) -f $< -o $@

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

%: %.c

%.o: %.c

%.o: %.m

%.o: %.mm
