* harbour/make_gcc.mak
! added additional rules to fix time conditions in parallel compilation
* harbour/config/dos/dir.cf
* harbour/config/w32/dir.cf
* changed simple assignments to recursive ones
* harbour/config/dir.cf
+ added support for dependencies between build directories for
parallel execution. If compilation of dirX needs results of
dirY and dirZ compilation then it hsould be declared as:
dirX{dirY,dirZ}
% process directories defined in DIRS simultaneously when -j<N>
GNU make switch is used - it gives additional speed improvement
on multi CPU machines
* harbour/Makefile
* harbour/source/Makefile
* set directory dependencies for parallel compilation
The parallel compilation can be enabled by using -j<n> GNU make
switch on multiprocess platforms, f.e.:
./gnu_make.sh -j3
It should give some speed improvement even on single CPU machines.
These are results of clean Harbour compilation on my 3 phantom CPU
computer:
1. leaner compilation without -j<n> 6m29.895s
2. parallel compilation with -j5 but without
parallel directory processing 3m20.163s
3. parallel compilation with -j5 and with new
parallel directory processing 2m6.168s
41 lines
803 B
CFEngine3
41 lines
803 B
CFEngine3
#
|
|
# $Id$
|
|
#
|
|
|
|
ifeq ($(PM),) # Only traverse directories if not compiling a specific module
|
|
|
|
ifeq ($(DIRS),) # Empty directory list
|
|
|
|
DIR_RULE = @echo Done
|
|
|
|
else
|
|
|
|
ifeq ($(SHLVL),) # COMMAND.COM
|
|
|
|
# We have to use script to overcome the DOS limit of max 128 characters
|
|
# NOTE: The empty line directly before 'endef' HAVE TO exist!
|
|
# It causes that every commands will be separated by LF
|
|
define dir_mk
|
|
$(DIR_MAKE) -C $(file) $@
|
|
|
|
endef
|
|
|
|
DIR_LIST = $(subst /,\,$(DIRS))
|
|
DIR_MAKE = $(subst /,\,$(MK))
|
|
DIR_RULE = $(foreach file, $(DIR_LIST), $(dir_mk))
|
|
|
|
else # bash
|
|
DIR_LIST = $(subst \,/,$(DIRS))
|
|
DIR_RULE =\
|
|
sh -c "for d in $(DIR_LIST); do \
|
|
if [ -d $$d ]; then \
|
|
$(MAKE) -C $$d $@; \
|
|
fi \
|
|
done"
|
|
|
|
endif # ! COMMAND.COM
|
|
|
|
endif # ! Empty directory list
|
|
|
|
endif # ! compiling a specific program module
|