OXYGENHUB
◆ main x16-emulator / Makefile
5.0 KiB · Makefile · last changed build: name the revision without Git where there is no Git 14 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
# The revision: Git's in a Git checkout, `oxy describe` in an Oxygen one,
41
# otherwise zeros (a source tarball, or a CI workspace with neither).
42
ifeq ($(shell git rev-parse --is-inside-work-tree 2>/dev/null),true)
43
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 '+'))
44
else
45
GIT_REV=$(shell oxy describe 2>/dev/null || /bin/echo -n "00000000")
46
endif
47
48
CFLAGS+=-D GIT_REV='"$(GIT_REV)"'
49
50
ifeq ($(MAC_STATIC),1)
51
	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
52
	LDEMU=-ldl -Wl,-rpath,$(HOMEBREW_LIB)
53
else ifeq ($(CROSS_COMPILE_WINDOWS),1)
54
	LDFLAGS+=-L$(MINGW32)/lib
55
	# this enables printf() to show, but also forces a console window
56
	LDFLAGS+=-Wl,--subsystem,console
57
	LDFLAGS+=-static-libstdc++ -static-libgcc
58
ifeq ($(TARGET_CPU),x86)
59
	CC=i686-w64-mingw32-gcc
60
	CXX=i686-w64-mingw32-g++
61
else
62
	CC=x86_64-w64-mingw32-gcc
63
	CXX=x86_64-w64-mingw32-g++
64
endif
65
else # Not Mac, not Windows, probably Linux
66
	LDEMU=-ldl
67
endif
68
69
# build with link time optimization
70
ifndef NOLTO
71
	CFLAGS+=-flto
72
	LDFLAGS+=-flto
73
endif
74
75
ifdef TARGET_WIN32
76
	LDFLAGS+=-ldwmapi
77
endif
78
79
ifdef EMSCRIPTEN
80
	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
81
	# To the Javascript runtime exported functions
82
	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
83
	CFLAGS+=-s USE_ZLIB=1
84
	X16_OUTPUT=x16emu.html
85
	MAKECART_OUTPUT=makecart.html
86
else
87
	LDFLAGS+=-pthread
88
endif
89
90
ifeq ($(FLUIDSYNTH),1)
91
	CFLAGS+=-DHAS_FLUIDSYNTH
92
endif
93
94
_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
95
_X16_OBJS += extern/ymfm/src/ymfm_opm.o
96
# retro-remote-debug-controller: x16 backend + portable server core (submodule)
97
_X16_OBJS += control_backend.o extern/retro-remote-debug-controller/core/retro_control.o
98
99
ifdef TARGET_WIN32
100
	_X16_OBJS += video_win32.o
101
endif
102
103
X16_OBJS = $(patsubst %,$(X16_ODIR)/%,$(_X16_OBJS))
104
X16_DEPS := $(X16_OBJS:.o=.d)
105
106
_MAKECART_OBJS = makecart.o files.o cartridge.o makecart_javascript_interface.o
107
108
MAKECART_OBJS = $(patsubst %,$(X16_ODIR)/%,$(_MAKECART_OBJS))
109
MAKECART_DEPS := $(MAKECART_OBJS:.o=.d)
110
111
.PHONY: all clean wasm
112
all: x16emu makecart
113
114
x16emu: $(X16_OBJS)
115
	$(CXX) -o $(X16_OUTPUT) $(X16_OBJS) $(LDFLAGS) $(LDEMU)
116
117
$(X16_ODIR)/%.o: $(X16_SDIR)/%.c
118
	@mkdir -p $$(dirname $@)
119
	$(CC) $(CFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
120
121
$(X16_ODIR)/%.o: $(X16_SDIR)/%.cpp
122
	@mkdir -p $$(dirname $@)
123
	$(CXX) $(CXXFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
124
125
makecart: $(MAKECART_OBJS)
126
	$(CC) -o $(MAKECART_OUTPUT) $(MAKECART_OBJS) $(LDFLAGS)
127
128
$(MAKECART_ODIR)/%.o: $(MAKECART_SDIR)/%.c
129
	@mkdir -p $$(dirname $@)
130
	$(CC) $(CFLAGS) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
131
132
cpu/tables.h cpu/mnemonics.h: cpu/buildtables.py cpu/6502.opcodes cpu/65c816.opcodes
133
	cd cpu && python buildtables.py
134
135
# Empty rules so that renames of header files do not trigger a failure to compile
136
$(X16_SDIR)/%.h:;
137
$(MAKECART_SDIR)/%.h:;
138
139
# WebAssembly/emscripten target
140
#
141
# See webassembly/WebAssembly.md
142
wasm:
143
	emmake make
144
145
clean:
146
	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
147
148
ifeq ($(filter $(MAKECMDGOALS), clean),)
149
-include $(X16_DEPS)
150
-include $(MAKECART_DEPS)
151
endif