diff --git a/Makefile.include b/Makefile.include
index ef6d9316e132c41e1a239e8c8b0bd20982271191..baa985eb165d2b3e706e2c0107648503306e22dc 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -72,6 +72,9 @@ include $(RIOTMAKE)/docker.inc.mk
 # include color echo macros
 include $(RIOTMAKE)/color.inc.mk
 
+# include concurrency helpers
+include $(RIOTMAKE)/info-nproc.inc.mk
+
 GLOBAL_GOALS := buildtest info-boards-supported info-boards-features-missing info-buildsizes info-buildsizes-diff
 ifneq (, $(filter $(GLOBAL_GOALS), $(MAKECMDGOALS)))
   BOARD=none
diff --git a/makefiles/info-nproc.inc.mk b/makefiles/info-nproc.inc.mk
new file mode 100644
index 0000000000000000000000000000000000000000..c0bc14bde41fdee2d7d12368a36d59e4ada8b5d9
--- /dev/null
+++ b/makefiles/info-nproc.inc.mk
@@ -0,0 +1,33 @@
+ifneq (, $(filter buildtest info-concurrency, $(MAKECMDGOALS)))
+  ifeq (, $(strip $(NPROC)))
+    # Linux (utility program)
+    NPROC := $(shell nproc 2>/dev/null)
+
+    ifeq (, $(strip $(NPROC)))
+      # Linux (generic)
+      NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
+    endif
+    ifeq (, $(strip $(NPROC)))
+      # BSD (at least FreeBSD and Mac OSX)
+      NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null)
+    endif
+    ifeq (, $(strip $(NPROC)))
+      # Fallback
+      NPROC := 1
+    endif
+
+    NPROC := $(shell echo $$(($(NPROC) + 1)))
+
+    ifneq (, $(NPROC_MAX))
+      NPROC := $(shell if [ ${NPROC} -gt $(NPROC_MAX) ]; then echo $(NPROC_MAX); else echo ${NPROC}; fi)
+    endif
+    ifneq (, $(NPROC_MIN))
+      NPROC := $(shell if [ ${NPROC} -lt $(NPROC_MIN) ]; then echo $(NPROC_MIN); else echo ${NPROC}; fi)
+    endif
+  endif
+endif
+
+.PHONY: info-concurrency
+
+info-concurrency:
+	@echo "$(NPROC)"
diff --git a/makefiles/info.inc.mk b/makefiles/info.inc.mk
index 997b7112c299dfc1042801258c6ff826983c9f41..d08238d21c77356074b9b199036d289a5231b320 100644
--- a/makefiles/info.inc.mk
+++ b/makefiles/info.inc.mk
@@ -90,38 +90,6 @@ info-build:
 	@echo ''
 	@echo -e 'MAKEFILE_LIST:$(patsubst %, \n\t%, $(abspath $(MAKEFILE_LIST)))'
 
-ifneq (, $(filter buildtest info-concurrency, $(MAKECMDGOALS)))
-  ifeq (, $(strip $(NPROC)))
-    # Linux (utility program)
-    NPROC := $(shell nproc 2>/dev/null)
-
-    ifeq (, $(strip $(NPROC)))
-      # Linux (generic)
-      NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
-    endif
-    ifeq (, $(strip $(NPROC)))
-      # BSD (at least FreeBSD and Mac OSX)
-      NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null)
-    endif
-    ifeq (, $(strip $(NPROC)))
-      # Fallback
-      NPROC := 1
-    endif
-
-    NPROC := $(shell echo $$(($(NPROC) + 1)))
-
-    ifneq (, $(NPROC_MAX))
-      NPROC := $(shell if [ ${NPROC} -gt $(NPROC_MAX) ]; then echo $(NPROC_MAX); else echo ${NPROC}; fi)
-    endif
-    ifneq (, $(NPROC_MIN))
-      NPROC := $(shell if [ ${NPROC} -lt $(NPROC_MIN) ]; then echo $(NPROC_MIN); else echo ${NPROC}; fi)
-    endif
-  endif
-endif
-
-info-concurrency:
-	@echo "$(NPROC)"
-
 info-files: QUIET := 0
 info-files:
 	@( \