Merge pull request #5002 from BrzVlad/feature-sgen-modes
[mono.git] / mcs / class / aot-compiler / Makefile
index ae44dfcb08921280cedc4b2a9e48e746738ed749..d070a293e3680d8ed0e22f05c90918f313f93dd2 100644 (file)
@@ -8,12 +8,25 @@ thisdir = class/aot-compiler
 
 include ../../build/rules.make
 
-the_libdir = $(topdir)/class/lib/$(PROFILE)/
+the_libdir = $(topdir)/class/lib/$(PROFILE_DIRECTORY)/
+CSC_DIR = $(dir $(CSC_LOCATION))
+# The directory where the AOT images are stored
+images_dir = $(the_libdir)
 
 # mcs.exe is only in the build profile, but the aot image should be compiled against the current
 # profile
-mcs_exe = $(topdir)/class/lib/build/mcs.exe
+mcs_exe = $(the_libdir)/mcs.exe
 mcs_aot_image = $(the_libdir)/mcs.exe$(PLATFORM_AOT_SUFFIX)
+csc_exe = $(CSC_LOCATION)
+csc_aot_image = $(images_dir)/csc.exe$(PLATFORM_AOT_SUFFIX)
+csc_MCS_dll = $(CSC_DIR)/Microsoft.CodeAnalysis.CSharp.dll
+csc_MCS_image = $(images_dir)/Microsoft.CodeAnalysis.CSharp.dll$(PLATFORM_AOT_SUFFIX)
+csc_MC_dll = $(CSC_DIR)/Microsoft.CodeAnalysis.dll
+csc_MC_image = $(images_dir)/Microsoft.CodeAnalysis.dll$(PLATFORM_AOT_SUFFIX)
+csc_SRM_dll = $(CSC_DIR)/System.Reflection.Metadata.dll
+csc_SRM_image = $(images_dir)/System.Reflection.Metadata.dll$(PLATFORM_AOT_SUFFIX)
+csc_SCI_dll = $(CSC_DIR)/System.Collections.Immutable.dll
+csc_SCI_image = $(images_dir)/System.Collections.Immutable.dll$(PLATFORM_AOT_SUFFIX)
 
 mscorlib_dll = $(the_libdir)/mscorlib.dll
 mscorlib_aot_image = $(mscorlib_dll)$(PLATFORM_AOT_SUFFIX)
@@ -25,42 +38,72 @@ runtime_dep = $(dir $(RUNTIME))/../mono/mini/mono
 PROGRAM_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
 LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
 
+LOG_FILE = $(PROFILE_DIRECTORY)_aot.log
+
 ifndef SKIP_AOT
 
+profile_file:=$(wildcard $(topdir)/class/lib/build/csc.*.aotprofile)
+ifneq ($(profile_file),)
+comma:=,
+space:=
+space+=
+profile_arg:=$(subst $(space)$(comma),$(comma),$(foreach pf,$(profile_file),$(comma)profile=$(strip $(pf))))
+endif
+
 ifdef PLATFORM_AOT_SUFFIX
-Q_AOT=$(if $(V),,@echo "AOT     [$(PROFILE)] $(notdir $(@))";)
 $(mcs_aot_image): $(mcs_exe) $(mscorlib_dll) $(runtime_dep)
-       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(PROFILE)_aot.log 2>&1 $(RUNTIME) --aot=bind-to-runtime-version,outfile=$(mcs_aot_image) --debug $(mcs_exe) || cat $(PROFILE)_aot.log || (cat $(PROFILE)_aot.log; exit 1)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(mcs_aot_image) --debug $(mcs_exe) || cat $(LOG_FILE) || (cat $(LOG_FILE); exit 1)
+
+$(csc_aot_image): $(csc_exe) $(mscorlib_dll) $(runtime_dep)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(csc_aot_image) --debug $(csc_exe) || cat $(LOG_FILE) || (cat $(LOG_FILE); exit 1)
 
 $(mscorlib_aot_image): $(mscorlib_dll) $(runtime_dep)
-       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(PROFILE)_aot.log 2>&1 $(RUNTIME) --aot=bind-to-runtime-version --debug $(mscorlib_dll) || (cat $(PROFILE)_aot.log; exit 1)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg) --debug $(mscorlib_dll) || (cat $(LOG_FILE); exit 1)
+
+$(csc_MC_image): $(csc_MC_dll) $(runtime_dep)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(csc_MC_image) --debug $(csc_MC_dll) || (cat $(LOG_FILE); exit 1)
+
+$(csc_MCS_image): $(csc_MCS_dll) $(runtime_dep)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(csc_MCS_image) --debug $(csc_MCS_dll) || (cat $(LOG_FILE); exit 1)
+
+$(csc_SRM_image): $(csc_SRM_dll) $(runtime_dep)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(csc_SRM_image) --debug --apply-bindings=$(csc_exe).config $(csc_SRM_dll) || (cat $(LOG_FILE); exit 1)
+
+$(csc_SCI_image): $(csc_SCI_dll) $(runtime_dep)
+       $(Q_AOT) MONO_PATH='$(the_libdir)' > $(LOG_FILE) 2>&1 $(RUNTIME) --aot=bind-to-runtime-version$(profile_arg),outfile=$(csc_SCI_image) --debug $(csc_SCI_dll) || (cat $(LOG_FILE); exit 1)
 
 ifdef ENABLE_AOT
 
+CSC_IMAGES = $(csc_aot_image) $(csc_SRM_image) $(csc_SCI_image) $(csc_MC_image) $(csc_MCS_image)
+
 clean-local:
-       -rm -f $(mscorlib_aot_image) $(mcs_aot_image) $(PROFILE)_aot.log
+       -rm -f $(mscorlib_aot_image) $(mcs_aot_image) $(CSC_IMAGES) $(LOG_FILE)
 
-# AOT build profile mcs to speed up build
+# AOT build profile to speed up build
 ifeq ($(PROFILE),build)
-all-local: $(mscorlib_aot_image) $(mcs_aot_image)
-install-local:
+
+IMAGES = $(mscorlib_aot_image)
+
+ifdef MCS_MODE
+IMAGES += $(mcs_aot_image)
+else
+IMAGES += $(CSC_IMAGES)
 endif
 
-ifeq ($(PROFILE), $(DEFAULT_PROFILE))
-all-local: $(mscorlib_aot_image) $(mcs_aot_image)
+all-local: $(IMAGES)
 install-local:
-       $(MKINSTALLDIRS) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-       $(INSTALL_LIB) $(mscorlib_aot_image) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-       $(INSTALL_LIB) $(mcs_aot_image) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
+
 endif
 
-# No mcs in net 2.0
-MSCORLIB_PROFILE := $(filter net_2_0, $(PROFILE))
-ifdef MSCORLIB_PROFILE
-all-local: $(mscorlib_aot_image)
+ifeq ($(PROFILE), $(DEFAULT_PROFILE))
+
+IMAGES = $(mscorlib_aot_image) $(mcs_aot_image) $(CSC_IMAGES)
+
+all-local: $(IMAGES)
 install-local:
        $(MKINSTALLDIRS) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-       $(INSTALL_LIB) $(mscorlib_aot_image) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
+       $(INSTALL_LIB) $(IMAGES) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
+
 endif
 
 endif