diff --git a/Makefile b/Makefile index c2541332..5631c2f5 100644 --- a/Makefile +++ b/Makefile @@ -180,7 +180,7 @@ CFLAGS+=$(WOLFPSA_CFLAGS) # Setup default optimizations (for GCC) ifeq ($(USE_GCC_HEADLESS),1) - CFLAGS+=-Wall -Wextra -Wno-main -ffreestanding -nostartfiles + CFLAGS+=-Wall -Wextra -Wno-main -ffreestanding CFLAGS+=-ffunction-sections -fdata-sections -fomit-frame-pointer # Allow unused parameters and functions CFLAGS+=-Wno-unused-parameter -Wno-unused-function diff --git a/arch.mk b/arch.mk index 849fa036..570cf3b2 100644 --- a/arch.mk +++ b/arch.mk @@ -134,8 +134,12 @@ endif ifeq ($(ARCH),ARM) CROSS_COMPILE?=arm-none-eabi- CFLAGS+=-DARCH_ARM - CFLAGS+=-mthumb -mlittle-endian -mthumb-interwork - LDFLAGS+=-mthumb -mlittle-endian -mthumb-interwork + CFLAGS+=-mthumb -mlittle-endian + LDFLAGS+=-mthumb -mlittle-endian + ifeq ($(USE_GCC),1) + CFLAGS+=-mthumb-interwork + LDFLAGS+=-mthumb-interwork + endif ## Target specific configuration ifeq ($(TARGET),samr21) diff --git a/include/wolfboot/wolfboot.h b/include/wolfboot/wolfboot.h index f7b5fdb0..33d29923 100644 --- a/include/wolfboot/wolfboot.h +++ b/include/wolfboot/wolfboot.h @@ -46,7 +46,11 @@ extern "C" { #ifndef RAMFUNCTION # if defined(__WOLFBOOT) && defined(RAM_CODE) # if defined(ARCH_ARM) -# define RAMFUNCTION __attribute__((used,section(".ramcode"),long_call)) +# if defined(__clang__) +# define RAMFUNCTION __attribute__((used,section(".ramcode"))) +# else +# define RAMFUNCTION __attribute__((used,section(".ramcode"),long_call)) +# endif # elif defined(ARCH_PPC) # define RAMFUNCTION __attribute__((used,section(".ramcode"),longcall)) # else diff --git a/options.mk b/options.mk index 108e330a..c9884eed 100644 --- a/options.mk +++ b/options.mk @@ -1030,9 +1030,11 @@ CFLAGS+=$(CFLAGS_EXTRA) OBJS+=$(OBJS_EXTRA) ifeq ($(USE_GCC_HEADLESS),1) - ifneq ($(ARCH),RENESAS_RX) - ifneq ($(ARCH),AURIX_TC3) - CFLAGS+="-Wstack-usage=$(STACK_USAGE)" + ifeq ($(USE_GCC),1) + ifneq ($(ARCH),RENESAS_RX) + ifneq ($(ARCH),AURIX_TC3) + CFLAGS+="-Wstack-usage=$(STACK_USAGE)" + endif endif endif endif diff --git a/src/update_flash.c b/src/update_flash.c index 3927df33..e3c4de3a 100644 --- a/src/update_flash.c +++ b/src/update_flash.c @@ -754,7 +754,7 @@ out: #ifdef WOLFBOOT_ARMORED -# ifdef __GNUC__ +# if defined(__GNUC__) && !defined(__clang__) # pragma GCC push_options # pragma GCC optimize("O0") # elif defined(__IAR_SYSTEMS_ICC__) @@ -1474,7 +1474,7 @@ void RAMFUNCTION wolfBoot_start(void) } #ifdef WOLFBOOT_ARMORED -# ifdef __GNUC__ +# if defined(__GNUC__) && !defined(__clang__) # pragma GCC pop_options # elif defined(__IAR_SYSTEMS_ICC__) # pragma optimize=default