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 -f -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) -f -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 -f 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) -L$(CFERuntimeLibDir) -r -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 -f 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

ADDITIONAL_ARGS := -load-bc=$(LibDir)/MMTKRuntime.bc 

all::
	$(Verb) $(ANT)
	$(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)/MMTKFake$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic -verify $(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=vmkit.properties -disable-stubs -assume-compiled
	$(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

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