-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
64 lines (44 loc) · 1.54 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
SDCC?=sdcc
SDAS?=sdasz80
MAKEBIN?=makebin
UNIX_DD?=dd
UNIX_SED?=sed
UNIX_AWK?=gawk
UNIX_GREP?=grep
ROM16KBLOCKS?=2
ROM16KSKIP?=1
CRTOBJ?=sdcc/crt/crt0msx.32k.4000.rel
CRTSRC?=sdcc/crt/crt0msx.32k.4000.s
CFLAGS?=-mz80 --no-std-crt0 --fsigned-char
LDFLAGS?=--code-loc 0x4020 --data-loc 0xc000
SRCDIR=src
DISTDIR=dist
SRCFILES=$(SRCDIR)/main.c $(filter-out $(SRCDIR)/main.c, $(wildcard $(SRCDIR)/*.c))
OBJFILES := $(patsubst $(SRCDIR)/%.c,$(DISTDIR)/%.rel,$(SRCFILES))
all: $(DISTDIR) $(DISTDIR)/program.rom
rm -f $(DISTDIR)/*.asm $(DISTDIR)/*.lst $(DISTDIR)/*.sym $(DISTDIR)/*.ihx $(DISTDIR)/*.lk $(DISTDIR)/*.map $(DISTDIR)/*.noi
$(DISTDIR):
mkdir -p $@
$(DISTDIR)/%.rom: $(DISTDIR)/%.ddmem
$(UNIX_DD) if=$< of=$@ bs=16384 skip=$(ROM16KSKIP) count=$(ROM16KBLOCKS)
$(DISTDIR)/%.ddmem: $(DISTDIR)/%.ihx
$(MAKEBIN) -s 65536 < $< > $@
$(DISTDIR)/%.noi: $(DISTDIR)/%.ihx
$(DISTDIR)/%.sdccsym: $(DISTDIR)/%.noi
$(UNIX_AWK) 'BEGIN { FS=" "; } /DEF.*/ { print $$2 ": equ 0" substr($$3,3) "h"; }' < $< > $<tmp
-$(UNIX_GREP) -v "_end: equ " $<tmp > $@
$(DISTDIR)/program.ihx: $(OBJFILES) $(CRTOBJ)
$(SDCC) $(CFLAGS) $(LDFLAGS) -o$@ $(CRTOBJ) $(OBJFILES)
$(DISTDIR)/heap.rel: $(DISTDIR)/heap.s
$(SDAS) -o heap.rel heap.s
$(DISTDIR)/heap.s: $(SDCC_HOME)/lib/src/z80/heap.s
$(UNIX_SED) -e 's/1023/9000/' "$(SDCC_HOME)"/lib/src/z80/heap.s > $(DISTDIR)/heap.s
$(DISTDIR)/%.rel: $(SRCDIR)/%.c
$(SDCC) -c $(CFLAGS) $< -o $@
$(CRTOBJ): $(CRTSRC)
$(SDAS) -o $(CRTOBJ) $(CRTSRC)
clean:
$(RM) dist/*
version:
$(SDCC) -v
.PRECIOUS: %.rel %.ddmem %.ihx %.noi %.rst