From a8e6fee001085c52fd1084bd4bf00a8c0a027cac Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 5 Dec 2015 15:06:01 +0800 Subject: [PATCH 1/4] Enable multiple jobs for when build from source --- nvm.sh | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/nvm.sh b/nvm.sh index 2abcc39..d919e06 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1231,6 +1231,30 @@ nvm_install_node_source() { make='gmake' MAKE_CXX="CXX=c++" fi + + if [ "_$NVM_OS" = "_linux" ]; then + CPU_THREADS="$(grep -c 'core id' /proc/cpuinfo)" + elif [ "_$NVM_OS" = "_freebsd" ] || [ "_$NVM_OS" = "_darwin" ]; then + CPU_THREADS="$(sysctl -n hw.ncpu)" + elif [ "_$NVM_OS" = "_sunos" ]; then + CPU_THREADS="$(psrinfo | wc -l)" + fi + local CPU_THREAD_VALID + CPU_THREAD_VALID=$(nvm_is_natural_num $CPU_THREADS) + if [ -z "$CPU_THREADS" ] || [ "$CPU_THREAD_VALID" != "true" ] ; then + echo "Can not determine how many thread(s) we can use, set to only 1 now." 1>&2 + echo "Please report an issue on GitHub to help us make it better and run it faster on your computer!" 1>&2 + MAKE_JOBS="1" + else + echo "Detected that you have $CPU_THREADS CPU thread(s)" + if [ $CPU_THREADS -gt 2 ]; then + MAKE_JOBS=$(($CPU_THREADS - 1)) + echo "Set the number of jobs to $CPU_THREADS - 1 = $MAKE_JOBS jobs to speed up the build" + else + MAKE_JOBS=1 + echo "Number of CPU thread(s) less or equal to 2 will have only one job a time for 'make'" + fi + fi local tmpdir tmpdir="$NVM_DIR/src" local tmptarball @@ -1252,9 +1276,9 @@ nvm_install_node_source() { command tar -xzf "$tmptarball" -C "$tmpdir" && \ cd "$tmpdir/node-$VERSION" && \ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \ - $make $MAKE_CXX && \ + $make -j $MAKE_JOBS $MAKE_CXX && \ command rm -f "$VERSION_PATH" 2>/dev/null && \ - $make $MAKE_CXX install + $make -j $MAKE_JOBS $MAKE_CXX install ) then if ! nvm_has "npm" ; then @@ -1430,6 +1454,16 @@ nvm_sanitize_path() { echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g" } +nvm_is_natural_num() { + echo $1 | command egrep -q '^[0-9]{1,}$' &> /dev/null + local IS_NATURAL_NUM=$? + if [ "$IS_NATURAL_NUM" = "0" ]; then + echo true + else + echo false + fi +} + nvm() { if [ $# -lt 1 ]; then nvm help From 6320719dd893914f575c60279b71a0796f5644f4 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 5 Dec 2015 15:22:06 +0800 Subject: [PATCH 2/4] Support parameter -j to set jobs for make --- nvm.sh | 57 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/nvm.sh b/nvm.sh index d919e06..7f7ddf2 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1232,27 +1232,29 @@ nvm_install_node_source() { MAKE_CXX="CXX=c++" fi - if [ "_$NVM_OS" = "_linux" ]; then - CPU_THREADS="$(grep -c 'core id' /proc/cpuinfo)" - elif [ "_$NVM_OS" = "_freebsd" ] || [ "_$NVM_OS" = "_darwin" ]; then - CPU_THREADS="$(sysctl -n hw.ncpu)" - elif [ "_$NVM_OS" = "_sunos" ]; then - CPU_THREADS="$(psrinfo | wc -l)" - fi - local CPU_THREAD_VALID - CPU_THREAD_VALID=$(nvm_is_natural_num $CPU_THREADS) - if [ -z "$CPU_THREADS" ] || [ "$CPU_THREAD_VALID" != "true" ] ; then - echo "Can not determine how many thread(s) we can use, set to only 1 now." 1>&2 - echo "Please report an issue on GitHub to help us make it better and run it faster on your computer!" 1>&2 - MAKE_JOBS="1" - else - echo "Detected that you have $CPU_THREADS CPU thread(s)" - if [ $CPU_THREADS -gt 2 ]; then - MAKE_JOBS=$(($CPU_THREADS - 1)) - echo "Set the number of jobs to $CPU_THREADS - 1 = $MAKE_JOBS jobs to speed up the build" + if [ -z "$MAKE_JOBS" ]; then + if [ "_$NVM_OS" = "_linux" ]; then + CPU_THREADS="$(grep -c 'core id' /proc/cpuinfo)" + elif [ "_$NVM_OS" = "_freebsd" ] || [ "_$NVM_OS" = "_darwin" ]; then + CPU_THREADS="$(sysctl -n hw.ncpu)" + elif [ "_$NVM_OS" = "_sunos" ]; then + CPU_THREADS="$(psrinfo | wc -l)" + fi + local CPU_THREAD_VALID + CPU_THREAD_VALID=$(nvm_is_natural_num $CPU_THREADS) + if [ -z "$CPU_THREADS" ] || [ "$CPU_THREAD_VALID" != "true" ] ; then + echo "Can not determine how many thread(s) we can use, set to only 1 now." 1>&2 + echo "Please report an issue on GitHub to help us make it better and run it faster on your computer!" 1>&2 + MAKE_JOBS="1" else - MAKE_JOBS=1 - echo "Number of CPU thread(s) less or equal to 2 will have only one job a time for 'make'" + echo "Detected that you have $CPU_THREADS CPU thread(s)" + if [ $CPU_THREADS -gt 2 ]; then + MAKE_JOBS=$(($CPU_THREADS - 1)) + echo "Set the number of jobs to $CPU_THREADS - 1 = $MAKE_JOBS jobs to speed up the build" + else + MAKE_JOBS=1 + echo "Number of CPU thread(s) less or equal to 2 will have only one job a time for 'make'" + fi fi fi local tmpdir @@ -1579,6 +1581,21 @@ nvm() { if [ "_$1" = "_-s" ]; then nobinary=1 shift + if [ "_$1" = "_-j" ]; then + shift + local CPU_THREAD_VALID + CPU_THREAD_VALID=$(nvm_is_natural_num $1) + if [ "$CPU_THREAD_VALID" = "true" ]; then + MAKE_JOBS=$1 + echo "Set number of jobs to $MAKE_JOBS for 'make' utility" + else + unset MAKE_JOBS + echo >&2 "$1 is invalid for CPU threads, should be a natural number" + fi + shift + else + unset MAKE_JOBS + fi fi provided_version="$1" From e78dc5110e36954f5701f77ea93b6c0601b9adde Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 5 Dec 2015 15:32:36 +0800 Subject: [PATCH 3/4] fix CPU_THREADS/CPU_THREAD_VALID/MAKE_JOBS prefix --- nvm.sh | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/nvm.sh b/nvm.sh index 7f7ddf2..51f9a64 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1232,27 +1232,27 @@ nvm_install_node_source() { MAKE_CXX="CXX=c++" fi - if [ -z "$MAKE_JOBS" ]; then + if [ -z "$NVM_MAKE_JOBS" ]; then if [ "_$NVM_OS" = "_linux" ]; then - CPU_THREADS="$(grep -c 'core id' /proc/cpuinfo)" + NVM_CPU_THREADS="$(grep -c 'core id' /proc/cpuinfo)" elif [ "_$NVM_OS" = "_freebsd" ] || [ "_$NVM_OS" = "_darwin" ]; then - CPU_THREADS="$(sysctl -n hw.ncpu)" + NVM_CPU_THREADS="$(sysctl -n hw.ncpu)" elif [ "_$NVM_OS" = "_sunos" ]; then - CPU_THREADS="$(psrinfo | wc -l)" + NVM_CPU_THREADS="$(psrinfo | wc -l)" fi - local CPU_THREAD_VALID - CPU_THREAD_VALID=$(nvm_is_natural_num $CPU_THREADS) - if [ -z "$CPU_THREADS" ] || [ "$CPU_THREAD_VALID" != "true" ] ; then + local NVM_CPU_THREAD_VALID + NVM_CPU_THREAD_VALID=$(nvm_is_natural_num $NVM_CPU_THREADS) + if [ -z "$NVM_CPU_THREADS" ] || [ "$NVM_CPU_THREAD_VALID" != "true" ] ; then echo "Can not determine how many thread(s) we can use, set to only 1 now." 1>&2 echo "Please report an issue on GitHub to help us make it better and run it faster on your computer!" 1>&2 - MAKE_JOBS="1" + NVM_MAKE_JOBS="1" else - echo "Detected that you have $CPU_THREADS CPU thread(s)" - if [ $CPU_THREADS -gt 2 ]; then - MAKE_JOBS=$(($CPU_THREADS - 1)) - echo "Set the number of jobs to $CPU_THREADS - 1 = $MAKE_JOBS jobs to speed up the build" + echo "Detected that you have $NVM_CPU_THREADS CPU thread(s)" + if [ $NVM_CPU_THREADS -gt 2 ]; then + NVM_MAKE_JOBS=$(($NVM_CPU_THREADS - 1)) + echo "Set the number of jobs to $NVM_CPU_THREADS - 1 = $NVM_MAKE_JOBS jobs to speed up the build" else - MAKE_JOBS=1 + NVM_MAKE_JOBS=1 echo "Number of CPU thread(s) less or equal to 2 will have only one job a time for 'make'" fi fi @@ -1278,9 +1278,9 @@ nvm_install_node_source() { command tar -xzf "$tmptarball" -C "$tmpdir" && \ cd "$tmpdir/node-$VERSION" && \ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \ - $make -j $MAKE_JOBS $MAKE_CXX && \ + $make -j $NVM_MAKE_JOBS $MAKE_CXX && \ command rm -f "$VERSION_PATH" 2>/dev/null && \ - $make -j $MAKE_JOBS $MAKE_CXX install + $make -j $NVM_MAKE_JOBS $MAKE_CXX install ) then if ! nvm_has "npm" ; then @@ -1583,18 +1583,18 @@ nvm() { shift if [ "_$1" = "_-j" ]; then shift - local CPU_THREAD_VALID - CPU_THREAD_VALID=$(nvm_is_natural_num $1) - if [ "$CPU_THREAD_VALID" = "true" ]; then - MAKE_JOBS=$1 + local NVM_CPU_THREAD_VALID + NVM_CPU_THREAD_VALID=$(nvm_is_natural_num $1) + if [ "$NVM_CPU_THREAD_VALID" = "true" ]; then + NVM_MAKE_JOBS=$1 echo "Set number of jobs to $MAKE_JOBS for 'make' utility" else - unset MAKE_JOBS + unset NVM_MAKE_JOBS echo >&2 "$1 is invalid for CPU threads, should be a natural number" fi shift else - unset MAKE_JOBS + unset NVM_MAKE_JOBS fi fi From cfccf03b3d3f9166905aa6fac754b815a17bb3e3 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Mon, 21 Dec 2015 16:56:29 +0800 Subject: [PATCH 4/4] add test for install from source --- .../install from source with thread parameter | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 test/installation/node/install from source with thread parameter diff --git a/test/installation/node/install from source with thread parameter b/test/installation/node/install from source with thread parameter new file mode 100755 index 0000000..473107e --- /dev/null +++ b/test/installation/node/install from source with thread parameter @@ -0,0 +1,33 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +. ../../../nvm.sh + +NVM_TEST_VERSION=v0.10.41 + +# STAGE 1 # + +# Remove the stuff we're clobbering. +[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION + +# Install from source with 1 CPU thread parameter +nvm install -s -j 1 $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed" + +# Check +[ -d ../../../$NVM_TEST_VERSION ] +nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" + + + +# STAGE 2 # + +# Remove the stuff we're clobbering. +[ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION + +# Install from source with 2 CPU threads parameter +nvm install -s -j 2 $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed" + +# Check +[ -d ../../../$NVM_TEST_VERSION ] +nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed"