-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
90 lines (77 loc) · 3.34 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
.SUFFIXES:
ifeq ($(strip $(DEVKITPPC)),)
$(error "no DEVKITPPC defined. export DEVKITPPC=<path to>devkitPPC")
endif
THUMB=0
include $(DEVKITPPC)/wii_rules
#---------------------------------------------------------------------------------
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := src
ARM := src/arm
DATA :=
#---------------------------------------------------------------------------------
CFLAGS += -g -O2 -Wall $(MACHDEP) $(INCLUDE)
CXXFLAGS += $(CFLAGS)
LDFLAGS += -g $(MACHDEP) -Wl,-Map,$(notdir $@).map
#---------------------------------------------------------------------------------
LIBS := -lwiiuse -lbte -logc -lm
#---------------------------------------------------------------------------------
LIBDIRS :=
#---------------------------------------------------------------------------------
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) \
$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
LD := $(CC)
else
LD := $(CXX)
endif
OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
OFILES := $(addprefix $(BUILD)/, $(OFILES_SOURCES))
INCLUDE := -I$(DEVKITPPC)/../powerpc-eabi/include/ \
-I$(CURDIR)/include \
$(foreach dir,$(LIBDIRS), -I$(dir)/include) \
-I$(CURDIR)/$(BUILD) \
-I$(LIBOGC_INC)
LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS), -L$(dir)/lib)
#---------------------------------------------------------------------------------
.PHONY: all clean run
all: $(TARGET).dol
$(TARGET).dol: $(TARGET).elf
$(STRIP) $<
elf2dol $< $@
$(TARGET).elf: include/arm.h $(OFILES)
$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
#---------------------------------------------------------------------------------
$(BUILD)/%.o: $(SOURCES)/%.c | $(BUILD)
$(CC) $(CFLAGS) -MMD -MP -MF $(BUILD)/$*.d -c $< -o $@
$(BUILD)/%.o: $(SOURCES)/%.cpp | $(BUILD)
$(CXX) $(CXXFLAGS) -MMD -MP -MF $(BUILD)/$*.d -c $< -o $@
#$(BUILD)/%.o: $(SOURCES)/%.s | $(BUILD)
# $(AS) $(ASFLAGS) -I ../bytecode $< -o $@
include/arm.h : $(ARM)/arm.bin
@echo "\n#include <stdbool.h>" > $@
@echo "#include <stdint.h>" >> $@
@echo "static const unsigned int arm_code[] __attribute__((section(\".arm_code\"))) = {" >> $@
@hexdump -v -e '"0x" 4/1 "%02x" ",\n"' $(ARM)/arm.bin >> $@
@echo "};" >> $@
@echo "void run_arm(uint32_t* code, int len, bool thumb);" >> $@
$(ARM)/arm.bin : $(ARM)/arm.elf
arm-none-eabi-objcopy -Obinary $< $@
$(ARM)/arm.elf : $(wildcard $(ARM)/*.s) bytecode/bytecode $(ARM)/linker.ld
@if [ $(THUMB) = 0 ]; then \
arm-none-eabi-as -march=armv5te -mcpu=arm926ej-s -mbig-endian $(ARM)/arm_code.s -o src/arm/arm.o; \
else \
arm-none-eabi-as -mthumb -march=armv5te -mcpu=arm926ej-s -mbig-endian $(ARM)/arm_code.s -o src/arm/arm.o; \
fi
arm-none-eabi-ld -T src/arm/linker.ld src/arm/arm.o -o $@
$(BUILD):
mkdir -p $(BUILD)
-include $(wildcard $(BUILD)/*.d)
clean:
rm -rf $(BUILD) $(TARGET).elf $(TARGET).dol $(TARGET).elf.map include/arm.h src/arm/arm.elf src/arm/arm.bin src/arm/arm.o
run:
wiiload $(TARGET).dol