-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
130 lines (98 loc) · 3.5 KB
/
Makefile
File metadata and controls
130 lines (98 loc) · 3.5 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
###############################################################################
# Makefile for the project M40Demo
###############################################################################
## General Flags
PROJECT = uzemaze
GAME = uzemaze
INFO = gameinfo.properties
MCU = atmega644
TARGET = $(GAME).elf
CC = avr-gcc
OUTDIR = .
OBJDIR = _obj_
DEPDIR = _dep_
DIRS = $(OUTDIR) $(OBJDIR) $(DEPDIR)
## Kernel settings
KERNEL_DIR = ../../uzebox/kernel
KERNEL_OPTIONS = -DVIDEO_MODE=40
KERNEL_OPTIONS += -DSOUND_MIXER=MIXER_TYPE_INLINE
#KERNEL_OPTIONS += -DM40_MATTEL=1
KERNEL_OPTIONS += -DM40_C64_GRAPHICS=1
#KERNEL_OPTIONS += -DM40_C64_ALPHA=1
#KERNEL_OPTIONS += -DM40_C64_MIXED=1
#KERNEL_OPTIONS += -DM40_IBM_ASCII=1
#KERNEL_OPTIONS += -DVRAM_TILES_H=32
#KERNEL_OPTIONS += -DVRAM_TILES_V=24
## Packrom (.uze)
PACKROM_DIR = ../../uzebox/tools/packrom
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=28636360UL -Os -fsigned-char
CFLAGS += -ffunction-sections -fno-toplevel-reorder -fno-tree-switch-conversion
CFLAGS += -MD -MP -MT $(*F).o -MF $(DEPDIR)/$(@F).d
CFLAGS += $(KERNEL_OPTIONS)
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=$(OUTDIR)/$(GAME).map
LDFLAGS += -Wl,-gc-sections
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
## Objects that must be built in order to link
OBJECTS = $(OBJDIR)/uzeboxVideoEngineCore.o
OBJECTS += $(OBJDIR)/uzeboxCore.o
OBJECTS += $(OBJDIR)/uzeboxSoundEngine.o
OBJECTS += $(OBJDIR)/uzeboxSoundEngineCore.o
OBJECTS += $(OBJDIR)/uzeboxVideoEngine.o
OBJECTS += $(OBJDIR)/$(GAME).o
## Include Directories
INCLUDES = -I"$(KERNEL_DIR)"
## Build
all: $(OUTDIR)/$(TARGET) $(OUTDIR)/$(GAME).hex $(OUTDIR)/$(GAME).lss $(OUTDIR)/$(GAME).uze size
## Directories
$(OBJDIR):
mkdir $(OBJDIR)
#$(OUTDIR):
# mkdir $(OUTDIR)
$(DEPDIR):
mkdir $(DEPDIR)
## Compile Kernel files
$(OBJDIR)/uzeboxVideoEngineCore.o: $(KERNEL_DIR)/uzeboxVideoEngineCore.s $(DIRS)
$(CC) $(INCLUDES) $(ASMFLAGS) -c $< -o $@
$(OBJDIR)/uzeboxSoundEngineCore.o: $(KERNEL_DIR)/uzeboxSoundEngineCore.s $(DIRS)
$(CC) $(INCLUDES) $(ASMFLAGS) -c $< -o $@
$(OBJDIR)/uzeboxCore.o: $(KERNEL_DIR)/uzeboxCore.c $(DIRS)
$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
$(OBJDIR)/uzeboxSoundEngine.o: $(KERNEL_DIR)/uzeboxSoundEngine.c $(DIRS)
$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
$(OBJDIR)/uzeboxVideoEngine.o: $(KERNEL_DIR)/uzeboxVideoEngine.c $(DIRS)
$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
## Compile game sources
$(OBJDIR)/$(GAME).o: $(GAME).c $(DIRS)
$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
##Link
$(OUTDIR)/$(TARGET): $(OBJECTS) $(DIRS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LIBDIRS) $(LIBS) -o $(OUTDIR)/$(TARGET)
$(OUTDIR)/%.hex: $(OUTDIR)/$(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
$(OUTDIR)/%.lss: $(OUTDIR)/$(TARGET)
avr-objdump -h -S $< > $@
$(OUTDIR)/%.uze: $(OUTDIR)/$(TARGET)
-$(PACKROM_DIR)/packrom $(OUTDIR)/$(GAME).hex $@ $(INFO)
UNAME := $(shell sh -c 'uname -s 2>/dev/null || echo not')
AVRSIZEFLAGS := -A $(OUTDIR)/${TARGET}
ifneq (,$(findstring MINGW,$(UNAME)))
AVRSIZEFLAGS := -C --mcu=${MCU} $(OUTDIR)/${TARGET}
endif
size: $(OUTDIR)/${TARGET}
@echo
@avr-size ${AVRSIZEFLAGS}
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJDIR) $(DEPDIR) eeprom.bin $(GAME).elf $(GAME).hex $(GAME).lss $(GAME).map $(GAME).uze