M platforms/chibios/platform.mk => platforms/chibios/platform.mk +11 -8
@@ 316,7 316,7 @@ endif
#
# Use defined stack sizes of the main thread in linker scripts
-LDSYMBOLS =--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE)
+SHARED_LDSYMBOLS = -Wl,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE)
# Shared Compiler flags for all toolchains
SHARED_CFLAGS = -fomit-frame-pointer \
@@ 327,7 327,6 @@ SHARED_CFLAGS = -fomit-frame-pointer \
# Shared Linker flags for all toolchains
SHARED_LDFLAGS = -T $(LDSCRIPT) \
- -Wl,$(LDSYMBOLS) \
-Wl,--gc-sections \
-nostartfiles
@@ 346,14 345,18 @@ ifeq ($(strip $(MCU)), risc-v)
endif
endif
- # Default to compiling with picolibc for RISC-V targets if available,
- # which is available by default on current (bullseye) debian based systems.
+ # Default to compiling with picolibc for RISC-V targets if available, which
+ # is available by default on distributions based on Debian 11+.
ifeq ($(shell $(TOOLCHAIN)gcc --specs=picolibc.specs -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
- # Toolchain specific Compiler flags
- # Note that we still link with our own linker script
- # by providing it via the -T flag above.
+ # Toolchain specific Compiler flags Note that we still link with our own
+ # linker script by providing it via the -T flag in SHARED_LDFLAGS.
TOOLCHAIN_CFLAGS = --specs=picolibc.specs
+ # picolibc internally uses __heap_start and __heap_end instead of the
+ # defacto chibios linker script standard __heap_base__ and __heap_end__
+ # therefore we introduce these symbols as an alias.
+ TOOLCHAIN_LDSYMBOLS = -Wl,--defsym=__heap_start=__heap_base__,--defsym=__heap_end=__heap_end__
+
# Tell QMK that we are compiling with picolibc.
OPT_DEFS += -DUSE_PICOLIBC
endif
@@ 404,7 407,7 @@ CFLAGS += $(SHARED_CFLAGS) $(TOOLCHAIN_CFLAGS)
CXXFLAGS += $(CFLAGS) $(SHARED_CXXFLAGS) $(TOOLCHAIN_CXXFLAGS) -fno-rtti
# Linker flags
-LDFLAGS += $(SHARED_LDFLAGS) $(TOOLCHAIN_LDFLAGS) $(MCUFLAGS)
+LDFLAGS += $(SHARED_LDFLAGS) $(SHARED_LDSYMBOLS) $(TOOLCHAIN_LDFLAGS) $(TOOLCHAIN_LDSYMBOLS) $(MCUFLAGS)
# Tell QMK that we are hosting it on ChibiOS.
OPT_DEFS += -DPROTOCOL_CHIBIOS
M platforms/chibios/syscall-fallbacks.c => platforms/chibios/syscall-fallbacks.c +1 -0
@@ 22,6 22,7 @@
* the _reent struct has to be defined. */
#if defined(USE_PICOLIBC)
struct _reent;
+struct timeval;
#endif
#pragma GCC diagnostic ignored "-Wmissing-prototypes"
M util/install/debian.sh => util/install/debian.sh +10 -4
@@ 11,12 11,18 @@ _qmk_install_prepare() {
_qmk_install() {
echo "Installing dependencies"
- sudo apt-get -yq install \
+ sudo apt-get --quiet --yes install \
build-essential clang-format diffutils gcc git unzip wget zip \
python3-pip binutils-avr gcc-avr avr-libc binutils-arm-none-eabi \
gcc-arm-none-eabi libnewlib-arm-none-eabi avrdude dfu-programmer \
- dfu-util teensy-loader-cli libhidapi-hidraw0 libusb-dev \
- picolibc-riscv64-unknown-elf gcc-riscv64-unknown-elf binutils-riscv64-unknown-elf
+ dfu-util teensy-loader-cli libhidapi-hidraw0 libusb-dev
- python3 -m pip install --user -r $QMK_FIRMWARE_DIR/requirements.txt
+ # RISC-V toolchains with picolibc support are only available for distributions based on Debian 11+.
+ if sudo apt-get install --simulate --quiet --yes picolibc-riscv64-unknown-elf gcc-riscv64-unknown-elf binutils-riscv64-unknown-elf > /dev/null 2>&1; then
+ sudo apt-get --quiet --yes install picolibc-riscv64-unknown-elf \
+ gcc-riscv64-unknown-elf \
+ binutils-riscv64-unknown-elf
+ fi
+
+ python3 -m pip install --user -r "$QMK_FIRMWARE_DIR"/requirements.txt
}