195 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| #
 | |
| # File: Makefile
 | |
| # Copyright (c) 2019, Dornerworks Ltd.
 | |
| #
 | |
| 
 | |
| PROJ_NAME ?= simple
 | |
| 
 | |
| include BuildEnvironment.mk
 | |
| include FreeRTOS.mk
 | |
| -include $(wildcard $(OUTDIR)/*.d)
 | |
| # Platform spcific settings for this application _____________________________________________
 | |
| 
 | |
| ARCH = RISC-V
 | |
| ARCH_PORTABLE_INC = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/
 | |
| ARCH_PORTABLE_SRC = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/port.c
 | |
| ARCH_PORTABLE_ASM = $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)/portASM.S
 | |
| 
 | |
| SDK_SRC := \
 | |
| 	$(SDK_DIR)/libwrap/sys/_exit.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/close.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/execve.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/fork.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/fstat.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/getpid.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/isatty.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/kill.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/link.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/lseek.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/openat.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/puts.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/read.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/sbrk.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/stat.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/times.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/unlink.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/wait.c \
 | |
| 	$(SDK_DIR)/libwrap/sys/write.c \
 | |
| 	$(SDK_DIR)/libwrap/stdlib/malloc.c \
 | |
| 	$(SDK_DIR)/libwrap/misc/write_hex.c \
 | |
| 	$(SDK_DIR)/env/freedom-e300-hifive1/init.c \
 | |
| 	$(SDK_DIR)/drivers/plic/plic_driver.c \
 | |
| 	$(SDK_DIR)/drivers/fe300prci/fe300prci_driver.c
 | |
| 
 | |
| SDK_ASM := \
 | |
| 	$(SDK_DIR)/env/entry.S \
 | |
| 	$(SDK_DIR)/env/start.S
 | |
| SDK_OBJS := $(patsubst %.c,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(SDK_SRC)))
 | |
| SDK_OBJS += $(patsubst %.S,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(SDK_ASM)))
 | |
| VPATH += \
 | |
| 	$(SDK_DIR)/env \
 | |
| 	$(SDK_DIR)/env/freedom-e300-hifive1 \
 | |
| 	$(SDK_DIR)/libwrap/sys \
 | |
| 	$(SDK_DIR)/libwrap/misc \
 | |
| 	$(SDK_DIR)/libwrap/stdlib \
 | |
| 	$(SDK_DIR)/drivers/plic \
 | |
| 	$(SDK_DIR)/drivers/fe300prci
 | |
| 
 | |
| PORT_OBJS := $(patsubst %.c,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(ARCH_PORTABLE_SRC)))
 | |
| PORT_OBJS += $(patsubst %.S,$(FREERTOS_BUILD_DIR)/%.o,$(notdir $(ARCH_PORTABLE_ASM)))
 | |
| FREERTOS_OBJS += $(PORT_OBJS) $(SDK_OBJS)
 | |
| VPATH += $(FREERTOS_SOURCE_DIR)/portable/GCC/$(ARCH)
 | |
| 
 | |
| 
 | |
| CFLAGS += -DportasmHANDLE_INTERRUPT=$(INTERRUPT_HANDLER)
 | |
| 
 | |
| # Set up application source, include, and object files for compilation: ______________________
 | |
| APP_SRC_DIR = .
 | |
| APP_SRC = \
 | |
| 	$(APP_SRC_DIR)/main.c \
 | |
| 	$(APP_SRC_DIR)/blinky_demo/main_blinky.c \
 | |
| 	$(APP_SRC_DIR)/full_demo/main_full.c
 | |
| 
 | |
| APP_ASM = \
 | |
| 	$(APP_SRC_DIR)/full_demo/RegTest.S
 | |
| 
 | |
| APP_INCLUDES = \
 | |
| 	-I ./ \
 | |
| 	-I $(SDK_DIR)/include \
 | |
| 	-I $(SDK_DIR)/env/freedom-e300-hifive1 \
 | |
| 	-I $(SDK_DIR)/env \
 | |
| 	-I $(FREERTOS_INC) \
 | |
| 	-I $(ARCH_PORTABLE_INC) \
 | |
| 	-I $(FREERTOS_DIR)/Demo/Common/include
 | |
| 
 | |
| APP_BUILD_DIR = $(BUILD_DIR)/app
 | |
| APP_OBJS := $(patsubst %.c,$(APP_BUILD_DIR)/%.o,$(notdir $(APP_SRC)))
 | |
| APP_OBJS += $(patsubst %.S,$(APP_BUILD_DIR)/%.o,$(notdir $(APP_ASM)))
 | |
| VPATH += \
 | |
| 	$(APP_SRC_DIR)/blinky_demo \
 | |
| 	$(APP_SRC_DIR)/full_demo \
 | |
| 	$(APP_SRC_DIR)
 | |
| 
 | |
| DEMO_COMMON_SRC =  \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/EventGroupsDemo.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/TimerDemo.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/TaskNotify.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/GenQTest.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/blocktim.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/dynamic.c \
 | |
| 	$(FREERTOS_DIR)/Demo/Common/Minimal/recmutex.c
 | |
| 
 | |
| DEMO_COMMON_OBJS := $(patsubst %.c,$(APP_BUILD_DIR)/%.o,$(notdir $(DEMO_COMMON_SRC)))
 | |
| VPATH += $(FREERTOS_DIR)/Demo/Common/Minimal
 | |
| 
 | |
| OUT_ELF = $(BUILD_DIR)/FreeRTOS-$(PROJ_NAME).elf
 | |
| 
 | |
| # Need to tell FreeRTOS where to find the FreeRTOSConfig.h __________________________________
 | |
| FREERTOS_INCLUDES += \
 | |
| 	-I ./ \
 | |
| 	-I $(ARCH_PORTABLE_INC) \
 | |
| 	-I $(SDK_DIR)/include \
 | |
| 	-I $(SDK_DIR)/env/freedom-e300-hifive1 \
 | |
| 	-I $(SDK_DIR)/env \
 | |
| 	-I $(SDK_DIR)/drivers \
 | |
| 	-I $(FREERTOS_DIR)/Demo/Common/include \
 | |
| 	-I $(FREERTOS_SOURCE_DIR)/portable/GCC/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions
 | |
| 
 | |
| # List of object files to compile for the system:
 | |
| OUT_OBJS = \
 | |
| 	$(APP_OBJS) \
 | |
| 	$(DEMO_COMMON_OBJS) \
 | |
| 	$(FREERTOS_OBJS)
 | |
| 
 | |
| BUILD_DIRECTORIES = \
 | |
| 	$(APP_BUILD_DIR) \
 | |
| 	$(FREERTOS_BUILD_DIR)
 | |
| 
 | |
| LDFLAGS += -Wl,-Map,"$(BUILD_DIR)/$(PROJ_NAME).map"
 | |
| 
 | |
| .PHONY: debug clean app_compile debug-app frtos_compile print-info out_elf sim-qemu gdb
 | |
| all: directories $(OUT_OBJS) $(OUT_ELF)
 | |
| directories: $(BUILD_DIRECTORIES)
 | |
| app_compile: directories $(APP_OBJS)
 | |
| frtos_compile: directories $(FREERTOS_OBJS)
 | |
| out_elf: directories $(OUT_ELF)
 | |
| 
 | |
| # Notes
 | |
| # Each "Module" needs
 | |
| #  - Lists of source files
 | |
| #  - Source Directory(ies)
 | |
| #  - Include Directory List (with -I prepending each entry)
 | |
| #  - Build Directory
 | |
| #  - Object list
 | |
| #    - OBJS = $(patsubst %.c,$(MODULE_BUILD_DIR)/%.o,$(notdir $(MODULE_SRC)))
 | |
| #  - Add source direcories to VPATH
 | |
| # In the master make file
 | |
| #  - Module build directory must be created
 | |
| #  - Object Rules can be done with
 | |
| #    - $(MODULE_BUILD_DIR)/%.o : %.c
 | |
| 
 | |
| # Compile Object Files ____________________________________________________________________
 | |
| $(APP_BUILD_DIR)/%.o : %.c
 | |
| 	@echo "[APP Objects] : $@ ______________________________________________________________"
 | |
| 	@echo "Building: $<"
 | |
| 	$(GCC) $(CFLAGS) $(APP_INCLUDES) -o $@ -c $<
 | |
| 	@echo "Finished Building: $<"
 | |
| 
 | |
| $(APP_BUILD_DIR)/%.o : %.S
 | |
| 	@echo "[APP Objects] : $@ ______________________________________________________________"
 | |
| 	@echo "Building: $<"
 | |
| 	$(GCC) $(ASMFLAGS) $(APP_INCLUDES) $(FREERTOS_INCLUDES) -o $@ -c $<
 | |
| 	@echo "Finished Building: $<"
 | |
| 
 | |
| $(FREERTOS_BUILD_DIR)/%.o : %.c
 | |
| 	@echo "[FreeRTOS Objects] : $@ __________________________________________________________"
 | |
| 	@echo "Building: $<"
 | |
| 	$(GCC) $(CFLAGS) $(FREERTOS_INCLUDES) -o $@ -c $<
 | |
| 	@echo "Finished Building: $<"
 | |
| 
 | |
| $(FREERTOS_BUILD_DIR)/%.o : %.S
 | |
| 	@echo "[FreeRTOS Objects] : $@ __________________________________________________________"
 | |
| 	@echo "Building: $<"
 | |
| 	$(GCC) $(ASMFLAGS) $(FREERTOS_INCLUDES) -o $@ -c $<
 | |
| 	@echo "Finished Building: $<"
 | |
| 
 | |
| # Generate ELF ___________________________________________________________________________
 | |
| $(OUT_ELF): $(OUT_OBJS)
 | |
| 	@echo '___________________________________________________________________________________'
 | |
| 	@echo 'Building target: $@'
 | |
| 	@echo '_______________________________'
 | |
| 	$(GCC) $(LDFLAGS) $(LDOPTS) -o $@ $(OUT_OBJS) $(LIB_FLAGS)
 | |
| 	@echo 'Finished building target: $@'
 | |
| 	@echo ' '
 | |
| 
 | |
| .PHONY:  build_lib
 | |
| 
 | |
| $(BUILD_DIRECTORIES):
 | |
| 	mkdir -p $@
 | |
| 
 | |
| clean:
 | |
| 	rm -rv $(BUILD_DIR)
 | |
| 
 | |
| gdb: $(OUT_ELF)
 | |
| 	$(GDB) -iex "set mem inaccessible-by-default off" -iex "set arch riscv:rv32" -iex "set riscv use_compressed_breakpoint off"
 |