Add support for hardware and board initialisation overrides. (#8330)
* Add support for hardware and board initialisation overrides. * qmk cformat. * Add some documentation. * Docs clarity. * Make early_hardware_init_pre a no-op for now, until migrations occur. * Doco update * Make distinction between keyboard and ChibiOS board in docs * Doc anchors. * Update tmk_core/protocol/chibios/main.c Co-Authored-By: Joel Challis <git@zvecr.com> * Rework bootloader entry to be off by default, allow opting-in. Co-authored-by: Joel Challis <git@zvecr.com>
This commit is contained in:
committed by
Florian Didron
parent
330519ef73
commit
da7b76967e
5
tmk_core/protocol/chibios/init_hooks.h
Normal file
5
tmk_core/protocol/chibios/init_hooks.h
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Override the initialisation functions inside the ChibiOS board.c files
|
||||||
|
#define __early_init __chibios_override___early_init
|
||||||
|
#define boardInit __chibios_override_boardInit
|
||||||
@@ -33,6 +33,11 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
|
|
||||||
|
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
|
||||||
|
// Change this to be TRUE once we've migrated keyboards to the new init system
|
||||||
|
# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP FALSE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SLEEP_LED_ENABLE
|
#ifdef SLEEP_LED_ENABLE
|
||||||
# include "sleep_led.h"
|
# include "sleep_led.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -105,6 +110,39 @@ void webusb_task(void);
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
/* Early initialisation
|
||||||
|
*/
|
||||||
|
__attribute__((weak)) void early_hardware_init_pre(void) {
|
||||||
|
#if EARLY_INIT_PERFORM_BOOTLOADER_JUMP
|
||||||
|
void enter_bootloader_mode_if_requested(void);
|
||||||
|
enter_bootloader_mode_if_requested();
|
||||||
|
#endif // EARLY_INIT_PERFORM_BOOTLOADER_JUMP
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) void early_hardware_init_post(void) {}
|
||||||
|
|
||||||
|
__attribute__((weak)) void board_init(void) {}
|
||||||
|
|
||||||
|
// This overrides what's normally in ChibiOS board definitions
|
||||||
|
void __early_init(void) {
|
||||||
|
early_hardware_init_pre();
|
||||||
|
|
||||||
|
// This is the renamed equivalent of __early_init in the board.c file
|
||||||
|
void __chibios_override___early_init(void);
|
||||||
|
__chibios_override___early_init();
|
||||||
|
|
||||||
|
early_hardware_init_post();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This overrides what's normally in ChibiOS board definitions
|
||||||
|
void boardInit(void) {
|
||||||
|
// This is the renamed equivalent of boardInit in the board.c file
|
||||||
|
void __chibios_override_boardInit(void);
|
||||||
|
__chibios_override_boardInit();
|
||||||
|
|
||||||
|
board_init();
|
||||||
|
}
|
||||||
|
|
||||||
/* Main thread
|
/* Main thread
|
||||||
*/
|
*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|||||||
@@ -223,6 +223,12 @@ $(foreach LOBJ, $(NO_LTO_OBJ), $(eval $(call NO_LTO,$(LOBJ))))
|
|||||||
|
|
||||||
MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
|
MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
|
||||||
|
|
||||||
|
# For a ChibiOS build, ensure that the board files have the hook overrides injected
|
||||||
|
define BOARDSRC_INJECT_HOOKS
|
||||||
|
$(KEYBOARD_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): INIT_HOOK_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h
|
||||||
|
endef
|
||||||
|
$(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ))))
|
||||||
|
|
||||||
# Add QMK specific flags
|
# Add QMK specific flags
|
||||||
DFU_SUFFIX ?= dfu-suffix
|
DFU_SUFFIX ?= dfu-suffix
|
||||||
DFU_SUFFIX_ARGS ?=
|
DFU_SUFFIX_ARGS ?=
|
||||||
@@ -306,27 +312,27 @@ ifdef $1_CONFIG
|
|||||||
$1_CONFIG_FLAGS += $$(patsubst %,-include %,$$($1_CONFIG))
|
$1_CONFIG_FLAGS += $$(patsubst %,-include %,$$($1_CONFIG))
|
||||||
endif
|
endif
|
||||||
$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
|
$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
|
||||||
$1_CXXFLAGS= $$(ALL_CXXFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
|
$1_CXXFLAGS = $$(ALL_CXXFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
|
||||||
$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
|
$1_ASFLAGS = $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
|
||||||
|
|
||||||
# Compile: create object files from C source files.
|
# Compile: create object files from C source files.
|
||||||
$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
|
$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
|
||||||
@mkdir -p $$(@D)
|
@mkdir -p $$(@D)
|
||||||
@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
|
@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
|
||||||
$$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
$$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
||||||
@$$(BUILD_CMD)
|
@$$(BUILD_CMD)
|
||||||
|
|
||||||
# Compile: create object files from C++ source files.
|
# Compile: create object files from C++ source files.
|
||||||
$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
|
$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
|
||||||
@mkdir -p $$(@D)
|
@mkdir -p $$(@D)
|
||||||
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
|
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
|
||||||
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
||||||
@$$(BUILD_CMD)
|
@$$(BUILD_CMD)
|
||||||
|
|
||||||
$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
|
$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
|
||||||
@mkdir -p $$(@D)
|
@mkdir -p $$(@D)
|
||||||
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
|
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
|
||||||
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
|
||||||
@$$(BUILD_CMD)
|
@$$(BUILD_CMD)
|
||||||
|
|
||||||
# Assemble: create object files from assembler source files.
|
# Assemble: create object files from assembler source files.
|
||||||
|
|||||||
Reference in New Issue
Block a user