3 # Copyright (c) 2019, Dornerworks Ltd.
\r
8 include BuildEnvironment.mk
\r
10 -include $(wildcard $(OUTDIR)/*.d)
\r
11 # Platform spcific settings for this application _____________________________________________
\r
14 ARCH_PORTABLE_INC = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/
\r
15 ARCH_PORTABLE_SRC = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/port.c
\r
16 ARCH_PORTABLE_ASM = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/portASM.S
\r
19 $(SDK_DIR)/libwrap/sys/_exit.c \
\r
20 $(SDK_DIR)/libwrap/sys/close.c \
\r
21 $(SDK_DIR)/libwrap/sys/execve.c \
\r
22 $(SDK_DIR)/libwrap/sys/fork.c \
\r
23 $(SDK_DIR)/libwrap/sys/fstat.c \
\r
24 $(SDK_DIR)/libwrap/sys/getpid.c \
\r
25 $(SDK_DIR)/libwrap/sys/isatty.c \
\r
26 $(SDK_DIR)/libwrap/sys/kill.c \
\r
27 $(SDK_DIR)/libwrap/sys/link.c \
\r
28 $(SDK_DIR)/libwrap/sys/lseek.c \
\r
29 $(SDK_DIR)/libwrap/sys/openat.c \
\r
30 $(SDK_DIR)/libwrap/sys/puts.c \
\r
31 $(SDK_DIR)/libwrap/sys/read.c \
\r
32 $(SDK_DIR)/libwrap/sys/sbrk.c \
\r
33 $(SDK_DIR)/libwrap/sys/stat.c \
\r
34 $(SDK_DIR)/libwrap/sys/times.c \
\r
35 $(SDK_DIR)/libwrap/sys/unlink.c \
\r
36 $(SDK_DIR)/libwrap/sys/wait.c \
\r
37 $(SDK_DIR)/libwrap/sys/write.c \
\r
38 $(SDK_DIR)/libwrap/stdlib/malloc.c \
\r
39 $(SDK_DIR)/libwrap/misc/write_hex.c \
\r
40 $(SDK_DIR)/env/freedom-e300-hifive1/init.c \
\r
41 $(SDK_DIR)/drivers/plic/plic_driver.c \
\r
42 $(SDK_DIR)/drivers/fe300prci/fe300prci_driver.c
\r
45 $(SDK_DIR)/env/entry.S \
\r
46 $(SDK_DIR)/env/start.S
\r
47 SDK_OBJS := $(patsubst %.c,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(SDK_SRC)))
\r
48 SDK_OBJS += $(patsubst %.S,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(SDK_ASM)))
\r
51 $(SDK_DIR)/env/freedom-e300-hifive1 \
\r
52 $(SDK_DIR)/libwrap/sys \
\r
53 $(SDK_DIR)/libwrap/misc \
\r
54 $(SDK_DIR)/libwrap/stdlib \
\r
55 $(SDK_DIR)/drivers/plic \
\r
56 $(SDK_DIR)/drivers/fe300prci
\r
58 PORT_OBJS := $(patsubst %.c,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(ARCH_PORTABLE_SRC)))
\r
59 PORT_OBJS += $(patsubst %.S,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(ARCH_PORTABLE_ASM)))
\r
60 FREERTOS_OBJS += $(PORT_OBJS) $(SDK_OBJS)
\r
61 VPATH += $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)
\r
64 CFLAGS += -DportasmHANDLE_INTERRUPT=$(INTERRUPT_HANDLER)
\r
66 # Set up application source, include, and object files for compilation: ______________________
\r
69 $(APP_SRC_DIR)/main.c \
\r
70 $(APP_SRC_DIR)/blinky_demo/main_blinky.c \
\r
71 $(APP_SRC_DIR)/full_demo/main_full.c
\r
74 $(APP_SRC_DIR)/full_demo/RegTest.S
\r
78 -I $(SDK_DIR)/include \
\r
79 -I $(SDK_DIR)/env/freedom-e300-hifive1 \
\r
81 -I $(FREERTOS_INC) \
\r
82 -I $(ARCH_PORTABLE_INC) \
\r
83 -I $(FREERTOS_DIR)/Demo/Common/include
\r
85 APP_BUILD_DIR = $(BUILD_DIR)/app
\r
86 APP_OBJS := $(patsubst %.c,$(APP_BUILD_DIR)/%.o,$(notdir $(APP_SRC)))
\r
87 APP_OBJS += $(patsubst %.S,$(APP_BUILD_DIR)/%.o,$(notdir $(APP_ASM)))
\r
89 $(APP_SRC_DIR)/blinky_demo \
\r
90 $(APP_SRC_DIR)/full_demo \
\r
94 $(FREERTOS_DIR)/Demo/Common/Minimal/EventGroupsDemo.c \
\r
95 $(FREERTOS_DIR)/Demo/Common/Minimal/TimerDemo.c \
\r
96 $(FREERTOS_DIR)/Demo/Common/Minimal/TaskNotify.c \
\r
97 $(FREERTOS_DIR)/Demo/Common/Minimal/GenQTest.c \
\r
98 $(FREERTOS_DIR)/Demo/Common/Minimal/blocktim.c \
\r
99 $(FREERTOS_DIR)/Demo/Common/Minimal/dynamic.c \
\r
100 $(FREERTOS_DIR)/Demo/Common/Minimal/recmutex.c
\r
102 DEMO_COMMON_OBJS := $(patsubst %.c,$(APP_BUILD_DIR)/%.o,$(notdir $(DEMO_COMMON_SRC)))
\r
103 VPATH += $(FREERTOS_DIR)/Demo/Common/Minimal
\r
105 OUT_ELF = $(BUILD_DIR)/FreeRTOS-$(PROJ_NAME).elf
\r
107 # Need to tell FreeRTOS where to find the FreeRTOSConfig.h __________________________________
\r
108 FREERTOS_INCLUDES += \
\r
110 -I $(ARCH_PORTABLE_INC) \
\r
111 -I $(SDK_DIR)/include \
\r
112 -I $(SDK_DIR)/env/freedom-e300-hifive1 \
\r
113 -I $(SDK_DIR)/env \
\r
114 -I $(SDK_DIR)/drivers \
\r
115 -I $(FREERTOS_DIR)/Demo/Common/include \
\r
116 -I $(FREERTOS_SOURCE_DIR)/portable/GCC/RISC-V-RV32/chip_specific_extensions/RV32I_CLINT_no_extensions
\r
118 # List of object files to compile for the system:
\r
121 $(DEMO_COMMON_OBJS) \
\r
124 BUILD_DIRECTORIES = \
\r
126 $(FREERTOS_BUILD_DIR)
\r
128 LDFLAGS += -Wl,-Map,"$(BUILD_DIR)/$(PROJ_NAME).map"
\r
130 .PHONY: debug clean app_compile debug-app frtos_compile print-info out_elf sim-qemu gdb
\r
131 all: directories $(OUT_OBJS) $(OUT_ELF)
\r
132 directories: $(BUILD_DIRECTORIES)
\r
133 app_compile: directories $(APP_OBJS)
\r
134 frtos_compile: directories $(FREERTOS_OBJS)
\r
135 out_elf: directories $(OUT_ELF)
\r
138 # Each "Module" needs
\r
139 # - Lists of source files
\r
140 # - Source Directory(ies)
\r
141 # - Include Directory List (with -I prepending each entry)
\r
142 # - Build Directory
\r
144 # - OBJS = $(patsubst %.c,$(MODULE_BUILD_DIR)/%.o,$(notdir $(MODULE_SRC)))
\r
145 # - Add source direcories to VPATH
\r
146 # In the master make file
\r
147 # - Module build directory must be created
\r
148 # - Object Rules can be done with
\r
149 # - $(MODULE_BUILD_DIR)/%.o : %.c
\r
151 # Compile Object Files ____________________________________________________________________
\r
152 $(APP_BUILD_DIR)/%.o : %.c
\r
153 @echo "[APP Objects] : $@ ______________________________________________________________"
\r
154 @echo "Building: $<"
\r
155 $(GCC) $(CFLAGS) $(APP_INCLUDES) -o $@ -c $<
\r
156 @echo "Finished Building: $<"
\r
158 $(APP_BUILD_DIR)/%.o : %.S
\r
159 @echo "[APP Objects] : $@ ______________________________________________________________"
\r
160 @echo "Building: $<"
\r
161 $(GCC) $(ASMFLAGS) $(APP_INCLUDES) $(FREERTOS_INCLUDES) -o $@ -c $<
\r
162 @echo "Finished Building: $<"
\r
164 $(FREERTOS_BUILD_DIR)/%.o : %.c
\r
165 @echo "[FreeRTOS Objects] : $@ __________________________________________________________"
\r
166 @echo "Building: $<"
\r
167 $(GCC) $(CFLAGS) $(FREERTOS_INCLUDES) -o $@ -c $<
\r
168 @echo "Finished Building: $<"
\r
170 $(FREERTOS_BUILD_DIR)/%.o : %.S
\r
171 @echo "[FreeRTOS Objects] : $@ __________________________________________________________"
\r
172 @echo "Building: $<"
\r
173 $(GCC) $(ASMFLAGS) $(FREERTOS_INCLUDES) -o $@ -c $<
\r
174 @echo "Finished Building: $<"
\r
176 # Generate ELF ___________________________________________________________________________
\r
177 $(OUT_ELF): $(OUT_OBJS)
\r
178 @echo '___________________________________________________________________________________'
\r
179 @echo 'Building target: $@'
\r
180 @echo '_______________________________'
\r
181 $(GCC) $(LDFLAGS) $(LDOPTS) -o $@ $(OUT_OBJS) $(LIB_FLAGS)
\r
182 @echo 'Finished building target: $@'
\r
187 $(BUILD_DIRECTORIES):
\r
191 rm -rv $(BUILD_DIR)
\r
193 sim-qemu: $(OUT_ELF)
\r
194 qemu-system-riscv32 -kernel $^ -S -s -machine sifive_e
\r
197 $(GDB) -iex "set mem inaccessible-by-default off" -iex "set arch riscv:rv32" -iex "set riscv use_compressed_breakpoint off"
\r