1CC = arm-none-eabi-gcc
2SIZE = arm-none-eabi-size
3BIN := freertos_tcp_mps2_demo.axf
4
5BUILD_DIR := build
6
7FREERTOS_DIR_REL := ../../../FreeRTOS
8FREERTOS_DIR := $(abspath $(FREERTOS_DIR_REL))
9KERNEL_DIR := $(FREERTOS_DIR)/Source
10
11FREERTOS_PLUS_DIR_REL := ../../../FreeRTOS-Plus
12FREERTOS_PLUS_DIR := $(abspath $(FREERTOS_PLUS_DIR_REL))
13
14INCLUDE_DIRS += -I.
15
16FREERTOS_TCP = ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-TCP
17
18# Demo Source Files
19SOURCE_FILES += startup.c
20SOURCE_FILES += syscalls.c
21SOURCE_FILES += main.c
22SOURCE_FILES += main_networking.c
23SOURCE_FILES += TCPEchoClient_SingleTasks.c
24
25INCLUDE_DIRS += -ICMSIS
26
27# FreeRTOS Kernel
28INCLUDE_DIRS += -I$(KERNEL_DIR)/include
29
30SOURCE_FILES += $(KERNEL_DIR)/tasks.c
31SOURCE_FILES += $(KERNEL_DIR)/list.c
32SOURCE_FILES += $(KERNEL_DIR)/queue.c
33SOURCE_FILES += $(KERNEL_DIR)/event_groups.c
34
35# FreeRTOS Kernel ARM Cortex-M3 Port
36INCLUDE_DIRS += -I$(KERNEL_DIR)/portable/GCC/ARM_CM3
37
38SOURCE_FILES += $(KERNEL_DIR)/portable/GCC/ARM_CM3/port.c
39SOURCE_FILES += ${KERNEL_DIR}/portable/MemMang/heap_3.c
40
41# FreeRTOS+TCP
42INCLUDE_DIRS += -I${FREERTOS_TCP}/source/include/
43
44SOURCE_FILES += $(wildcard ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-TCP/source/*.c )
45
46# FreeRTOS+TCP Port for ARM MPS2 SoC
47INCLUDE_DIRS += -I${FREERTOS_TCP}/source/portable/NetworkInterface/MPS2_AN385/ether_lan9118
48INCLUDE_DIRS += -I${FREERTOS_TCP}/source/portable/Compiler/GCC
49
50SOURCE_FILES += ${FREERTOS_TCP}/source/portable/BufferManagement/BufferAllocation_2.c
51SOURCE_FILES += ${FREERTOS_TCP}/source/portable/NetworkInterface/MPS2_AN385/NetworkInterface.c
52SOURCE_FILES += ${FREERTOS_TCP}/source/portable/NetworkInterface/MPS2_AN385/ether_lan9118/smsc9220_eth_drv.c
53
54CPPFLAGS += -DHEAP3
55
56ifeq ($(PICOLIBC), 1)
57    CFLAGS += --specs=picolibc.specs -DPICOLIBC_INTEGER_PRINTF_SCANF --oslib=semihost
58endif
59CFLAGS += -mthumb -mcpu=cortex-m3
60ifeq ($(DEBUG), 1)
61    CFLAGS += -g3 -Og -ffunction-sections -fdata-sections
62else
63    CFLAGS += -Os -ffunction-sections -fdata-sections
64endif
65#CFLAGS += -flto
66CFLAGS += -Wall -Wextra -Wshadow
67#CFLAGS += -Wpedantic -fanalyzer
68CFLAGS += -MMD
69CFLAGS += $(INCLUDE_DIRS)
70
71LDFLAGS = -T mps2_m3.ld
72LDFLAGS += -Xlinker -Map=${BUILD_DIR}/output.map
73LDFLAGS += -Xlinker --gc-sections
74#LDFLAGS += -Xlinker --print-gc-sections
75ifeq ($(PICOLIBC), 1)
76    LDFLAGS += -nostartfiles
77else
78    LDFLAGS += -nostartfiles -specs=nano.specs -specs=nosys.specs -specs=rdimon.specs
79endif
80
81OBJ_FILES := $(SOURCE_FILES:%.c=$(BUILD_DIR)/%.o)
82
83.PHONY: clean
84
85$(BUILD_DIR)/$(BIN): $(OBJ_FILES)
86	$(CC) $(CFLAGS) $(LDFLAGS) $+ -o $(@)
87	$(SIZE) $(@)
88
89%.d: %.c
90	@set -e; rm -f $@; \
91	$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
92	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
93	rm -f $@.$$$$
94
95INCLUDES := $(SOURCE_FILES:%.c=$(BUILD_DIR)/%.d)
96-include $(INCLUDES)
97
98${BUILD_DIR}/%.o: %.c Makefile
99	-mkdir -p $(@D)
100	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
101
102clean:
103	-rm -rf build
104