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.so -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

