aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 7cbb503a90b8293b8519886f6c4c113f45e910b8 (plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# - - - Modifiable paths - - -
DS2SDKPATH  := /opt/ds2sdk
CROSS       := /opt/mipsel-4.1.2-nopic/bin/mipsel-linux-

# - - - Libraries and includes - - -
FS_DIR       = $(DS2SDKPATH)/libsrc/fs
CONSOLE_DIR  = $(DS2SDKPATH)/libsrc/console
KEY_DIR      = $(DS2SDKPATH)/libsrc/key
ZLIB_DIR     = $(DS2SDKPATH)/libsrc/zlib

LIBS        := $(DS2SDKPATH)/lib/libds2b.a -lc -lm -lgcc
EXTLIBS     := $(DS2SDKPATH)/lib/libds2a.a

INCLUDE     := -Isource -Isource/unzip -Isource/nds -I$(DS2SDKPATH)/include \
               -I$(FS_DIR) -I$(CONSOLE_DIR) -I$(KEY_DIR) -I$(ZLIB_DIR)

LINK_SPEC   := $(DS2SDKPATH)/specs/link.xn
START_ASM   := $(DS2SDKPATH)/specs/start.S
START_O     := start.o

# - - - Names - - -
OUTPUT      := catsfc
PLUGIN_DIR  := CATSFC

# - - - Tools - - -
CC           = $(CROSS)gcc
AR           = $(CROSS)ar rcsv
LD           = $(CROSS)ld
OBJCOPY      = $(CROSS)objcopy
NM           = $(CROSS)nm
OBJDUMP      = $(CROSS)objdump

# - - - Sources and objects - - -
C_SOURCES   = source/unicode.c \
              source/unzip/explode.c source/unzip/unreduce.c \
              source/unzip/unshrink.c source/unzip/unzip.c \
              source/nds/bdf_font.c source/nds/bitmap.c source/nds/charsets.c \
              source/nds/draw.c source/nds/ds2_main.c source/nds/gcheat.c \
              source/nds/gui.c
CPP_SOURCES = source/apu.cpp source/apudebug.cpp source/c4.cpp \
              source/c4emu.cpp source/cheats2.cpp source/cheats.cpp \
              source/clip.cpp source/cpu.cpp source/cpuexec.cpp \
              source/cpuops.cpp source/data.cpp source/debug.cpp \
              source/dma.cpp source/dsp1.cpp \
              source/fxdbg.cpp source/fxemu.cpp source/fxinst.cpp \
              source/gfx.cpp source/globals.cpp source/loadzip.cpp \
              source/memmap.cpp source/movie.cpp source/netplay.cpp \
              source/obc1.cpp source/offsets.cpp source/ppu.cpp \
              source/sa1.cpp source/sa1cpu.cpp source/screenshot.cpp \
              source/sdd1.cpp source/sdd1emu.cpp source/server.cpp \
              source/seta010.cpp source/seta011.cpp source/seta018.cpp \
              source/seta.cpp source/snaporig.cpp source/snapshot.cpp \
              source/snes9x.cpp source/soundux.cpp \
              source/spc700.cpp source/spc7110.cpp \
              source/srtc.cpp \
              source/tile.cpp source/nds/cheats3.cpp \
              source/nds/displaymodes.cpp source/nds/entry.cpp
# spctool.cpp, sound.cpp, dsp* except dsp1.cpp, spc.cpp, spccycles.cpp have been deleted!
SOURCES      = $(C_SOURCES) $(CPP_SOURCES)
C_OBJECTS    = $(C_SOURCES:.c=.o)
CPP_OBJECTS  = $(CPP_SOURCES:.cpp=.o)
OBJECTS      = $(C_OBJECTS) $(CPP_OBJECTS)

# - - - Compilation flags - - -
CFLAGS := -mips32 -Os -mno-abicalls -fno-pic -fno-builtin \
	      -fno-exceptions -fno-function-sections -mlong-calls \
	      -fomit-frame-pointer -msoft-float -G 4

DEFS   := -DSPC700_C -DEXECUTE_SUPERFX_PER_LINE -DSDD1_DECOMP \
          -DVAR_CYCLES -DCPU_SHUTDOWN -DSPC700_SHUTDOWN \
          -DNO_INLINE_SET_GET -DNOASM -DHAVE_MKSTEMP '-DACCEPT_SIZE_T=size_t' \
          -DUNZIP_SUPPORT

.PHONY: clean makedirs
.SUFFIXES: .elf .dat .plg

all: $(OUTPUT).plg makedirs

# $< is the source (OUTPUT.dat); $@ is the target (OUTPUT.plg)
.dat.plg:
	$(DS2SDKPATH)/tools/makeplug $< $@

# $< is the source (OUTPUT.elf); $@ is the target (OUTPUT.dat)
.elf.dat:
	$(OBJCOPY) -x -O binary $< $@

$(OUTPUT).elf: Makefile $(OBJECTS) $(START_O) $(LINK_SPEC) $(EXTLIBS)
	$(CC) -nostdlib -static -T $(LINK_SPEC) -o $@ $(START_O) $(OBJECTS) $(EXTLIBS) $(LIBS)

$(EXTLIBS):
	$(MAKE) -C $(DS2SDKPATH)/source/

$(START_O): $(START_ASM)
	$(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $<

makedirs:
	-mkdir $(PLUGIN_DIR)/gamepak
	-mkdir $(PLUGIN_DIR)/gamecht
	-mkdir $(PLUGIN_DIR)/gamerts
	-mkdir $(PLUGIN_DIR)/gamepic

clean:
	-rm -rf $(OUTPUT).plg $(OUTPUT).dat $(OUTPUT).elf depend $(OBJECTS)

.c.o:
	$(CC) $(CFLAGS) $(INCLUDE) $(DEFS) -o $@ -c $<
.cpp.o:
	$(CC) $(CFLAGS) $(INCLUDE) $(DEFS) -fno-rtti -o $@ -c $<

Makefile: depend

depend: $(SOURCES)
	$(CC) -MM $(CFLAGS) $(INCLUDE) $(DEFS) $(SOURCES) > $@
	touch Makefile

-include depend