doc-update-local:
@:
+# Need to be here so it comes after the definition of DEP_DIRS/DEP_LIBS
+gen-deps:
+ @echo "$(DEPS_TARGET_DIR): $(DEP_DIRS) $(DEP_LIBS)" >> $(DEPS_FILE)
# All the dep files now land in the same directory so we
# munge in the library name to keep the files from clashing.
+# All dependent libs become dependent dirs for parallel builds
+# Have to rename to handle differences between assembly/directory names
+DEP_LIBS=$(subst System.Xml,System.XML,$(subst System.Windows.Forms,Managed.Windows.Forms,$(LIB_REFS)))
+
sourcefile = $(LIBRARY).sources
# If the directory contains the per profile include file, generate list file.
$(MDOC_UP)
@echo "doc-stamp" > $@
+# Need to be here so it comes after the definition of DEP_DIRS/DEP_LIBS
+gen-deps:
+ @echo "$(DEPS_TARGET_DIR): $(DEP_DIRS) $(DEP_LIBS)" >> $(DEPS_FILE)
PROFILE_SUBDIRS = $(SUBDIRS)
endif
+# These subdirs can be built in parallel
+PROFILE_PARALLEL_SUBDIRS := $($(PROFILE)_PARALLEL_SUBDIRS)
+ifndef PROFILE_PARALLEL_SUBDIRS
+PROFILE_PARALLEL_SUBDIRS = $(PARALLEL_SUBDIRS)
+endif
+
ifndef FRAMEWORK_VERSION_MAJOR
FRAMEWORK_VERSION_MAJOR = $(basename $(FRAMEWORK_VERSION))
endif
list='$(PROFILE_SUBDIRS)'; for d in $$list ; do \
(cd $$d && $(MAKE) $*) || { final_exit="exit 1"; $$dk; } ; \
done; \
+ if [ $* = "all" -a -n "$(PROFILE_PARALLEL_SUBDIRS)" ]; then \
+ $(MAKE) do-all-parallel ENABLE_PARALLEL_SUBDIR_BUILD=1 || { final_exit="exit 1"; $$dk; } ; \
+ else \
+ list='$(PROFILE_PARALLEL_SUBDIRS)'; for d in $$list ; do \
+ (cd $$d && $(MAKE) $*) || { final_exit="exit 1"; $$dk; } ; \
+ done; \
+ fi; \
$$final_exit
+#
+# Parallel build support
+#
+# The variable $(PROFILE)_PARALLEL_SUBDIRS should be set to the list of directories
+# which could be built in parallel. These directories are built after the directories in
+# $(PROFILE)_SUBDIRS.
+# Parallel building is currently only supported for the 'all' target.
+#
+# Each directory's Makefile may define DEP_LIBS and DEP_DIRS to specify the libraries and
+# directories it depends on.
+#
+# It would be nice to reduce the duplication between DEP_LIBS and LIB_MCS_FLAGS, but
+# there are too many special cases
+# (System.Windows.Forms/Managed.Windows.Forms,System.Xml/System.XML) etc.
+ifneq ($(PROFILE_PARALLEL_SUBDIRS),)
+dep_dirs = .dep_dirs-$(PROFILE)
+$(dep_dirs):
+ @echo "Creating $@..."
+ list='$(PROFILE_PARALLEL_SUBDIRS)'; \
+ echo > $@; \
+ for d in $$list; do \
+ $(MAKE) -C $$d gen-deps DEPS_TARGET_DIR=$$d DEPS_FILE=$(abspath $@); \
+ done
+-include $(dep_dirs)
+endif
+
+.PHONY: gen-deps
+# The gen-deps target is in library.make/executable.make so it can pick up
+# DEP_LIBS/DEP_DIRS
+
+clean-dep-dir:
+ $(RM) $(dep_dirs)
+
+clean-local: clean-dep-dir
+
+ifdef ENABLE_PARALLEL_SUBDIR_BUILD
+.PHONY: do-all-parallel $(PROFILE_PARALLEL_SUBDIRS)
+
+do-all-parallel: $(PROFILE_PARALLEL_SUBDIRS)
+
+$(PROFILE_PARALLEL_SUBDIRS):
+ @set . $$MAKEFLAGS; \
+ cd $@ && $(MAKE)
+endif
+
ifndef DIST_SUBDIRS
DIST_SUBDIRS = $(SUBDIRS) $(DIST_ONLY_SUBDIRS)
endif
System.Core \
Mono.Security \
System.Security \
- System.Configuration \
- I18N \
+ System.Configuration \
$(resgen_dir) \
System.Drawing \
System.Transactions \
System.Configuration.Install \
System.Management \
System.Data.OracleClient \
- Microsoft.VisualC \
Cscompmgd \
- PEAPI \
Commons.Xml.Relaxng \
- Novell.Directory.Ldap \
- Mono.Security.Win32 \
- System.DirectoryServices \
- System.DirectoryServices.Protocols \
- RabbitMQ.Client \
Mono.Messaging \
System.Messaging \
- Mono.Messaging.RabbitMQ \
System.ServiceProcess \
System.Drawing.Design \
System.Design \
ICSharpCode.SharpZipLib \
- Mono.Http \
- Mono.Cairo \
IBM.Data.DB2 \
CustomMarshalers \
- Mono.Cecil \
- Mono.Cecil.Mdb \
- Mono.Debugger.Soft \
SystemWebTestShim \
System.Xml.Linq \
System.Runtime.Serialization \
- System.Data.DataSetExtensions \
System.Data.Linq \
System.Web.Abstractions \
System.Web.Routing \
System.Web.Extensions \
System.Web.Extensions.Design \
System.Web.DynamicData \
- Mono.C5 \
- Mono.Management \
- Mono.Options \
- Mono.Simd \
- Mono.Tasklets \
- System.Dynamic \
Mono.CSharp \
System.Net \
System.Json \
- System.Numerics \
Microsoft.CSharp \
- System.Windows.Forms.DataVisualization \
System.Xaml \
WindowsBase \
System.ServiceModel.Activation \
System.ServiceModel.Discovery \
System.Runtime.Caching \
System.Runtime.DurableInstancing \
+ Microsoft.Web.Infrastructure \
+ System.ServiceModel.Web \
+ System.Net.Http \
+ System.Net.Http.WebRequest \
+ System.Web.Razor \
+ System.Web.WebPages.Deployment \
+ System.Web.WebPages \
+ System.Web.WebPages.Razor \
+ System.Web.Mvc3 \
+ System.Net.Http.Formatting \
+ System.Web.Http \
+ System.Web.Http.SelfHost \
+ System.Web.Http.WebHost
+
+# These are the subdirs which depends on libs in net_4_5_dirs
+# or have proper dependencies between each other
+net_4_5_parallel_dirs := \
+ PEAPI \
+ I18N \
+ Mono.Http \
+ Mono.Cairo \
+ Mono.Cecil \
+ Mono.Cecil.Mdb \
+ Mono.Debugger.Soft \
+ Mono.C5 \
+ Mono.Management \
+ Mono.Options \
+ Mono.Simd \
+ Mono.Tasklets \
+ Mono.CodeContracts \
Mono.Parallel \
+ Mono.Security.Win32 \
+ Mono.Messaging.RabbitMQ \
+ System.Dynamic \
+ System.Windows.Forms.DataVisualization \
System.Reactive.Interfaces \
System.Reactive.Core \
System.Reactive.Linq \
System.Reactive.Observable.Aliases \
System.Reactive.Experimental \
System.Reactive.Debugger \
- Microsoft.Web.Infrastructure \
- WebMatrix.Data \
- System.ServiceModel.Web \
System.Data.Services.Client \
System.Data.Services \
- System.Json.Microsoft \
System.Data.Entity \
- monodoc \
+ System.Data.DataSetExtensions \
+ System.Json.Microsoft \
System.Threading.Tasks.Dataflow \
System.ComponentModel.Composition.4.5 \
- System.Net.Http \
- System.Net.Http.WebRequest \
- System.Web.Razor \
- System.Web.WebPages.Deployment \
- System.Web.WebPages \
- System.Web.WebPages.Razor \
- System.Web.Mvc3 \
- System.Net.Http.Formatting \
- System.Web.Http \
- System.Web.Http.SelfHost \
- System.Web.Http.WebHost \
- Mono.CodeContracts \
System.IO.Compression \
System.IO.Compression.FileSystem \
System.Windows \
System.Xml.Serialization \
+ System.Numerics \
+ Novell.Directory.Ldap \
+ System.DirectoryServices \
+ System.DirectoryServices.Protocols \
+ RabbitMQ.Client \
+ Microsoft.VisualC \
+ WebMatrix.Data \
+ monodoc \
$(pcl_facade_dirs)
xbuild_2_0_dirs := \
mobile_SUBDIRS := $(mobile_dynamic_dirs)
xammac_SUBDIRS := $(xammac_dirs)
net_4_0_SUBDIRS := reference-assemblies
-net_4_5_SUBDIRS := $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
+net_4_5_SUBDIRS := $(net_4_5_dirs) $(xbuild_4_0_dirs)
+net_4_5_PARALLEL_SUBDIRS := $(net_4_5_parallel_dirs) aot-compiler
xbuild_12_SUBDIRS := $(xbuild_4_0_dirs)
xbuild_14_SUBDIRS := $(xbuild_4_0_dirs)
activation = $(the_libdir_base)System.ServiceModel.Activation.dll
servicemodel_deps = $(activation)
-ifneq (plainservice/,$(intermediate))
LIB_REFS += System.ServiceModel.Activation
-LIB_MCS_FLAGS += -define:HAS_ACTIVATION -r:System.ServiceModel.Activation.dll
LIB_REFS += System.Web.ApplicationServices
+
+ifneq (plainservice/,$(intermediate))
+LIB_MCS_FLAGS += -define:HAS_ACTIVATION -r:System.ServiceModel.Activation.dll
LIB_MCS_FLAGS += -r:System.Web.ApplicationServices.dll
endif
endif
symbolicate
build_SUBDIRS = gacutil security culevel
-net_4_5_SUBDIRS := $(net_4_5_dirs)
+net_4_5_SUBDIRS = gacutil
+net_4_5_PARALLEL_SUBDIRS = $(net_4_5_dirs)
SUBDIRS = $(basic_SUBDIRS) $(net_4_5_dirs)
thisdir = tools/tuner
SUBDIRS =
+DEP_DIRS = linker
include ../../build/rules.make
CECIL = $(topdir)/class/lib/$(PROFILE)/Mono.Cecil.dll