122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
| GIT_VERSION := $(shell git describe --tags)
 | |
| 
 | |
| # There is no 64-bit gcc on Raspberry Pi, so use the 32-bit version
 | |
| ifneq (,$(wildcard /etc/rpi-issue))
 | |
| TRGT       ?= riscv32-unknown-elf-
 | |
| else
 | |
| TRGT       ?= riscv64-unknown-elf-
 | |
| endif
 | |
| 
 | |
| CC         := $(TRGT)gcc
 | |
| CXX        := $(TRGT)g++
 | |
| OBJCOPY    := $(TRGT)objcopy
 | |
| 
 | |
| RM         := rm -rf
 | |
| COPY       := cp -a
 | |
| PATH_SEP   := /
 | |
| 
 | |
| ifeq ($(OS),Windows_NT)
 | |
| COPY       := copy
 | |
| RM         := del
 | |
| PATH_SEP   := \\
 | |
| endif
 | |
| 
 | |
| BASE_DIR   := .
 | |
| LD_DIR     := $(BASE_DIR)/ld
 | |
| LDSCRIPT   := $(BASE_DIR)/ld/linker.ld
 | |
| ADD_CFLAGS := -I$(BASE_DIR)/include -I$(BASE_DIR)/src/wasm3/ -D__vexriscv__ \
 | |
| 			  -DFOMU -Dd_m3FixedHeap=8192
 | |
| 
 | |
| ADD_LFLAGS := -lm
 | |
| PACKAGE    := wasm3
 | |
| 
 | |
| LTO        := -flto -Wl,--allow-multiple-definition
 | |
| 
 | |
| LDSCRIPTS  := $(LDSCRIPT) $(LD_DIR)/output_format.ld $(LD_DIR)/regions.ld
 | |
| SRC_DIR    := $(BASE_DIR)/src
 | |
| DBG_CFLAGS := -ggdb -g -DDEBUG -Wall
 | |
| DBG_LFLAGS := -ggdb -g -Wall
 | |
| CFLAGS     := $(ADD_CFLAGS) \
 | |
| 			  -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable \
 | |
| 			  -Wno-missing-field-initializers \
 | |
| 			  -ffunction-sections -fdata-sections -fno-common \
 | |
| 			  -fomit-frame-pointer -Os $(LTO) \
 | |
| 			  -march=rv32i -mabi=ilp32 \
 | |
| 			  -DGIT_VERSION=u\"$(GIT_VERSION)\" -std=gnu11
 | |
| CXXFLAGS   := $(CFLAGS) -std=c++11 -fno-rtti -fno-exceptions
 | |
| LFLAGS     := $(CFLAGS) $(ADD_LFLAGS) -L$(LD_DIR) \
 | |
| 			  -nostartfiles $(LTO) \
 | |
| 			  -Wl,--gc-sections \
 | |
| 			  -Wl,--script=$(LDSCRIPT) \
 | |
| 			  -Wl,--build-id=none
 | |
| 
 | |
| OBJ_DIR    := .obj
 | |
| 
 | |
| CSOURCES   := $(shell find -L $(SRC_DIR) -type f -name '*.c')
 | |
| CPPSOURCES := $(shell find -L $(SRC_DIR) -type f -name '*.cpp')
 | |
| ASOURCES   := $(shell find -L $(SRC_DIR) -type f -name '*.S')
 | |
| COBJS      := $(addprefix $(OBJ_DIR)/,$(CSOURCES:.c=.o))
 | |
| CXXOBJS    := $(addprefix $(OBJ_DIR)/,$(CPPSOURCES:.cpp=.o))
 | |
| AOBJS      := $(addprefix $(OBJ_DIR)/,$(ASOURCES:.S=.o))
 | |
| OBJECTS    := $(COBJS) $(CXXOBJS) $(AOBJS)
 | |
| VPATH      := $(SRC_DIR)
 | |
| 
 | |
| QUIET      := @
 | |
| 
 | |
| ALL        := all
 | |
| TARGET     := $(PACKAGE).elf
 | |
| CLEAN      := clean
 | |
| 
 | |
| $(ALL): $(TARGET) $(PACKAGE).bin $(PACKAGE).ihex $(PACKAGE).dfu
 | |
| 
 | |
| #$(OBJECTS): | $(OBJ_DIR)
 | |
| 
 | |
| $(TARGET): $(OBJECTS) $(LDSCRIPTS)
 | |
| 	$(QUIET) echo "  LD       $@"
 | |
| 	$(QUIET) $(CC) $(OBJECTS) $(LFLAGS) -o $@
 | |
| 
 | |
| $(PACKAGE).bin: $(TARGET)
 | |
| 	$(QUIET) echo "  OBJCOPY  $@"
 | |
| 	$(QUIET) $(OBJCOPY) -O binary $(TARGET) $@
 | |
| 
 | |
| $(PACKAGE).dfu: $(PACKAGE).bin
 | |
| 	$(QUIET) echo "  DFU      $@"
 | |
| 	$(QUIET) $(COPY) $(PACKAGE).bin $@
 | |
| 	$(QUIET) dfu-suffix -v 1209 -p 70b1 -a $@
 | |
| 
 | |
| $(PACKAGE).ihex: $(TARGET)
 | |
| 	$(QUIET) echo "  IHEX     $(PACKAGE).ihex"
 | |
| 	$(QUIET) $(OBJCOPY) -O ihex $(TARGET) $@
 | |
| 
 | |
| $(DEBUG): CFLAGS += $(DBG_CFLAGS)
 | |
| $(DEBUG): LFLAGS += $(DBG_LFLAGS)
 | |
| CFLAGS += $(DBG_CFLAGS)
 | |
| LFLAGS += $(DBG_LFLAGS)
 | |
| $(DEBUG): $(TARGET)
 | |
| 
 | |
| $(OBJ_DIR):
 | |
| 	$(QUIET) mkdir $(OBJ_DIR)
 | |
| 
 | |
| $(COBJS) : $(OBJ_DIR)/%.o : %.c $(BASE_DIR)/Makefile
 | |
| 	$(QUIET) mkdir -p $(@D)
 | |
| 	$(QUIET) echo "  CC       $<	$@"
 | |
| 	$(QUIET) $(CC) -c $< $(CFLAGS) -o $@ -MMD
 | |
| 
 | |
| $(OBJ_DIR)/%.o: %.cpp
 | |
| 	$(QUIET) mkdir -p $(@D)
 | |
| 	$(QUIET) echo "  CXX      $<	$@"
 | |
| 	$(QUIET) $(CXX) -c $< $(CXXFLAGS) -o $@ -MMD
 | |
| 
 | |
| $(OBJ_DIR)/%.o: %.S
 | |
| 	$(QUIET) mkdir -p $(@D)
 | |
| 	$(QUIET) echo "  AS       $<	$@"
 | |
| 	$(QUIET) $(CC) -x assembler-with-cpp -c $< $(CFLAGS) -o $@ -MMD
 | |
| 
 | |
| .PHONY: clean
 | |
| 
 | |
| clean:
 | |
| 	- $(RM) -rf $(OBJ_DIR)
 | |
| 	- $(RM) $(TARGET) $(PACKAGE).bin $(PACKAGE).symbol $(PACKAGE).ihex $(PACKAGE).dfu
 | |
| 
 | |
| -include $(OBJECTS:.o=.d)
 |