circleci: Detect core count
authorBen Gamari <bgamari.foss@gmail.com>
Fri, 6 Jul 2018 14:57:55 +0000 (10:57 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 6 Jul 2018 18:08:37 +0000 (14:08 -0400)
Test Plan: Try `./validate`, CircleCI build; make sure core count
detection works in both cases.

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14470

Differential Revision: https://phabricator.haskell.org/D4897

.circleci/config.yml
mk/detect-cpu-count.sh [new file with mode: 0755]
validate

index e52d38d..298162e 100644 (file)
@@ -15,7 +15,9 @@ aliases:
       name: submodules
       command: .circleci/fetch-submodules.sh
   - &buildenv
-    THREADS: 9
+    # ideally we would simply set THREADS here instead of re-detecting it every
+    # time we need it below. Unfortunately, there is no way to set an environment
+    # variable with the result of a shell script.
     SKIP_PERF_TESTS: YES
     VERBOSE: 2
   - &boot
@@ -50,19 +52,19 @@ aliases:
   - &make
     run:
       name: Build
-      command: "make -j$THREADS"
+      command: "make -j`mk/detect-cpu-count.sh`"
   - &build_hadrian
     run:
       name: Build GHC using Hadrian
       command: |
         cabal update
-        hadrian/build.sh -j$THREADS
+        hadrian/build.sh -j`mk/detect-cpu-count.sh`
   - &test
     run:
       name: Test
       command: |
         mkdir -p test-results
-        make test SKIP_PERF_TESTS=YES JUNIT_FILE=../../test-results/junit.xml
+        make test THREADS=`mk/detect-cpu-count.sh` SKIP_PERF_TESTS=YES JUNIT_FILE=../../test-results/junit.xml
   - &store_test_results
     store_test_results:
       path: test-results
diff --git a/mk/detect-cpu-count.sh b/mk/detect-cpu-count.sh
new file mode 100755 (executable)
index 0000000..abc4738
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+detect_cpu_count () {
+    if [ "$CPUS" = "" ]; then
+        # Windows standard environment variable
+        CPUS="$NUMBER_OF_PROCESSORS"
+    fi
+
+    if [ "$CPUS" = "" ]; then
+        # Linux
+        CPUS=`getconf _NPROCESSORS_ONLN 2>/dev/null`
+    fi
+
+    if [ "$CPUS" = "" ]; then
+        # FreeBSD
+        CPUS=`getconf NPROCESSORS_ONLN 2>/dev/null`
+    fi
+
+    if [ "$CPUS" = "" ]; then
+        # nothing helped
+        CPUS="1"
+    fi
+}
+
+detect_cpu_count
+echo "$CPUS"
index 0332e5b..2f82b28 100755 (executable)
--- a/validate
+++ b/validate
@@ -119,29 +119,7 @@ check_packages () {
     fi
 }
 
-detect_cpu_count () {
-    if [ "$CPUS" = "" ]; then
-        # Windows standard environment variable
-        CPUS="$NUMBER_OF_PROCESSORS"
-    fi
-
-    if [ "$CPUS" = "" ]; then
-        # Linux
-        CPUS=`getconf _NPROCESSORS_ONLN 2>/dev/null`
-    fi
-
-    if [ "$CPUS" = "" ]; then
-        # FreeBSD
-        CPUS=`getconf NPROCESSORS_ONLN 2>/dev/null`
-    fi
-
-    if [ "$CPUS" = "" ]; then
-        # nothing helped
-        CPUS="1"
-    fi
-}
-
-detect_cpu_count
+CPUS=`mk/detect-cpu-count.sh`
 
 if ! [ -d testsuite ]
 then