| VMJC := $(ToolDir)/vmjc$(EXEEXT) |
| |
| ############################################################################### |
| # VMKIT_RUNTIME: Provide rules to build a .cpp file with LLVM instructions |
| # generating code matching the .ll files. |
| ############################################################################### |
| |
| ifdef VMKIT_RUNTIME |
| |
| .PRECIOUS: LLVMRuntime.inc |
| |
| LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME) |
| $(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)" |
| $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) -march=cpp -cppgen=contents -o $@ |
| |
| all-local:: LLVMRuntime.inc |
| |
| clean-local:: |
| $(Verb) $(RM) -f LLVMRuntime.inc |
| |
| endif |
| |
| ############################################################################### |
| # VMJC_ASSEMBLY: Provide rules to build glibj.zip.s. |
| ############################################################################### |
| |
| 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) -disable-cfi -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 |
| |
| ############################################################################### |
| # RUN_ANT: Provide rules to build MMTk into a .o file and inlining facilities. |
| ############################################################################### |
| |
| ifdef RUN_ANT |
| |
| MMTkLib = $(LibDir)/libFinalMMTk.a |
| |
| ifeq ($(shell [ ! -e $(MMTkLib) ] && echo "1"), 1) |
| COMPILE_MMTK = 1 |
| endif |
| |
| ifeq ($(COMPILE_MMTK), 1) |
| 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 -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -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 |
| $(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) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $(LibDir)/FinalMMTk.bc |
| $(Verb) $(MKDIR) $(ObjDir) |
| $(Verb) $(LLC) -disable-fp-elim -disable-cfi -disable-debug-info-print -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s |
| $(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o |
| $(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o |
| $(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a |
| $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc |
| $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc |
| $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc |
| $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc |
| endif |
| |
| clean-local:: |
| $(Verb) $(RM) -rf classes $(JARNAME).jar $(JARNAME).bc $(JARNAME)-optimized.bc $(ObjDir) |
| endif |
| |
| ############################################################################### |
| # MODULE_WITH_GC: Provide rules for building .cpp files into an archive with |
| # GC symbol information. |
| ############################################################################### |
| |
| ifdef MODULE_WITH_GC |
| |
| ObjectsBCWithGC := $(BaseNameSources:%=$(ObjDir)/%_gc.bc) |
| ObjectsSWithGC := $(BaseNameSources:%=$(ObjDir)/%_gc.s) |
| ObjectsWithGC := $(BaseNameSources:%=$(ObjDir)/%_gc.o) |
| AModule := $(LibDir)/lib$(MODULE_WITH_GC).a |
| |
| $(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT) |
| $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" |
| $(Verb) $(LOPT) $< -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $@ |
| |
| $(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC) |
| $(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build" |
| $(Verb) $(LLC) -disable-cfi -disable-fp-elim -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $< -o $@ |
| |
| $(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir |
| $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) |
| $(Verb) $(Compile.C) $< -o $@ |
| |
| $(AModule): $(ObjectsWithGC) $(LibDir)/.dir |
| $(Echo) Building $(BuildMode) Archive Library $(notdir $@) |
| -$(Verb) $(RM) -f $@ |
| $(Verb) $(Archive) $@ $(ObjectsWithGC) |
| $(Verb) $(Ranlib) $@ |
| |
| all-local:: $(AModule) |
| |
| clean-local:: |
| -$(Verb) $(RM) -f $(AModule) $(ObjectsBCWithGC) $(ObjectsSWithGC) $(ObjectsWithGC) |
| |
| endif |
| |
| ############################################################################### |
| # BUILD_FRAMETABLE: Generate files for easy access of frametables at runtime. |
| ############################################################################### |
| |
| ifdef BUILD_FRAMETABLE |
| |
| FrametablesExterns.inc: $(ProjLibsPaths) |
| $(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > $@ |
| |
| FrametablesSymbols.inc: $(ProjLibsPaths) |
| $(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > $@ |
| |
| all-local:: FrametablesExterns.inc FrametablesSymbols.inc |
| |
| clean-local:: |
| -$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc |
| |
| endif |