summaryrefslogtreecommitdiff
path: root/platforms
diff options
context:
space:
mode:
authorStefan Kerkmann <karlk90@pm.me>2021-11-20 21:04:16 +0100
committerGitHub <noreply@github.com>2021-11-20 20:04:16 +0000
commit5c2052fd476cb1d15eab66c23016a1add93f6767 (patch)
tree318fc95b5a958075a9b5d1955696e294769793ac /platforms
parent32215d5bff52262542a2f8d2a221b0303f02c019 (diff)
[Core] RISC-V toolchain and picolibc fixes (#15109)
* [Core] Fix RISC-V toolchain installation The risc-v toolchain is only available on distributions based on Debian 11+ so we check for their availability before installing them. * [Core] Fix heap symbols and syscalls for picolibc 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. Usually all memory used within QMK is statically allocated, but some algorithms make usage of malloc and friends. Also the timeval struct is not defined by picolibc for syscalls, therefore it is declared as stub.
Diffstat (limited to 'platforms')
-rw-r--r--platforms/chibios/platform.mk19
-rw-r--r--platforms/chibios/syscall-fallbacks.c1
2 files changed, 12 insertions, 8 deletions
diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk
index 6b298732c2..1c8d430074 100644
--- a/platforms/chibios/platform.mk
+++ b/platforms/chibios/platform.mk
@@ -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
diff --git a/platforms/chibios/syscall-fallbacks.c b/platforms/chibios/syscall-fallbacks.c
index 4569879c7c..7150a46326 100644
--- a/platforms/chibios/syscall-fallbacks.c
+++ b/platforms/chibios/syscall-fallbacks.c
@@ -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"