summaryrefslogtreecommitdiff
path: root/examples/build_system
diff options
context:
space:
mode:
authorhathach <[email protected]>2024-04-24 19:21:26 +0700
committerhathach <[email protected]>2024-04-24 19:21:26 +0700
commita7bf0e3e7f7799c28e370826710810033c117744 (patch)
tree1ac7cb708010473050ceeab0f6ff6c7750eaa6d1 /examples/build_system
parent366f1cf1863bad626af10347f8ff3d0ef7f6ea2b (diff)
clang make work for samd21
Diffstat (limited to 'examples/build_system')
-rw-r--r--examples/build_system/make/cpu/cortex-m0.mk8
-rw-r--r--examples/build_system/make/cpu/cortex-m0plus.mk8
-rw-r--r--examples/build_system/make/cpu/cortex-m23.mk8
-rw-r--r--examples/build_system/make/cpu/cortex-m3.mk13
-rw-r--r--examples/build_system/make/cpu/cortex-m33-nodsp-nofp.mk14
-rw-r--r--examples/build_system/make/cpu/cortex-m33.mk12
-rw-r--r--examples/build_system/make/cpu/cortex-m4.mk9
-rw-r--r--examples/build_system/make/cpu/cortex-m7.mk8
-rw-r--r--examples/build_system/make/cpu/msp430.mk4
-rw-r--r--examples/build_system/make/make.mk28
-rw-r--r--examples/build_system/make/rules.mk2
-rw-r--r--examples/build_system/make/toolchain/arm_clang.mk10
-rw-r--r--examples/build_system/make/toolchain/arm_gcc.mk68
-rw-r--r--examples/build_system/make/toolchain/clang_rules.mk1
-rw-r--r--examples/build_system/make/toolchain/gcc_common.mk71
-rw-r--r--examples/build_system/make/toolchain/gcc_rules.mk (renamed from examples/build_system/make/toolchain/arm_gcc_rules.mk)9
-rw-r--r--examples/build_system/make/toolchain/iar_rules.mk (renamed from examples/build_system/make/toolchain/arm_iar_rules.mk)0
17 files changed, 186 insertions, 87 deletions
diff --git a/examples/build_system/make/cpu/cortex-m0.mk b/examples/build_system/make/cpu/cortex-m0.mk
index feb0f395b..c2c33a2ee 100644
--- a/examples/build_system/make/cpu/cortex-m0.mk
+++ b/examples/build_system/make/cpu/cortex-m0.mk
@@ -4,10 +4,18 @@ ifeq ($(TOOLCHAIN),gcc)
-mcpu=cortex-m0 \
-mfloat-abi=soft \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m0 \
+
else ifeq ($(TOOLCHAIN),iar)
# IAR Flags
CFLAGS += --cpu cortex-m0
ASFLAGS += --cpu cortex-m0
+
+else
+ $(error "TOOLCHAIN is not supported")
endif
# For freeRTOS port source
diff --git a/examples/build_system/make/cpu/cortex-m0plus.mk b/examples/build_system/make/cpu/cortex-m0plus.mk
index b416b7a4a..fe8feb227 100644
--- a/examples/build_system/make/cpu/cortex-m0plus.mk
+++ b/examples/build_system/make/cpu/cortex-m0plus.mk
@@ -4,10 +4,18 @@ ifeq ($(TOOLCHAIN),gcc)
-mcpu=cortex-m0plus \
-mfloat-abi=soft \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m0plus \
+
else ifeq ($(TOOLCHAIN),iar)
# IAR Flags
CFLAGS += --cpu cortex-m0+
ASFLAGS += --cpu cortex-m0+
+
+else
+ $(error "TOOLCHAIN is not supported")
endif
# For freeRTOS port source
diff --git a/examples/build_system/make/cpu/cortex-m23.mk b/examples/build_system/make/cpu/cortex-m23.mk
index 29542d8e8..7ab758352 100644
--- a/examples/build_system/make/cpu/cortex-m23.mk
+++ b/examples/build_system/make/cpu/cortex-m23.mk
@@ -4,10 +4,18 @@ ifeq ($(TOOLCHAIN),gcc)
-mcpu=cortex-m23 \
-mfloat-abi=soft \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m23 \
+
else ifeq ($(TOOLCHAIN),iar)
# IAR Flags
CFLAGS += --cpu cortex-m23
ASFLAGS += --cpu cortex-m23
+
+else
+ $(error "TOOLCHAIN is not supported")
endif
# For freeRTOS port source
diff --git a/examples/build_system/make/cpu/cortex-m3.mk b/examples/build_system/make/cpu/cortex-m3.mk
index 7a34b9e04..b6325313f 100644
--- a/examples/build_system/make/cpu/cortex-m3.mk
+++ b/examples/build_system/make/cpu/cortex-m3.mk
@@ -4,13 +4,18 @@ ifeq ($(TOOLCHAIN),gcc)
-mcpu=cortex-m3 \
-mfloat-abi=soft \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m3 \
+
else ifeq ($(TOOLCHAIN),iar)
# IAR Flags
- CFLAGS += \
- --cpu cortex-m3 \
+ CFLAGS += --cpu cortex-m3
+ ASFLAGS += --cpu cortex-m3
- ASFLAGS += \
- --cpu cortex-m3
+else
+ $(error "TOOLCHAIN is not supported")
endif
# For freeRTOS port source
diff --git a/examples/build_system/make/cpu/cortex-m33-nodsp-nofp.mk b/examples/build_system/make/cpu/cortex-m33-nodsp-nofp.mk
index c65f24376..405053dd0 100644
--- a/examples/build_system/make/cpu/cortex-m33-nodsp-nofp.mk
+++ b/examples/build_system/make/cpu/cortex-m33-nodsp-nofp.mk
@@ -1,16 +1,24 @@
ifeq ($(TOOLCHAIN),gcc)
- CFLAGS += \
+ CFLAGS += \
-mthumb \
-mcpu=cortex-m33+nodsp \
-mfloat-abi=soft \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m33 \
+ -mfpu=softvp \
+
else ifeq ($(TOOLCHAIN),iar)
- CFLAGS += \
+ CFLAGS += \
--cpu cortex-m33+nodsp \
- ASFLAGS += \
+ ASFLAGS += \
--cpu cortex-m33+nodsp \
+else
+ $(error "TOOLCHAIN is not supported")
endif
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM33_NTZ/non_secure
diff --git a/examples/build_system/make/cpu/cortex-m33.mk b/examples/build_system/make/cpu/cortex-m33.mk
index fe5b7b380..47b0eaecd 100644
--- a/examples/build_system/make/cpu/cortex-m33.mk
+++ b/examples/build_system/make/cpu/cortex-m33.mk
@@ -5,15 +5,23 @@ ifeq ($(TOOLCHAIN),gcc)
-mfloat-abi=hard \
-mfpu=fpv5-sp-d16 \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m33 \
+ -mfpu=fpv5-sp-d16 \
+
else ifeq ($(TOOLCHAIN),iar)
- CFLAGS += \
+ CFLAGS += \
--cpu cortex-m33 \
--fpu VFPv5-SP \
- ASFLAGS += \
+ ASFLAGS += \
--cpu cortex-m33 \
--fpu VFPv5-SP \
+else
+ $(error "TOOLCHAIN is not supported")
endif
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM33_NTZ/non_secure
diff --git a/examples/build_system/make/cpu/cortex-m4.mk b/examples/build_system/make/cpu/cortex-m4.mk
index d8776b5d8..4e16819d1 100644
--- a/examples/build_system/make/cpu/cortex-m4.mk
+++ b/examples/build_system/make/cpu/cortex-m4.mk
@@ -5,9 +5,18 @@ ifeq ($(TOOLCHAIN),gcc)
-mfloat-abi=hard \
-mfpu=fpv4-sp-d16 \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m4 \
+ -mfpu=fpv4-sp-d16 \
+
else ifeq ($(TOOLCHAIN),iar)
CFLAGS += --cpu cortex-m4 --fpu VFPv4
ASFLAGS += --cpu cortex-m4 --fpu VFPv4
+
+else
+ $(error "TOOLCHAIN is not supported")
endif
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM4F
diff --git a/examples/build_system/make/cpu/cortex-m7.mk b/examples/build_system/make/cpu/cortex-m7.mk
index 0e3461787..3e6116179 100644
--- a/examples/build_system/make/cpu/cortex-m7.mk
+++ b/examples/build_system/make/cpu/cortex-m7.mk
@@ -5,6 +5,12 @@ ifeq ($(TOOLCHAIN),gcc)
-mfloat-abi=hard \
-mfpu=fpv5-d16 \
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m7 \
+ -mfpu=fpv5-d16 \
+
else ifeq ($(TOOLCHAIN),iar)
CFLAGS += \
--cpu cortex-m7 \
@@ -14,6 +20,8 @@ else ifeq ($(TOOLCHAIN),iar)
--cpu cortex-m7 \
--fpu VFPv5_D16 \
+else
+ $(error "TOOLCHAIN is not supported")
endif
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM7/r0p1
diff --git a/examples/build_system/make/cpu/msp430.mk b/examples/build_system/make/cpu/msp430.mk
index 06340d23b..6daa2c38d 100644
--- a/examples/build_system/make/cpu/msp430.mk
+++ b/examples/build_system/make/cpu/msp430.mk
@@ -1,7 +1,11 @@
ifeq ($(TOOLCHAIN),gcc)
# nothing to add
+else ifeq ($(TOOLCHAIN),clang)
+ # nothing to add
else ifeq ($(TOOLCHAIN),iar)
# nothing to add
+else
+ $(error "TOOLCHAIN is not supported")
endif
# For freeRTOS port source
diff --git a/examples/build_system/make/make.mk b/examples/build_system/make/make.mk
index 2437b8766..1ec42cb50 100644
--- a/examples/build_system/make/make.mk
+++ b/examples/build_system/make/make.mk
@@ -2,6 +2,26 @@
# Common make definition for all examples
# ---------------------------------------
+#-------------------------------------------------------------
+# Toolchain
+# Can be changed via TOOLCHAIN=gcc|iar or CC=arm-none-eabi-gcc|iccarm|clang
+#-------------------------------------------------------------
+
+ifneq (,$(findstring clang,$(CC)))
+ TOOLCHAIN = clang
+else ifneq (,$(findstring iccarm,$(CC)))
+ TOOLCHAIN = iar
+else ifneq (,$(findstring gcc,$(CC)))
+ TOOLCHAIN = gcc
+endif
+
+# Default to GCC
+ifndef TOOLCHAIN
+ TOOLCHAIN = gcc
+endif
+
+$(info TOOLCHAIN: $(TOOLCHAIN))
+
#-------------- TOP and CURRENT_PATH ------------
# Set TOP to be the path to get from the current directory (where make was invoked) to the top of the tree.
@@ -75,12 +95,6 @@ else
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c))
endif
-#-------------------------------------------------------------
-# Toolchain
-# Can be changed via TOOLCHAIN=gcc|iar or CC=arm-none-eabi-gcc|iccarm|clang
-#-------------------------------------------------------------
-TOOLCHAIN ?= gcc
-
#-------------- Source files and compiler flags --------------
# tinyusb makefile
include $(TOP)/src/tinyusb.mk
@@ -112,7 +126,7 @@ endif
# Logger: default is uart, can be set to rtt or swo
ifneq ($(LOGGER),)
- CMAKE_DEFSYM += -DLOGGER=$(LOGGER)
+ CMAKE_DEFSYM += -DLOGGER=$(LOGGER)
endif
ifeq ($(LOGGER),rtt)
diff --git a/examples/build_system/make/rules.mk b/examples/build_system/make/rules.mk
index 78fce49d2..7b6b339ed 100644
--- a/examples/build_system/make/rules.mk
+++ b/examples/build_system/make/rules.mk
@@ -24,7 +24,7 @@ vpath %.c . $(TOP)
vpath %.s . $(TOP)
vpath %.S . $(TOP)
-include ${TOP}/examples/build_system/make/toolchain/arm_$(TOOLCHAIN)_rules.mk
+include ${TOP}/examples/build_system/make/toolchain/$(TOOLCHAIN)_rules.mk
# ---------------------------------------
# Compiler Flags
diff --git a/examples/build_system/make/toolchain/arm_clang.mk b/examples/build_system/make/toolchain/arm_clang.mk
new file mode 100644
index 000000000..97face39c
--- /dev/null
+++ b/examples/build_system/make/toolchain/arm_clang.mk
@@ -0,0 +1,10 @@
+CC = clang
+CXX = clang++
+AS = $(CC) -x assembler-with-cpp
+LD = $(CC)
+
+GDB = $(CROSS_COMPILE)gdb
+OBJCOPY = llvm-objcopy
+SIZE = llvm-size
+
+include ${TOP}/examples/build_system/make/toolchain/gcc_common.mk
diff --git a/examples/build_system/make/toolchain/arm_gcc.mk b/examples/build_system/make/toolchain/arm_gcc.mk
index c34581ae2..a8576f8ee 100644
--- a/examples/build_system/make/toolchain/arm_gcc.mk
+++ b/examples/build_system/make/toolchain/arm_gcc.mk
@@ -12,73 +12,9 @@ GDB = $(CROSS_COMPILE)gdb
OBJCOPY = $(CROSS_COMPILE)objcopy
SIZE = $(CROSS_COMPILE)size
-CC_VERSION := $(shell $(CC) -dumpversion)
-CC_VERSION_MAJOR = $(firstword $(subst ., ,$(CC_VERSION)))
-
-# ---------------------------------------
-# Compiler Flags
-# ---------------------------------------
CFLAGS += \
- -MD \
- -ggdb \
- -fdata-sections \
- -ffunction-sections \
-fsingle-precision-constant \
- -fno-strict-aliasing \
- -Wall \
- -Wextra \
- -Werror \
- -Wfatal-errors \
- -Wdouble-promotion \
- -Wstrict-prototypes \
- -Wstrict-overflow \
- -Werror-implicit-function-declaration \
- -Wfloat-equal \
- -Wundef \
- -Wshadow \
- -Wwrite-strings \
- -Wsign-compare \
- -Wmissing-format-attribute \
- -Wunreachable-code \
- -Wcast-align \
- -Wcast-function-type \
- -Wcast-qual \
- -Wnull-dereference \
- -Wuninitialized \
- -Wunused \
- -Wreturn-type \
- -Wredundant-decls \
-
-# conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
-# -Wconversion
-
-# Size Optimization as default
-CFLAGS_OPTIMIZED ?= -Os
-
-# Debugging/Optimization
-ifeq ($(DEBUG), 1)
- CFLAGS += -O0
- NO_LTO = 1
-else
- CFLAGS += $(CFLAGS_OPTIMIZED)
-endif
-
-# ---------------------------------------
-# Linker Flags
-# ---------------------------------------
-LDFLAGS += \
- -Wl,-cref \
- -Wl,-gc-sections \
-# renesas rx does not support --print-memory-usage flags
-ifneq ($(FAMILY),rx)
-LDFLAGS += -Wl,--print-memory-usage
-endif
+LIBS += -lgcc -lm -lnosys
-# from version 12
-ifeq ($(strip $(if $(CMDEXE),\
- $(shell if $(CC_VERSION_MAJOR) geq 12 (echo 1) else (echo 0)),\
- $(shell expr $(CC_VERSION_MAJOR) \>= 12))), 1)
-LDFLAGS += -Wl,--no-warn-rwx-segment
-endif
+include ${TOP}/examples/build_system/make/toolchain/gcc_common.mk
diff --git a/examples/build_system/make/toolchain/clang_rules.mk b/examples/build_system/make/toolchain/clang_rules.mk
new file mode 100644
index 000000000..341f705b1
--- /dev/null
+++ b/examples/build_system/make/toolchain/clang_rules.mk
@@ -0,0 +1 @@
+include ${TOP}/examples/build_system/make/toolchain/gcc_rules.mk
diff --git a/examples/build_system/make/toolchain/gcc_common.mk b/examples/build_system/make/toolchain/gcc_common.mk
new file mode 100644
index 000000000..6986d8bba
--- /dev/null
+++ b/examples/build_system/make/toolchain/gcc_common.mk
@@ -0,0 +1,71 @@
+# ---------------------------------------
+# Compiler Flags
+# ---------------------------------------
+CFLAGS += \
+ -MD \
+ -ggdb \
+ -fdata-sections \
+ -ffunction-sections \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wextra \
+ -Werror \
+ -Wfatal-errors \
+ -Wdouble-promotion \
+ -Wstrict-prototypes \
+ -Wstrict-overflow \
+ -Werror-implicit-function-declaration \
+ -Wfloat-equal \
+ -Wundef \
+ -Wshadow \
+ -Wwrite-strings \
+ -Wsign-compare \
+ -Wmissing-format-attribute \
+ -Wunreachable-code \
+ -Wcast-align \
+ -Wcast-function-type \
+ -Wcast-qual \
+ -Wnull-dereference \
+ -Wuninitialized \
+ -Wunused \
+ -Wreturn-type \
+ -Wredundant-decls \
+
+# conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
+# -Wconversion
+
+# Size Optimization as default
+CFLAGS_OPTIMIZED ?= -Os
+
+# Debugging/Optimization
+ifeq ($(DEBUG), 1)
+ CFLAGS += -O0
+ NO_LTO = 1
+else
+ CFLAGS += $(CFLAGS_OPTIMIZED)
+endif
+
+# ---------------------------------------
+# Linker Flags
+# ---------------------------------------
+LDFLAGS += \
+ -Wl,--cref \
+ -Wl,-gc-sections \
+
+# renesas rx does not support --print-memory-usage flags
+ifneq ($(FAMILY),rx)
+LDFLAGS += -Wl,--print-memory-usage
+endif
+
+ifeq ($(TOOLCHAIN),gcc)
+CC_VERSION := $(shell $(CC) -dumpversion)
+CC_VERSION_MAJOR = $(firstword $(subst ., ,$(CC_VERSION)))
+
+# from version 12
+ifeq ($(strip $(if $(CMDEXE),\
+ $(shell if $(CC_VERSION_MAJOR) geq 12 (echo 1) else (echo 0)),\
+ $(shell expr $(CC_VERSION_MAJOR) \>= 12))), 1)
+LDFLAGS += -Wl,--no-warn-rwx-segment
+endif
+endif
diff --git a/examples/build_system/make/toolchain/arm_gcc_rules.mk b/examples/build_system/make/toolchain/gcc_rules.mk
index d295879d9..3cd87db64 100644
--- a/examples/build_system/make/toolchain/arm_gcc_rules.mk
+++ b/examples/build_system/make/toolchain/gcc_rules.mk
@@ -21,8 +21,13 @@ ifneq ($(CFLAGS_SKIP),)
CFLAGS := $(filter-out $(CFLAGS_SKIP),$(CFLAGS))
endif
+ifeq ($(TOOLCHAIN),clang)
+LDFLAGS += $(CFLAGS) $(LDFLAGS_CLANG)
+else
LDFLAGS += $(CFLAGS) $(LDFLAGS_GCC)
+endif
+# TODO should be removed after all examples are updated
ifdef LD_FILE
LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE)
endif
@@ -33,11 +38,7 @@ endif
ASFLAGS += $(CFLAGS)
-LIBS_GCC ?= -lgcc -lm -lnosys
-
# libc
-LIBS += $(LIBS_GCC)
-
ifneq ($(BOARD), spresense)
LIBS += -lc
endif
diff --git a/examples/build_system/make/toolchain/arm_iar_rules.mk b/examples/build_system/make/toolchain/iar_rules.mk
index 2c066f6da..2c066f6da 100644
--- a/examples/build_system/make/toolchain/arm_iar_rules.mk
+++ b/examples/build_system/make/toolchain/iar_rules.mk