-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
57 lines (44 loc) · 1.22 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
BUILD_DIR := build
SCRIPT_DIR := scripts
OUT_DIR := out
SCRIPT_EXTRACT := $(SCRIPT_DIR)/extract.rb
SCRIPT_INJECT := $(SCRIPT_DIR)/inject.rb
SCRIPT_CHECK := $(SCRIPT_DIR)/check.rb
TARGET := $(OUT_DIR)/BOOT.BIN
TARGET_ELF := $(BUILD_DIR)/boot.elf
LD_SCRIPT := $(BUILD_DIR)/link.ld
LD_SCRIPT_IN := link.ld.in
META_FILE := meta.yml
CC := mwccpsp.exe
ARCH := mips-linux-gnu
LD := $(ARCH)-ld
OBJCOPY := $(ARCH)-objcopy
CFLAGS := -W all -O4 -nostdinc -gccinc -gccdep -Iinclude -MD
SRC := $(wildcard src/*.c)
OBJ := $(SRC:%=$(BUILD_DIR)/obj/%.o)
DEP := $(OBJ:.o=.d)
.PHONY: all
all: check
-include $(DEP)
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)
.PHONY: mrproper
mrproper: clean
rm -rf $(TARGET)
.PHONY: re
re: mrproper all
.PHONY: always-remake
.PHONY: check
check: $(TARGET) $(SCRIPT_CHECK) always-remake
ruby $(SCRIPT_CHECK)
$(TARGET): $(TARGET_ELF) $(SCRIPT_INJECT)
ruby $(SCRIPT_INJECT)
$(TARGET_ELF): $(OBJ) $(LD_SCRIPT)
$(LD) -EL -T $(LD_SCRIPT)
$(LD_SCRIPT): $(SCRIPT_EXTRACT) $(LD_SCRIPT_IN) $(META_FILE)
ruby $(SCRIPT_EXTRACT)
$(BUILD_DIR)/obj/%.c.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJCOPY) $@ --set-section-alignment .text=64