From 8184afea12f67ecd864dbc0f15f228dc1f603b85 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Fri, 25 Aug 2023 15:15:32 -0500 Subject: [PATCH] Chore/make test parallel build limits (#480) * re-enable parallel build for CMake unit tests, but limited to ncores on supported OSes. Using MAKEFLAGS in .bashrc to set the '-j' flag size causes problem for Makefile build of BACnet library which doesn't tolerate parallel builds. Using "-j" without limits for CMake of unit tests overwhelms my lesser endowed build machines. --------- Co-authored-by: Steve Karg --- test/Makefile | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/test/Makefile b/test/Makefile index 6ac6ab53..4a446f42 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,17 +14,53 @@ BUILD_DIR=build CTEST_OPTIONS := --quiet --output-on-failure CTEST_OPTIONS += --output-junit test-results.xml +# determine the compile environment name +ifeq ($(OS),Windows_NT) +SYS := $(shell gcc -dumpmachine) +ifneq (, $(findstring mingw, $(SYS))) +UNAME_S := MinGW +else ifneq (, $(findstring cygwin, $(SYS))) +UNAME_S := Cygwin +else +UNAME_S := Windows +endif +else +UNAME_S := $(shell uname -s) +UNAME_S := $(patsubst BSD%,BSD,$(UNAME_S)) +endif + +# unlimited parallel makefile jobs can +# overwhelm builders with limited resources +# set job limits based on number of core processors +ifeq (${JOBS},) + ifeq ($(UNAME_S),Windows) + JOBS = "-j %NUMBER_OF_PROCESSORS%" + endif + ifeq ($(UNAME_S),Linux) + JOBS = "-j $(nproc)" + endif + ifeq ($(UNAME_S),Darwin) + JOBS = "-j $(sysctl -n hw.ncpu)" + endif + ifeq ($(UNAME_S),BSD) + JOBS = "-j $(sysctl -n hw.ncpu)" + endif + ifeq ($(UNAME_S),MinGW) + JOBS = "-j" + endif +endif + .PHONY: test test: [ -d $(BUILD_DIR) ] || mkdir -p $(BUILD_DIR) [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && cmake .. && cd .. - [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && cmake --build . --clean-first && cd .. + [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && cmake --build . $(JOBS) --clean-first && cd .. [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && ctest $(CTEST_OPTIONS) [ -d $(BUILD_DIR) ] && $(MAKE) -C $(BUILD_DIR) lcov .PHONY: retest retest: - [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && cmake --build . && cd .. + [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && cmake --build . $(JOBS) && cd .. [ -d $(BUILD_DIR) ] && cd $(BUILD_DIR) && ctest $(CTEST_OPTIONS) [ -d $(BUILD_DIR) ] && $(MAKE) -C $(BUILD_DIR) lcov @@ -32,6 +68,13 @@ retest: report: [ -d $(BUILD_DIR) ] && cat $(BUILD_DIR)/Testing/Temporary/LastTest*.log +.PHONY: env +env: + @echo "Makefile environment variables" + @echo "UNAME_S=$(UNAME_S)" + @echo "JOBS=$(JOBS)" + @echo "BUILD_DIR=$(BUILD_DIR)" + .PHONY: clean clean: -rm -rf $(BUILD_DIR)