1CC := gcc
2BIN := posix_tcp_demo
3
4BUILD_DIR := build
5BUILD_DIR_ABS         := $(abspath $(BUILD_DIR))
6
7FREERTOS_DIR_REL := ../../../FreeRTOS
8FREERTOS_DIR := $(abspath $(FREERTOS_DIR_REL))
9
10FREERTOS_PLUS_DIR_REL := ../../../FreeRTOS-Plus
11FREERTOS_PLUS_DIR := $(abspath $(FREERTOS_PLUS_DIR_REL))
12
13KERNEL_DIR            := ${FREERTOS_DIR}/Source
14FREERTOS_PLUS_TCP_DIR := ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-TCP/source
15
16INCLUDE_DIRS := -I.
17INCLUDE_DIRS += -I./Trace_Recorder_Configuration
18INCLUDE_DIRS += -I${KERNEL_DIR}/include
19INCLUDE_DIRS += -I${KERNEL_DIR}/portable/ThirdParty/GCC/Posix
20INCLUDE_DIRS += -I${KERNEL_DIR}/portable/ThirdParty/GCC/Posix/utils
21INCLUDE_DIRS += -I${FREERTOS_DIR}/Demo/Common/include
22INCLUDE_DIRS += -I${FREERTOS_PLUS_TCP_DIR}/portable/NetworkInterface/linux/
23INCLUDE_DIRS += -I${FREERTOS_PLUS_TCP_DIR}/include/
24INCLUDE_DIRS += -I${FREERTOS_PLUS_TCP_DIR}/portable/Compiler/GCC/
25INCLUDE_DIRS += -I${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/include
26INCLUDE_DIRS += -I${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/kernelports/FreeRTOS/include
27INCLUDE_DIRS += -I${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/streamports/RingBuffer/include
28
29
30# FreeRTOS Kernel source files
31SOURCE_FILES :=
32SOURCE_FILES += ${FREERTOS_DIR}/Source/event_groups.c
33SOURCE_FILES += ${FREERTOS_DIR}/Source/list.c
34SOURCE_FILES += ${FREERTOS_DIR}/Source/queue.c
35SOURCE_FILES += ${FREERTOS_DIR}/Source/stream_buffer.c
36SOURCE_FILES += ${FREERTOS_DIR}/Source/tasks.c
37SOURCE_FILES += ${FREERTOS_DIR}/Source/timers.c
38
39# FreeRTOS Kernel POSIX Port
40SOURCE_FILES          += ${KERNEL_DIR}/portable/ThirdParty/GCC/Posix/utils/wait_for_event.c
41SOURCE_FILES          += ${KERNEL_DIR}/portable/ThirdParty/GCC/Posix/port.c
42
43# FreeRTOS+TCP demo source file
44SOURCE_FILES += SimpleTCPEchoServer.c
45SOURCE_FILES += TCPEchoClient_SingleTasks.c
46SOURCE_FILES += console.c
47SOURCE_FILES += main.c
48SOURCE_FILES += main_networking.c
49SOURCE_FILES += runtime_stats_hooks.c
50
51# Memory manager (use malloc() / free() )
52SOURCE_FILES += ${FREERTOS_DIR}/Source/portable/MemMang/heap_3.c
53
54# FreeRTOS TCP
55SOURCE_FILES += $(wildcard ${FREERTOS_PLUS_TCP_DIR}/*.c )
56SOURCE_FILES += ${FREERTOS_PLUS_TCP_DIR}/portable/BufferManagement/BufferAllocation_2.c
57SOURCE_FILES += ${FREERTOS_PLUS_TCP_DIR}/portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c
58SOURCE_FILES += ${FREERTOS_PLUS_TCP_DIR}/portable/NetworkInterface/libslirp/MBuffNetworkInterface.c
59
60CFLAGS 			:= -ggdb3
61LDFLAGS			:= -ggdb3 -pthread
62
63# Get libslirp package configuration (header and library paths)
64CFLAGS += $(shell pkg-config --cflags slirp)
65LDFLAGS += $(shell pkg-config --libs slirp)
66
67CPPFLAGS		=    $(INCLUDE_DIRS) -DBUILD_DIR=\"$(BUILD_DIR_ABS)\"
68
69DEFINES := -DHEAP3
70CPPFLAGS += $(DEFINES)
71
72ifndef TRACE_ON_ENTER
73  TRACE_ON_ENTER = 1
74endif
75
76ifeq ($(TRACE_ON_ENTER),1)
77  CPPFLAGS		+= -DTRACE_ON_ENTER=1
78else
79  CPPFLAGS		+= -DTRACE_ON_ENTER=0
80endif
81
82ifeq ($(COVERAGE_TEST),1)
83  CPPFLAGS		+= -DprojCOVERAGE_TEST=1
84else
85  CPPFLAGS		+= -DprojCOVERAGE_TEST=0
86# Trace library.
87  SOURCE_FILES	+= ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/kernelports/FreeRTOS/trcKernelPort.c
88  SOURCE_FILES	+= ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/streamports/RingBuffer/trcStreamPort.c
89  SOURCE_FILES	+= $(wildcard ${FREERTOS_PLUS_DIR}/Source/FreeRTOS-Plus-Trace/*.c )
90endif
91
92ifdef PROFILE
93  CFLAGS		+=   -pg  -O0
94  LDFLAGS		+=   -pg  -O0
95else
96  CFLAGS		+=   -O3
97  LDFLAGS		+=   -O3
98endif
99
100OBJ_FILES = $(SOURCE_FILES:%.c=$(BUILD_DIR)/%.o)
101
102DEP_FILE = $(OBJ_FILES:%.o=%.d)
103
104${BIN} : $(BUILD_DIR)/$(BIN)
105
106${BUILD_DIR}/${BIN} : ${OBJ_FILES}
107	-mkdir -p ${@D}
108	$(CC) $^ ${LDFLAGS} -o $@
109
110
111-include ${DEP_FILE}
112
113${BUILD_DIR}/%.o : %.c Makefile
114	-mkdir -p $(@D)
115	$(CC) $(CPPFLAGS) $(CFLAGS) -MMD -c $< -o $@
116
117.PHONY: clean
118
119clean:
120	-rm -rf $(BUILD_DIR)
121
122GPROF_OPTIONS := --directory-path=$(INCLUDE_DIRS)
123profile:
124	gprof -a -p --all-lines $(GPROF_OPTIONS) $(BUILD_DIR)/$(BIN) $(BUILD_DIR)/gmon.out > $(BUILD_DIR)/prof_flat.txt
125	gprof -a --graph $(GPROF_OPTIONS) $(BUILD_DIR)/$(BIN) $(BUILD_DIR)/gmon.out > $(BUILD_DIR)/prof_call_graph.txt
126