Files
harbour-core/harbour/config/dos/dir.cf
Przemyslaw Czerpak 23ee7ce5f0 2009-01-30 20:19 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* 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
2009-01-30 19:15:26 +00:00

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