| 1 |
|
| 2 |
|
| 3 |
|
| 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 |
|
| 41 |
|
| 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 |
|
| 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 |
| 66 |
LDEMU=-ldl |
| 67 |
endif |
| 68 |
|
| 69 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 136 |
$(X16_SDIR)/%.h:; |
| 137 |
$(MAKECART_SDIR)/%.h:; |
| 138 |
|
| 139 |
|
| 140 |
|
| 141 |
|
| 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 |