MIPS/resources/project/Makefile

70 lines
2.3 KiB
Makefile
Raw Normal View History

2021-08-14 20:18:43 +08:00
CROSS_COMPILE ?= mipsel-linux-gnu-
CC = ${CROSS_COMPILE}gcc
LD = ${CROSS_COMPILE}ld
OBJCOPY = ${CROSS_COMPILE}objcopy
OBJDUMP = ${CROSS_COMPILE}objdump
AR = ${CROSS_COMPILE}ar
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
CFLAGS = -O3 -fno-pic -mno-branch-likely -mno-abicalls -msoft-float -fno-builtin -mno-shared -mips1 -EL -nostdinc -nostdlib
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
OBJ_DIR = obj
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
USER_DIR = src
USER_OBJ_DIR = obj/user
USER_SRC = $(wildcard $(USER_DIR)/*.S) $(wildcard $(USER_DIR)/*.c)
USER_OBJ := $(patsubst $(USER_DIR)/%.S, $(USER_OBJ_DIR)/%.o, $(USER_SRC))
USER_OBJ := $(patsubst $(USER_DIR)/%.c, $(USER_OBJ_DIR)/%.o, $(USER_OBJ))
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
TINY_C_DIR = lib
TINY_C_OBJ_DIR = obj/tinyc
TINY_C_SRC = $(wildcard $(TINY_C_DIR)/*.S) $(wildcard $(TINY_C_DIR)/*.c)
TINY_C_OBJ := $(patsubst $(TINY_C_DIR)/%.S, $(TINY_C_OBJ_DIR)/%.o, $(TINY_C_SRC))
TINY_C_OBJ := $(patsubst $(TINY_C_DIR)/%.c, $(TINY_C_OBJ_DIR)/%.o, $(TINY_C_OBJ))
TINY_C_TARGET = $(TINY_C_OBJ_DIR)/libtinyc.a
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
default: all
2021-08-13 20:40:53 +08:00
2021-08-14 21:24:07 +08:00
%.o : %.S
$(CC) -c -I include $(CFLAGS) -o $@ $<
%.o : %.c
2021-08-14 20:18:43 +08:00
$(CC) -c -I include $(CFLAGS) -o $@ $<
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
$(TINY_C_TARGET): $(TINY_C_OBJ)
$(AR) -cr $@ $^
2021-08-13 20:40:53 +08:00
bin.lds: bin.lds.S
2021-08-14 20:18:43 +08:00
$(CC) -EL -E -P -o $@ $<
2021-08-13 20:40:53 +08:00
2021-08-14 20:18:43 +08:00
main.elf: start.o bin.lds $(TINY_C_TARGET) $(USER_OBJ)
$(LD) -g -EL -T bin.lds start.o $(USER_OBJ) $(TINY_C_TARGET) -o $(OBJ_DIR)/$@
$(OBJDUMP) -alD $(OBJ_DIR)/$@ > $(OBJ_DIR)/test.s
axi_ram.bin: main.elf
$(OBJCOPY) -O binary -j .text -j .data $(OBJ_DIR)/$< $(OBJ_DIR)/$@
all: env convert axi_ram.bin
./convert axi_ram.bin $(OBJ_DIR)/
2021-08-13 20:40:53 +08:00
convert: convert.c
clang -o convert convert.c
2021-08-14 20:18:43 +08:00
env:
mkdir -p $(USER_OBJ_DIR)
mkdir -p $(TINY_C_OBJ_DIR)
2021-08-13 20:40:53 +08:00
clean:
rm -f *.o *.bin *.elf *.a testbin *.s *.vlog *.coe *.data *.mif
rm -f bin.lds convert
2021-08-14 20:18:43 +08:00
rm -rf obj
2021-08-13 20:40:53 +08:00
help:
@echo "####################################################################"
@echo "### help for compiling our awesome project ###"
@echo "####################################################################"
@echo "### options: ###"
@echo "### make : get compiled result, which is saved in ./obj ###"
@echo "### make clean: remove *.o, *.a, and ./obj ###"
@echo "### make help : show help information ###"
@echo "####################################################################"