ifdef VMKIT_RUNTIME


.PRECIOUS: LLVMRuntime.inc

# All of these files depend on tblgen and the .td files.
LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME)

LLVMRuntime.gen.ll : $(VMKIT_RUNTIME)
	$(Verb) cat $(VMKIT_RUNTIME) > LLVMRuntime.gen.ll

LLVMRuntime.inc : LLVMRuntime.gen.ll
	$(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)"
	$(Verb) $(LLVMAS) -f $(<F) -o - | $(LLC) -march=cpp -cppgen=contents -o $@


clean-local::
	$(Verb) $(RM) -f LLVMRuntime.inc LLVMRuntime.gen.ll LLVMRuntime.bc

endif

ifdef VMKIT_ASSEMBLY

.PRECIOUS: LLVMAssembly.s

LLVMAssembly.o : $(LLVMAS) $(LLC) $(VMKIT_ASSEMBLY)

LLVMAssembly.gen.ll : $(VMKIT_ASSEMBLY)
	$(Verb) cat $(VMKIT_ASSEMBLY) > LLVMAssembly.gen.ll

LLVMAssembly.s : LLVMAssembly.gen.ll
	$(Echo) "Building LLVM assembly with $(VMKIT_ASSEMBLY)"
	$(Verb) $(LLVMAS) -f $(<F) -o - | $(LLC) -o $@

$(ObjDir)/%.lo $(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.s for $(BuildMode) build " $(PIC_FLAG)
	$(Verb) $(GAS) $< -o $(ObjDir)/$*.o

clean-local::
	$(Verb) $(RM) -f LLVMAssembly.s LLVMAssembly.bc LLVMAssembly.gen.ll

endif

ifndef VMJC
VMJC      := $(ToolDir)/vmjc$(EXEEXT)
endif


ifdef VMJC_ASSEMBLY

.PRECIOUS: glibj.zip.s

glibj.zip.s : $(LOPT) $(LLC) $(VMJC)


glibj.zip.bc :
	$(Echo) "Compiling glibj.zip to llvm"
	$(Verb) if test -d $(GLIBJ); then \
	  $(VMJC) -f -std-compile-opts $(GLIBJ)/glibj.zip -o glibj.zip.bc; \
	else \
	  $(VMJC) -f -std-compile-opts $(GLIBJ) -o glibj.zip.bc; \
	fi
	
glibj-optimized.zip.bc : glibj.zip.bc
	$(Echo) "Optimizing glibj.zip"
	$(Verb) $(LOPT) -std-compile-opts -f glibj.zip.bc -o glibj-optimized.zip.bc

glibj.zip.s : glibj-optimized.zip.bc
	$(Echo) "Compiling glibj.zip.bc to native"
	$(Verb) $(LLC) -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s

$(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
	$(Verb) $(Compile.C) $< -o $(ObjDir)/$*.o

clean-local::
	$(Verb) $(RM) -f glibj.zip.s glibj.zip.bc glibj-optimized.zip.bc
endif



ifdef VMKIT_BUILD_ARCHIVE

LibName.A := $(LibDir)/lib$(VMKIT_LIBRARYNAME).a

all-local:: $(LibName.A)

$(LibName.A): $(ProjLibsPaths) $(LibDir)/.dir
	$(Echo) Building $(BuildMode) Archive Library $(notdir $@)
	-$(Verb) $(RM) -f $@
	$(Verb) $(Archive) $@ $(ProjLibsPaths)
	$(Verb) $(Ranlib) $@

clean-local::
ifneq ($(strip $(LibName.A)),)
	-$(Verb) $(RM) -f $(LibName.A)
endif

endif



ifdef MODULESNAME
ifdef USEDMODULES

ProjLibsPaths   := $(addprefix $(LibDir)/,$(USEDMODULES))

$(MODULESNAME).bc : $(ProjLibsPaths)
	$(Echo) Building $(BuildMode) Bytecode Module $(notdir $@)
	$(Verb) $(LLVMLD) -link-as-library -o $@ $(ProjLibsPaths)

$(MODULESNAME).s : $(MODULESNAME).bc
	$(Echo) Building $(BuildMode) Assembly file $(notdir $@)
	$(Verb) $(LOPT) -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -f $(MODULESNAME).bc -o vmkitoptimized.bc
	$(Verb) $(LLC) -disable-fp-elim vmkitoptimized.bc -o $(MODULESNAME).s

$(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
	$(Verb) $(Compile.C) $< -o $(ObjDir)/$*.o

clean-local::
	$(Verb) $(RM) -f vmkitoptimized.bc $(MODULESNAME).bc $(MODULESNAME).s

endif
endif

ifdef RUN_ANT
ifdef ANT

ifneq ($(DISABLE_MMTK_COMPILE), 1)
  ADDITIONAL_ARGS := -load-bc=$(LibDir)/MMTKRuntime.bc 

  all::
	$(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml
	$(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@)
	$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc
	$(Verb) $(VMJC) -std-compile-opts $(ADDITIONAL_ARGS) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled -llvm-lazy
	$(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
	$(Verb) $(LLVMLD) -r -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
	$(Verb) $(LOPT) -std-compile-opts $(LibDir)/FinalMMTk.bc -o $(LibDir)/FinalMMTk.bc
	#$(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/config/$(MMTK_PLAN)/MMTkInline.inc
endif

endif
clean-local::
	$(Verb) $(RM) -rf classes $(JARNAME).jar $(JARNAME).bc $(JARNAME)-optimized.bc
endif
