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