]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V-Qemu-sifive_e-FreedomStudio/Makefile
2beb8817170f9f5414db71588de29aa4180cc56e
[freertos] / FreeRTOS / Demo / RISC-V-Qemu-sifive_e-FreedomStudio / Makefile
1 #\r
2 # File: Makefile\r
3 # Copyright (c) 2019, Dornerworks Ltd.\r
4 #\r
5 \r
6 PROJ_NAME ?= simple\r
7 \r
8 include BuildEnvironment.mk\r
9 include FreeRTOS.mk\r
10 -include $(wildcard $(OUTDIR)/*.d)\r
11 # Platform spcific settings for this application _____________________________________________\r
12 \r
13 ARCH = RISC-V-RV32\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
17 \r
18 SDK_SRC := \\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
43 \r
44 SDK_ASM := \\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
49 VPATH += \\r
50         $(SDK_DIR)/env \\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
57 \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
62 \r
63 \r
64 CFLAGS += -DportasmHANDLE_INTERRUPT=$(INTERRUPT_HANDLER)\r
65 \r
66 # Set up application source, include, and object files for compilation: ______________________\r
67 APP_SRC_DIR = .\r
68 APP_SRC = \\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
72 \r
73 APP_ASM = \\r
74         $(APP_SRC_DIR)/full_demo/RegTest.S\r
75 \r
76 APP_INCLUDES = \\r
77         -I ./ \\r
78         -I $(SDK_DIR)/include \\r
79         -I $(SDK_DIR)/env/freedom-e300-hifive1 \\r
80         -I $(SDK_DIR)/env \\r
81         -I $(FREERTOS_INC) \\r
82         -I $(ARCH_PORTABLE_INC) \\r
83         -I $(FREERTOS_DIR)/Demo/Common/include\r
84 \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
88 VPATH += \\r
89         $(APP_SRC_DIR)/blinky_demo \\r
90         $(APP_SRC_DIR)/full_demo \\r
91         $(APP_SRC_DIR)\r
92 \r
93 DEMO_COMMON_SRC =  \\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
101 \r
102 DEMO_COMMON_OBJS := $(patsubst %.c,$(APP_BUILD_DIR)/%.o,$(notdir $(DEMO_COMMON_SRC)))\r
103 VPATH += $(FREERTOS_DIR)/Demo/Common/Minimal\r
104 \r
105 OUT_ELF = $(BUILD_DIR)/FreeRTOS-$(PROJ_NAME).elf\r
106 \r
107 # Need to tell FreeRTOS where to find the FreeRTOSConfig.h __________________________________\r
108 FREERTOS_INCLUDES += \\r
109         -I ./ \\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
117 \r
118 # List of object files to compile for the system:\r
119 OUT_OBJS = \\r
120         $(APP_OBJS) \\r
121         $(DEMO_COMMON_OBJS) \\r
122         $(FREERTOS_OBJS)\r
123 \r
124 BUILD_DIRECTORIES = \\r
125         $(APP_BUILD_DIR) \\r
126         $(FREERTOS_BUILD_DIR)\r
127 \r
128 LDFLAGS += -Wl,-Map,"$(BUILD_DIR)/$(PROJ_NAME).map"\r
129 \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
136 \r
137 # Notes\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
143 #  - Object list\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
150 \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
157 \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
163 \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
169 \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
175 \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
183         @echo ' '\r
184 \r
185 .PHONY:  build_lib\r
186 \r
187 $(BUILD_DIRECTORIES):\r
188         mkdir -p $@\r
189 \r
190 clean:\r
191         rm -rv $(BUILD_DIR)\r
192 \r
193 sim-qemu: $(OUT_ELF)\r
194         qemu-system-riscv32 -kernel $^  -S -s -machine sifive_e\r
195 \r
196 gdb: $(OUT_ELF)\r
197         $(GDB) -iex "set mem inaccessible-by-default off" -iex "set arch riscv:rv32" -iex "set riscv use_compressed_breakpoint off"\r