summaryrefslogtreecommitdiff
path: root/core/cortex-m/build.mk
diff options
context:
space:
mode:
Diffstat (limited to 'core/cortex-m/build.mk')
-rw-r--r--core/cortex-m/build.mk14
1 files changed, 12 insertions, 2 deletions
diff --git a/core/cortex-m/build.mk b/core/cortex-m/build.mk
index ad7ab6eacc..be41a12b9e 100644
--- a/core/cortex-m/build.mk
+++ b/core/cortex-m/build.mk
@@ -15,7 +15,13 @@ $(call set-option,CROSS_COMPILE,\
CFLAGS_FPU-$(CONFIG_FPU)=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
# CPU specific compilation flags
-CFLAGS_CPU+=-mthumb -Os -mno-sched-prolog
+CFLAGS_CPU+=-mthumb -Os
+ifeq ($(cc-name),clang)
+# Link compiler-rt when using clang, so clang finds the builtins it provides.
+LDFLAGS_EXTRA+=-lclang_rt.builtins-arm
+else
+CFLAGS_CPU+=-mno-sched-prolog
+endif
CFLAGS_CPU+=-mno-unaligned-access
CFLAGS_CPU+=$(CFLAGS_FPU-y)
@@ -24,7 +30,11 @@ CFLAGS_CPU+=-flto
LDFLAGS_EXTRA+=-flto
endif
-core-y=cpu.o debug.o init.o ldivmod.o llsr.o uldivmod.o vecttable.o
+core-y=cpu.o debug.o init.o vecttable.o
+# When using clang, we get these as builtins from compiler-rt.
+ifneq ($(cc-name),clang)
+core-y+=ldivmod.o llsr.o uldivmod.o
+endif
core-$(CONFIG_AES)+=aes.o
core-$(CONFIG_AES_GCM)+=ghash.o
core-$(CONFIG_ARMV7M_CACHE)+=cache.o