From af8e0f1443fa0136c2d77c716fd20909242d7017 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Mon, 4 Jul 2016 22:30:20 +0100 Subject: [PATCH] AllwmakeParseArguments: Moved all parallel processing options into wmake and added support for queue scheduling option '-q', '-queue' Now the 'Allwmake' scripts execute 'wmake -all' to handle parallel processing in a general way, avoiding code duplication. --- wmake/scripts/AllwmakeParseArguments | 120 ++++++--------------------- wmake/wmake | 59 +++++++++---- 2 files changed, 70 insertions(+), 109 deletions(-) diff --git a/wmake/scripts/AllwmakeParseArguments b/wmake/scripts/AllwmakeParseArguments index 334a435ac5..c4108abcec 100644 --- a/wmake/scripts/AllwmakeParseArguments +++ b/wmake/scripts/AllwmakeParseArguments @@ -28,9 +28,6 @@ # Allwmake argument parser # # Usage -# # Declare genDoc and set to default if documentation building is supported -# genDoc=0 # 0 or 1 -# # # Parse the arguments by sourcing this script # . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments # @@ -46,118 +43,51 @@ usage() { Usage: $Script [OPTIONS] -options: - -h or -help Print list of Allwmake options - -k or -non-stop Compile without stopping when errors occur - -j Compile using all local cores/hyperthreads - -jN or -j N Compile using N cores/hyperthreads - -no-scheduler Compile without wmakeScheduler - -update Update lnInclude directories, dep files, remove deprecated - files and directories +Executing $Script is equivalent to + + wmake -all [OPTIONS] USAGE - # Print options for building code documentation - test -n "$genDoc" && cat< /dev/null 2>&1 \ - && shift && export WM_NCOMPPROCS=$1 - echo "Compiling enabled on $WM_NCOMPPROCS cores" + # Check if called from wmake to avoid recusion + -fromWmake) + fromWmake="fromWmake" ;; - # Parallel compilation on specified number of cores - -j*) - export WM_NCOMPPROCS=${1#-j} - echo "Compiling enabled on $WM_NCOMPPROCS cores" - ;; - # Non-stop compilation, ignoring errors - -k | -non-stop) - export WM_CONTINUE_ON_ERROR=1 - ;; - # Disable scheduled parallel compilation - -no-scheduler) - unset WM_SCHEDULER - ;; - # Meant to be used following a pull, this will: - # - remove dep files that depend on deleted files; - # - remove stale dep files; - # - update lnInclude directories; - # - remove empty directories, along with deprecated object directories - # and respective binaries. - -update) - wrmdep -update - wrmdep -old - wmakeLnIncludeAll - wclean empty - - # Set WM_UPDATE_DEPENDENCIES, so that wmake will pick up on it - export WM_UPDATE_DEPENDENCIES=yes - ;; - # Generate documentation - doc) - test -n "$genDoc" || usage "invalid option '$1'" - genDoc=1 - ;; - # Specify target type + # Target type lib | libo | libso | dep | objects) - targetType=$1 - ;; - --) - shift - break - ;; - -* | *) - usage "invalid option '$1'" + targetType=$arg ;; esac - shift done +#------------------------------------------------------------------------------ +# Execute wmake -all if not called from wmake +#------------------------------------------------------------------------------ + +if [ -z "$fromWmake" ] +then + wmake -all $* +fi + + #------------------------------------------------------------------------------ # If WM_CONTINUE_ON_ERROR not set activate the shell option "stop on error" #------------------------------------------------------------------------------ @@ -172,7 +102,7 @@ fi # Cleanup local variables and functions #------------------------------------------------------------------------------ -unset Script usage setWM_NCOMPPROCS +unset Script usage fromWmake #------------------------------------------------------------------------------ diff --git a/wmake/wmake b/wmake/wmake index 89ed794399..9ac7a102a3 100755 --- a/wmake/wmake +++ b/wmake/wmake @@ -102,12 +102,30 @@ USAGE make="make" +#------------------------------------------------------------------------------ +# Set WM_NCOMPPROCS to number of cores on local machine +#------------------------------------------------------------------------------ + +useAllCores() +{ + if [ -r /proc/cpuinfo ] + then + WM_NCOMPPROCS=$(egrep "^processor" /proc/cpuinfo | wc -l) + else + WM_NCOMPPROCS=1 + fi + + export WM_NCOMPPROCS +} + + #------------------------------------------------------------------------------ # Parse arguments and options #------------------------------------------------------------------------------ # Default to compiling the local target only all= +update= while [ "$#" -gt 0 ] do @@ -127,7 +145,7 @@ do ;; # Parallel compilation on all cores of local machine -j) - setWM_NCOMPPROCS + useAllCores test $# -ge 2 && expr $2 + 1 > /dev/null 2>&1 \ && shift && export WM_NCOMPPROCS=$1 echo "Compiling enabled on $WM_NCOMPPROCS cores" @@ -152,16 +170,7 @@ do # - remove empty directories, along with deprecated object directories # and respective binaries. -update) - wrmdep -update - wrmdep -old - if [ -n "$WM_NCOMPPROCS" ] - then - wmakeLnIncludeAll -j$WM_NCOMPPROCS - else - wmakeLnIncludeAll - fi - wclean empty - export WM_UPDATE_DEPENDENCIES=yes + update="true" [ -z "$all" ] && all="all" ;; --) @@ -264,6 +273,27 @@ then fi +#------------------------------------------------------------------------------ +# Recurse the source tree to compile "all" targets +#------------------------------------------------------------------------------ + +if [ -n "$update" ] +then + wrmdep -update + wrmdep -old + if [ -n "$WM_NCOMPPROCS" ] + then + wmakeLnIncludeAll -j$WM_NCOMPPROCS + else + wmakeLnIncludeAll + fi + wclean empty + export WM_UPDATE_DEPENDENCIES=yes +fi + +unset update + + #------------------------------------------------------------------------------ # Recurse the source tree to compile "all" targets #------------------------------------------------------------------------------ @@ -272,7 +302,7 @@ if [ "$all" = "all" ] then if [ -e Allwmake ] then - ./Allwmake $targetType + ./Allwmake -fromWmake $targetType exit $? else # Have to keep track of the main exit code for the call to "make" @@ -310,7 +340,6 @@ fi # Recurse the source tree to compile "all" targets using wmakeQueue #------------------------------------------------------------------------------ -#scheduler="wmakeQueue" scheduler="wmakeCollect" if [ "$all" = "queue" ] @@ -326,6 +355,8 @@ then exit $? fi +unset scheduler + #------------------------------------------------------------------------------ # Search up the directory tree for the Make sub-directory, @@ -496,7 +527,7 @@ exec $make -f $WM_DIR/makefiles/general MAKE_DIR=$MakeDir \ # Cleanup local variables and functions #------------------------------------------------------------------------------ -unset Script usage expandPath findTarget +unset Script usage useAllCores update expandPath findTarget #------------------------------------------------------------------------------