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 <tcrawford@system76.com>
This commit is contained in:
Tim Crawford
2023-01-11 12:28:13 -07:00
committed by Tim Crawford
parent 84fe76cad4
commit 9a52042f95
10 changed files with 25 additions and 14 deletions

View File

@ -25,14 +25,14 @@ all: $(BUILD)/ec.rom
# Include common source # Include common source
COMMON_DIR=src/common 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) CFLAGS=-I$(COMMON_DIR)/include -D__FIRMWARE_VERSION__=$(VERSION)
include $(COMMON_DIR)/common.mk include $(COMMON_DIR)/common.mk
SRC += $(foreach src, $(common-y), $(COMMON_DIR)/$(src)) SRC += $(foreach src, $(common-y), $(COMMON_DIR)/$(src))
# Include the board's source # Include the board's source
BOARD_DIR=src/board/$(BOARD) 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) CFLAGS+=-I$(BOARD_DIR)/include -D__BOARD__=$(BOARD)
include $(BOARD_DIR)/board.mk include $(BOARD_DIR)/board.mk
SRC += $(foreach src, $(board-y), $(BOARD_DIR)/$(src)) 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 # The board will define the embedded controller
# Include the embedded controller's source # Include the embedded controller's source
EC_DIR=src/ec/$(EC) 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 CFLAGS+=-I$(EC_DIR)/include
include $(EC_DIR)/ec.mk include $(EC_DIR)/ec.mk
SRC += $(foreach src, $(ec-y), $(EC_DIR)/$(src)) 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 # The EC will define the architecture
# Include the architecture's source # Include the architecture's source
ARCH_DIR=src/arch/$(ARCH) 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) CFLAGS+=-I$(ARCH_DIR)/include -D__ARCH__=$(ARCH)
include $(ARCH_DIR)/arch.mk include $(ARCH_DIR)/arch.mk
SRC += $(foreach src, $(arch-y), $(ARCH_DIR)/$(src)) SRC += $(foreach src, $(arch-y), $(ARCH_DIR)/$(src))

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-3.0-only # 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 AS = sdas8051
ASFLAGS = -plosgff ASFLAGS = -plosgff
@ -48,3 +48,7 @@ $(ASM_OBJ): $(BUILD)/%.rel: src/%.asm
$(C_OBJ): $(BUILD)/%.rel: src/%.c $(INCLUDE) $(C_OBJ): $(BUILD)/%.rel: src/%.c $(INCLUDE)
@mkdir -p $(@D) @mkdir -p $(@D)
$(CC) $(CFLAGS) -o $@ -c $< $(CC) $(CFLAGS) -o $@ -c $<
# Add dependency rules
DEP = $(OBJ:%.rel=%.d)
-include $(DEP)

View File

@ -1,7 +1,8 @@
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
CC=avr-gcc -mmcu=$(EC_VARIANT) CC = avr-gcc -mmcu=$(EC_VARIANT)
CFLAGS+=-Os -fstack-usage -Wall -Werror -Wl,--gc-sections -Wl,-u,vfprintf -lprintf_flt 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 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523
ifneq ($(findstring 12.,$(shell avr-gcc --version 2>/dev/null)),) ifneq ($(findstring 12.,$(shell avr-gcc --version 2>/dev/null)),)
@ -35,3 +36,7 @@ $(BUILD)/ec.elf: $(OBJ)
$(BUILD)/%.o: src/%.c $(INCLUDE) $(BUILD)/%.o: src/%.c $(INCLUDE)
@mkdir -p $(@D) @mkdir -p $(@D)
$(CC) $(CFLAGS) -o $@ -c $< $(CC) $(CFLAGS) -o $@ -c $<
# Add dependency rules
DEP = $(OBJ:%.o=%.d)
-include $(DEP)

View File

@ -51,7 +51,7 @@ endif
# Include system76 common source # Include system76 common source
SYSTEM76_COMMON_DIR=src/board/system76/common 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 CFLAGS+=-I$(SYSTEM76_COMMON_DIR)/include
# Set battery charging thresholds # Set battery charging thresholds

View File

@ -14,7 +14,7 @@ FLASH_CFLAGS=$(CFLAGS)
# Include flash source. # Include flash source.
FLASH_DIR=$(SYSTEM76_COMMON_DIR)/flash FLASH_DIR=$(SYSTEM76_COMMON_DIR)/flash
# Note: main.c *must* be first to ensure that flash_start is at the correct address # 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_CFLAGS+=-I$(FLASH_DIR)/include -D__FLASH__
FLASH_SRC += $(foreach src, $(flash-y), $(FLASH_DIR)/$(src)) 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=\ FLASH_CC=\
sdcc \ sdcc \
-mmcs51 \ -mmcs51 \
-MMD \
--model-large \ --model-large \
--opt-code-size \ --opt-code-size \
--acall-ajmp \ --acall-ajmp \

View File

@ -15,7 +15,7 @@ SCRATCH_CFLAGS=$(CFLAGS)
# Include scratch source # Include scratch source
SCRATCH_DIR=$(SYSTEM76_COMMON_DIR)/scratch 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_CFLAGS+=-I$(SCRATCH_DIR)/include -D__SCRATCH__
SCRATCH_SRC += $(foreach src, $(scratch-y), $(SCRATCH_DIR)/$(src)) 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=\ SCRATCH_CC=\
sdcc \ sdcc \
-mmcs51 \ -mmcs51 \
-MMD \
--model-small \ --model-small \
--code-loc $(SCRATCH_OFFSET) \ --code-loc $(SCRATCH_OFFSET) \
--code-size $(SCRATCH_SIZE) \ --code-size $(SCRATCH_SIZE) \

View File

@ -3,5 +3,5 @@
KEYMAP?=default KEYMAP?=default
keyboard-y += keymap/$(KEYMAP).c 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 CFLAGS+=-I$(KEYBOARD_DIR)/include

View File

@ -3,5 +3,5 @@
KEYMAP?=default KEYMAP?=default
keyboard-y += keymap/$(KEYMAP).c 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 CFLAGS+=-I$(KEYBOARD_DIR)/include

View File

@ -3,5 +3,5 @@
KEYMAP?=default KEYMAP?=default
keyboard-y += keymap/$(KEYMAP).c 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 CFLAGS+=-I$(KEYBOARD_DIR)/include

View File

@ -3,5 +3,5 @@
KEYMAP?=default KEYMAP?=default
keyboard-y += keymap/$(KEYMAP).c 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 CFLAGS+=-I$(KEYBOARD_DIR)/include