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