OXYGENHUB
# 0adc2e74f5cf x16-emulator / Makefile
4.7 KiB · Makefile · last changed chore(): initial commit 16 days ago source blame history raw
1
##################################################################################################
2
#
3
# COMMANDER X16 EMULATOR MAKEFILE
4
#
5
##################################################################################################
6
7
ifeq ($(CROSS_COMPILE_WINDOWS),1)
8
	SDL2CONFIG?=$(WIN_SDL2)/bin/sdl2-config --prefix=$(WIN_SDL2)
9
else
10
	SDL2CONFIG=sdl2-config
11
endif
12
13
ifeq ($(CROSS_COMPILE_WINDOWS),1)
14
	TARGET_WIN32=yes
15
else ifeq ($(OS),Windows_NT)
16
	TARGET_WIN32=yes
17
endif
18
19
CFLAGS=-std=c11 -O3 -Wall -Werror -g $(shell $(SDL2CONFIG) --cflags) -Isrc/extern/include -Isrc/extern/retro-remote-debug-controller/core -pthread
20
CXXFLAGS=-std=c++17 -O3 -Wall -Werror -Isrc/extern/ymfm/src
21
LDFLAGS=$(shell $(SDL2CONFIG) --libs) -lm -lz -pthread
22
23
ifdef ADDL_INCLUDE
24
	CFLAGS+=-I$(ADDL_INCLUDE)
25
endif
26
27
X16_ODIR = build/x16emu
28
X16_SDIR = src
29
30
MAKECART_ODIR = build/makecart
31
MAKECART_SDIR = src
32
33
ifdef TRACE
34
	CFLAGS+=-D TRACE
35
endif
36
37
X16_OUTPUT=x16emu
38
MAKECART_OUTPUT=makecart
39
40
GIT_REV=$(shell git diff --quiet && /bin/echo -n $$(git rev-parse --short=8 HEAD || /bin/echo "00000000") || /bin/echo -n $$( /bin/echo -n $$(git rev-parse --short=7 HEAD || /bin/echo "0000000"); /bin/echo -n '+'))
41
42
CFLAGS+=-D GIT_REV='"$(GIT_REV)"'
43
44
ifeq ($(MAC_STATIC),1)
45
	LDFLAGS=$(LIBSDL_FILE) -lm -liconv -lz -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal -Wl,-weak_framework,CoreHaptics -Wl,-weak_framework,GameController -pthread
46
	LDEMU=-ldl -Wl,-rpath,$(HOMEBREW_LIB)
47
else ifeq ($(CROSS_COMPILE_WINDOWS),1)
48
	LDFLAGS+=-L$(MINGW32)/lib
49
	# this enables printf() to show, but also forces a console window
50
	LDFLAGS+=-Wl,--subsystem,console
51
	LDFLAGS+=-static-libstdc++ -static-libgcc
52
ifeq ($(TARGET_CPU),x86)
53
	CC=i686-w64-mingw32-gcc
54
	CXX=i686-w64-mingw32-g++
55
else
56
	CC=x86_64-w64-mingw32-gcc
57
	CXX=x86_64-w64-mingw32-g++
58
endif
59
else # Not Mac, not Windows, probably Linux
60
	LDEMU=-ldl
61
endif
62
63
# build with link time optimization
64
ifndef NOLTO
65
	CFLAGS+=-flto
66
	LDFLAGS+=-flto
67
endif
68
69
ifdef TARGET_WIN32
70
	LDFLAGS+=-ldwmapi
71
endif
72
73
ifdef EMSCRIPTEN
74
	LDFLAGS+=--shell-file webassembly/x16emu-template.html --preload-file rom.bin -s TOTAL_MEMORY=32MB -s ASSERTIONS=1 -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1
75
	# To the Javascript runtime exported functions
76
	LDFLAGS+=-s EXPORTED_FUNCTIONS='["_j2c_reset", "_j2c_paste", "_j2c_start_audio", _main]' -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -s USE_ZLIB=1 -s EXIT_RUNTIME=1
77
	CFLAGS+=-s USE_ZLIB=1
78
	X16_OUTPUT=x16emu.html
79
	MAKECART_OUTPUT=makecart.html
80
else
81
	LDFLAGS+=-pthread
82
endif
83
84
ifeq ($(FLUIDSYNTH),1)
85
	CFLAGS+=-DHAS_FLUIDSYNTH
86
endif
87
88
_X16_OBJS = cpu/fake6502.o memory.o disasm.o video.o i2c.o smc.o rtc.o via.o serial.o ieee.o vera_spi.o audio.o vera_pcm.o vera_psg.o sdcard.o main.o debugger.o javascript_interface.o joystick.o rendertext.o keyboard.o icon.o timing.o wav_recorder.o testbench.o files.o cartridge.o iso_8859_15.o ymglue.o midi.o netcard.o coverage.o
89
_X16_OBJS += extern/ymfm/src/ymfm_opm.o
90
# retro-remote-debug-controller: x16 backend + portable server core (submodule)
91
_X16_OBJS += control_backend.o extern/retro-remote-debug-controller/core/retro_control.o
92
93
ifdef TARGET_WIN32
94
	_X16_OBJS += video_win32.o
95
endif
96
97
X16_OBJS = $(patsubst %,$(X16_ODIR)/%,$(_X16_OBJS))
98
X16_DEPS := $(X16_OBJS:.o=.d)
99
100
_MAKECART_OBJS = makecart.o files.o cartridge.o makecart_javascript_interface.o
101
102
MAKECART_OBJS = $(patsubst %,$(X16_ODIR)/%,$(_MAKECART_OBJS))
103
MAKECART_DEPS := $(MAKECART_OBJS:.o=.d)
104
105
.PHONY: all clean wasm
106
all: x16emu makecart
107
108
x16emu: $(X16_OBJS)
109
	$(CXX) -o $(X16_OUTPUT) $(X16_OBJS) $(LDFLAGS) $(LDEMU)
110
111
$(X16_ODIR)/%.o: $(X16_SDIR)/%.c
112
	@mkdir -p $$(dirname $@)
113
	$(CC) $(CFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
114
115
$(X16_ODIR)/%.o: $(X16_SDIR)/%.cpp
116
	@mkdir -p $$(dirname $@)
117
	$(CXX) $(CXXFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
118
119
makecart: $(MAKECART_OBJS)
120
	$(CC) -o $(MAKECART_OUTPUT) $(MAKECART_OBJS) $(LDFLAGS)
121
122
$(MAKECART_ODIR)/%.o: $(MAKECART_SDIR)/%.c
123
	@mkdir -p $$(dirname $@)
124
	$(CC) $(CFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
125
126
cpu/tables.h cpu/mnemonics.h: cpu/buildtables.py cpu/6502.opcodes cpu/65c816.opcodes
127
	cd cpu && python buildtables.py
128
129
# Empty rules so that renames of header files do not trigger a failure to compile
130
$(X16_SDIR)/%.h:;
131
$(MAKECART_SDIR)/%.h:;
132
133
# WebAssembly/emscripten target
134
#
135
# See webassembly/WebAssembly.md
136
wasm:
137
	emmake make
138
139
clean:
140
	rm -rf $(X16_ODIR) $(MAKECART_ODIR) x16emu x16emu.exe x16emu.js x16emu.wasm x16emu.data x16emu.worker.js x16emu.html x16emu.html.mem makecart makecart.exe makecart.js makecart.wasm makecart.data makecart.worker.js makecart.html makecart.html.mem
141
142
ifeq ($(filter $(MAKECMDGOALS), clean),)
143
-include $(X16_DEPS)
144
-include $(MAKECART_DEPS)
145
endif