From 9a52042f95c8b1ad11e61f1287fd18b94d2d3e6b Mon Sep 17 00:00:00 2001 From: Tim Crawford Date: Wed, 11 Jan 2023 12:28:13 -0700 Subject: [PATCH] Generate and use compiler dep rules SDCC supports the `-MMD` option. Use it instead of having every file depend on *all* the headers. Reduces incremental build time after modifying headers as it will now only rebuild the actual dependents and not the entire project. Signed-off-by: Tim Crawford --- Makefile | 8 ++++---- src/arch/8051/toolchain.mk | 6 +++++- src/arch/avr/toolchain.mk | 9 +++++++-- src/board/system76/common/common.mk | 2 +- src/board/system76/common/flash/flash.mk | 3 ++- src/board/system76/common/scratch/scratch.mk | 3 ++- src/keyboard/system76/14in_83/keyboard.mk | 2 +- src/keyboard/system76/14in_86/keyboard.mk | 2 +- src/keyboard/system76/15in_102/keyboard.mk | 2 +- src/keyboard/system76/15in_102_nkey/keyboard.mk | 2 +- 10 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index bdbe99b..6b70704 100644 --- a/Makefile +++ b/Makefile @@ -25,14 +25,14 @@ all: $(BUILD)/ec.rom # Include common source COMMON_DIR=src/common -INCLUDE=$(wildcard $(COMMON_DIR)/include/common/*.h) $(COMMON_DIR)/common.mk +INCLUDE += $(COMMON_DIR)/common.mk CFLAGS=-I$(COMMON_DIR)/include -D__FIRMWARE_VERSION__=$(VERSION) include $(COMMON_DIR)/common.mk SRC += $(foreach src, $(common-y), $(COMMON_DIR)/$(src)) # Include the board's source BOARD_DIR=src/board/$(BOARD) -INCLUDE+=$(wildcard $(BOARD_DIR)/include/board/*.h) $(BOARD_DIR)/board.mk +INCLUDE += $(BOARD_DIR)/board.mk CFLAGS+=-I$(BOARD_DIR)/include -D__BOARD__=$(BOARD) include $(BOARD_DIR)/board.mk SRC += $(foreach src, $(board-y), $(BOARD_DIR)/$(src)) @@ -42,7 +42,7 @@ SRC += $(foreach src, $(keyboard-y), $(KEYBOARD_DIR)/$(src)) # The board will define the embedded controller # Include the embedded controller's source EC_DIR=src/ec/$(EC) -INCLUDE+=$(wildcard $(EC_DIR)/include/ec/*.h) $(EC_DIR)/ec.mk +INCLUDE += $(EC_DIR)/ec.mk CFLAGS+=-I$(EC_DIR)/include include $(EC_DIR)/ec.mk SRC += $(foreach src, $(ec-y), $(EC_DIR)/$(src)) @@ -50,7 +50,7 @@ SRC += $(foreach src, $(ec-y), $(EC_DIR)/$(src)) # The EC will define the architecture # Include the architecture's source ARCH_DIR=src/arch/$(ARCH) -INCLUDE+=$(wildcard $(ARCH_DIR)/include/arch/*.h) $(ARCH_DIR)/arch.mk +INCLUDE += $(ARCH_DIR)/arch.mk CFLAGS+=-I$(ARCH_DIR)/include -D__ARCH__=$(ARCH) include $(ARCH_DIR)/arch.mk SRC += $(foreach src, $(arch-y), $(ARCH_DIR)/$(src)) diff --git a/src/arch/8051/toolchain.mk b/src/arch/8051/toolchain.mk index 9715057..f01a8b3 100644 --- a/src/arch/8051/toolchain.mk +++ b/src/arch/8051/toolchain.mk @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-3.0-only -CC = sdcc -mmcs51 --model-large --code-size $(CODE_SIZE) --xram-size $(SRAM_SIZE) --Werror +CC = sdcc -mmcs51 -MMD --model-large --code-size $(CODE_SIZE) --xram-size $(SRAM_SIZE) --Werror AS = sdas8051 ASFLAGS = -plosgff @@ -48,3 +48,7 @@ $(ASM_OBJ): $(BUILD)/%.rel: src/%.asm $(C_OBJ): $(BUILD)/%.rel: src/%.c $(INCLUDE) @mkdir -p $(@D) $(CC) $(CFLAGS) -o $@ -c $< + +# Add dependency rules +DEP = $(OBJ:%.rel=%.d) +-include $(DEP) diff --git a/src/arch/avr/toolchain.mk b/src/arch/avr/toolchain.mk index f973ab8..0222396 100644 --- a/src/arch/avr/toolchain.mk +++ b/src/arch/avr/toolchain.mk @@ -1,7 +1,8 @@ # SPDX-License-Identifier: GPL-3.0-only -CC=avr-gcc -mmcu=$(EC_VARIANT) -CFLAGS+=-Os -fstack-usage -Wall -Werror -Wl,--gc-sections -Wl,-u,vfprintf -lprintf_flt +CC = avr-gcc -mmcu=$(EC_VARIANT) +CFLAGS += -MMD -Os -fstack-usage -Wall -Werror \ + -Wl,--gc-sections -Wl,-u,vfprintf -lprintf_flt # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523 ifneq ($(findstring 12.,$(shell avr-gcc --version 2>/dev/null)),) @@ -35,3 +36,7 @@ $(BUILD)/ec.elf: $(OBJ) $(BUILD)/%.o: src/%.c $(INCLUDE) @mkdir -p $(@D) $(CC) $(CFLAGS) -o $@ -c $< + +# Add dependency rules +DEP = $(OBJ:%.o=%.d) +-include $(DEP) diff --git a/src/board/system76/common/common.mk b/src/board/system76/common/common.mk index e552330..8707136 100644 --- a/src/board/system76/common/common.mk +++ b/src/board/system76/common/common.mk @@ -51,7 +51,7 @@ endif # Include system76 common source SYSTEM76_COMMON_DIR=src/board/system76/common -INCLUDE+=$(wildcard $(SYSTEM76_COMMON_DIR)/include/board/*.h) $(SYSTEM76_COMMON_DIR)/common.mk +INCLUDE += $(SYSTEM76_COMMON_DIR)/common.mk CFLAGS+=-I$(SYSTEM76_COMMON_DIR)/include # Set battery charging thresholds diff --git a/src/board/system76/common/flash/flash.mk b/src/board/system76/common/flash/flash.mk index 3a4e660..455ffde 100644 --- a/src/board/system76/common/flash/flash.mk +++ b/src/board/system76/common/flash/flash.mk @@ -14,7 +14,7 @@ FLASH_CFLAGS=$(CFLAGS) # Include flash source. FLASH_DIR=$(SYSTEM76_COMMON_DIR)/flash # Note: main.c *must* be first to ensure that flash_start is at the correct address -FLASH_INCLUDE+=$(wildcard $(FLASH_DIR)/include/flash/*.h) $(FLASH_DIR)/flash.mk +FLASH_INCLUDE += $(FLASH_DIR)/flash.mk FLASH_CFLAGS+=-I$(FLASH_DIR)/include -D__FLASH__ FLASH_SRC += $(foreach src, $(flash-y), $(FLASH_DIR)/$(src)) @@ -23,6 +23,7 @@ FLASH_OBJ=$(sort $(patsubst src/%.c,$(FLASH_BUILD)/%.rel,$(FLASH_SRC))) FLASH_CC=\ sdcc \ -mmcs51 \ + -MMD \ --model-large \ --opt-code-size \ --acall-ajmp \ diff --git a/src/board/system76/common/scratch/scratch.mk b/src/board/system76/common/scratch/scratch.mk index 09dc16c..2b30ea1 100644 --- a/src/board/system76/common/scratch/scratch.mk +++ b/src/board/system76/common/scratch/scratch.mk @@ -15,7 +15,7 @@ SCRATCH_CFLAGS=$(CFLAGS) # Include scratch source SCRATCH_DIR=$(SYSTEM76_COMMON_DIR)/scratch -SCRATCH_INCLUDE+=$(wildcard $(SCRATCH_DIR)/include/scratch/*.h) $(SCRATCH_DIR)/scratch.mk +SCRATCH_INCLUDE += $(SCRATCH_DIR)/scratch.mk SCRATCH_CFLAGS+=-I$(SCRATCH_DIR)/include -D__SCRATCH__ SCRATCH_SRC += $(foreach src, $(scratch-y), $(SCRATCH_DIR)/$(src)) @@ -24,6 +24,7 @@ SCRATCH_OBJ=$(sort $(patsubst src/%.c,$(SCRATCH_BUILD)/%.rel,$(SCRATCH_SRC))) SCRATCH_CC=\ sdcc \ -mmcs51 \ + -MMD \ --model-small \ --code-loc $(SCRATCH_OFFSET) \ --code-size $(SCRATCH_SIZE) \ diff --git a/src/keyboard/system76/14in_83/keyboard.mk b/src/keyboard/system76/14in_83/keyboard.mk index f88ca5b..5b7eafc 100644 --- a/src/keyboard/system76/14in_83/keyboard.mk +++ b/src/keyboard/system76/14in_83/keyboard.mk @@ -3,5 +3,5 @@ KEYMAP?=default keyboard-y += keymap/$(KEYMAP).c -INCLUDE+=$(wildcard $(KEYBOARD_DIR)/include/board/*.h) $(KEYBOARD_DIR)/keyboard.mk +INCLUDE += $(KEYBOARD_DIR)/keyboard.mk CFLAGS+=-I$(KEYBOARD_DIR)/include diff --git a/src/keyboard/system76/14in_86/keyboard.mk b/src/keyboard/system76/14in_86/keyboard.mk index f88ca5b..5b7eafc 100644 --- a/src/keyboard/system76/14in_86/keyboard.mk +++ b/src/keyboard/system76/14in_86/keyboard.mk @@ -3,5 +3,5 @@ KEYMAP?=default keyboard-y += keymap/$(KEYMAP).c -INCLUDE+=$(wildcard $(KEYBOARD_DIR)/include/board/*.h) $(KEYBOARD_DIR)/keyboard.mk +INCLUDE += $(KEYBOARD_DIR)/keyboard.mk CFLAGS+=-I$(KEYBOARD_DIR)/include diff --git a/src/keyboard/system76/15in_102/keyboard.mk b/src/keyboard/system76/15in_102/keyboard.mk index f88ca5b..5b7eafc 100644 --- a/src/keyboard/system76/15in_102/keyboard.mk +++ b/src/keyboard/system76/15in_102/keyboard.mk @@ -3,5 +3,5 @@ KEYMAP?=default keyboard-y += keymap/$(KEYMAP).c -INCLUDE+=$(wildcard $(KEYBOARD_DIR)/include/board/*.h) $(KEYBOARD_DIR)/keyboard.mk +INCLUDE += $(KEYBOARD_DIR)/keyboard.mk CFLAGS+=-I$(KEYBOARD_DIR)/include diff --git a/src/keyboard/system76/15in_102_nkey/keyboard.mk b/src/keyboard/system76/15in_102_nkey/keyboard.mk index f88ca5b..5b7eafc 100644 --- a/src/keyboard/system76/15in_102_nkey/keyboard.mk +++ b/src/keyboard/system76/15in_102_nkey/keyboard.mk @@ -3,5 +3,5 @@ KEYMAP?=default keyboard-y += keymap/$(KEYMAP).c -INCLUDE+=$(wildcard $(KEYBOARD_DIR)/include/board/*.h) $(KEYBOARD_DIR)/keyboard.mk +INCLUDE += $(KEYBOARD_DIR)/keyboard.mk CFLAGS+=-I$(KEYBOARD_DIR)/include