From 550b42345a0235f3bc888778c6cc3a34f6a2919c Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 4 Dec 2018 21:31:54 +1100
Subject: [PATCH] Don't build project folders in parallel.

---
 .drone.yml                          |  4 ++--
 Bootloaders/makefile                | 17 +++--------------
 Demos/Device/ClassDriver/makefile   | 17 +++--------------
 Demos/Device/LowLevel/makefile      | 17 +++--------------
 Demos/DualRole/ClassDriver/makefile | 17 +++--------------
 Demos/Host/ClassDriver/makefile     | 17 +++--------------
 Demos/Host/LowLevel/makefile        | 17 +++--------------
 Projects/XPLAINBridge/makefile      |  2 +-
 Projects/makefile                   | 17 +++--------------
 9 files changed, 24 insertions(+), 101 deletions(-)

diff --git a/.drone.yml b/.drone.yml
index 8d6793976..ba140e301 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -2,10 +2,10 @@ kind: pipeline
 name: default
 
 steps:
-- name: Build
+- name: Projects
   image: abcminiuser/docker-avr8-toolchain
   commands:
-  - make --quiet all
+  - make -j --quiet all
 
 - name: Bootloaders
   image: abcminiuser/docker-avr8-toolchain
diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index 33e1396fd..1942df61c 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
index 77ed7069e..e582bd790 100644
--- a/Demos/Device/ClassDriver/makefile
+++ b/Demos/Device/ClassDriver/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
index 77ed7069e..e582bd790 100644
--- a/Demos/Device/LowLevel/makefile
+++ b/Demos/Device/LowLevel/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Demos/DualRole/ClassDriver/makefile b/Demos/DualRole/ClassDriver/makefile
index b33ecf28b..b8e5e2a34 100644
--- a/Demos/DualRole/ClassDriver/makefile
+++ b/Demos/DualRole/ClassDriver/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Demos/Host/ClassDriver/makefile b/Demos/Host/ClassDriver/makefile
index bbe50239f..566baed42 100644
--- a/Demos/Host/ClassDriver/makefile
+++ b/Demos/Host/ClassDriver/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Demos/Host/LowLevel/makefile b/Demos/Host/LowLevel/makefile
index bbe50239f..566baed42 100644
--- a/Demos/Host/LowLevel/makefile
+++ b/Demos/Host/LowLevel/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
diff --git a/Projects/XPLAINBridge/makefile b/Projects/XPLAINBridge/makefile
index 92344e585..0bcf77729 100644
--- a/Projects/XPLAINBridge/makefile
+++ b/Projects/XPLAINBridge/makefile
@@ -36,7 +36,7 @@ all:
 # identical OBJDIR directory, we need to enforce the use of this project's object file
 # directory as the one where the build object files are to be stored, by giving it a
 # path relative to the current folder.
-OBJDIR      := ./obj
+OBJDIR      := ./xpb-obj
 
 # Include LUFA-specific DMBS extension modules
 DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
diff --git a/Projects/makefile b/Projects/makefile
index 992dff860..3f5cd5719 100644
--- a/Projects/makefile
+++ b/Projects/makefile
@@ -22,20 +22,9 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
+# Build each directory sequentially, even if we are building using multiple
+# cores within each project
+.NOTPARALLEL:
 
 %: $(PROJECT_DIRECTORIES)
 	@echo . > /dev/null
-- 
GitLab