Files
same_cdi/Makefile.common
vibecodekunandClaude Opus 5.5 ec7c838e5a Emulate the Digital Video Cartridge (VMPEG)
Add the 22ER9141 Digital Video Cartridge as fitted to the Mono-I, and as
built into the CD-i 490: an MCD251 video decoder and a DSP56001 doing
MPEG-1 audio in software, driven by the fmvdrv/madriv modules in the
cartridge ROM.  Titles that need it for full motion video, such as The
Firm, Mutant Rampage and Monty Python's Invasion from the Planet Skyron,
now play.

The register file, interrupt behaviour, program stream demultiplexer and
DMA handshake are ported from the CDi_MiSTer VMPEG core by Andre Zeps,
which reverse-engineered the cartridge.  CDi_MiSTer is GPL-3.0, so
cdidvc.cpp/.h and mpeg1demux.cpp/.h carry that license and the README
says so.  The MPEG-1 video and Layer I/II audio decoders are new code
under BSD-3-Clause; their tables follow pl_mpeg, whose MIT notice is
reproduced in both.

The cartridge is fitted to cdimono1 unconditionally, but its driver ROM,
vmpega.rom, is optional.  Without it the boot code's cartridge probe
finds nothing and the machine behaves exactly as before, so existing
BIOS sets keep working.  With it, the cartridge decodes d00000-efffff:
1MB of extra system RAM, the register file, the ROM, and 512KB of MPEG
working RAM that bus-errors until the driver unlocks it, so that the
OS-9 memory crawler does not claim it.

IRQ level 4 is shared between the CDIC and the cartridge.  A flip-flop
on the board gives the line to whichever device raised it first and
routes the interrupt acknowledge to it; the driver now arbitrates the
same way instead of wiring the CDIC straight to the CPU.

The picture reaches the screen through the MCD212's External Video
backdrop.  The cartridge's display window keys the CD-i planes away
where region flags select it, so a title that frames its video with a
border drawn in a plane keeps the border.  Outside the window, or with
no cartridge, the backdrop is the CD-i's 16-level black rather than 0.

The software list no longer filters out DVC titles.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-26 15:37:11 +02:00

451 lines
18 KiB
Makefile

##############################################################################
# Makefile.common -- static source lists for same_cdi (MAME 0.239, cdi.cpp)
#
# All build system generation (GENie/regenie) has been removed. Sources,
# defines and include paths below were extracted from the project files GENie
# produced for TARGET=mame SUBTARGET=mess SOURCES=src/mame/drivers/cdi.cpp
# OSD=retro, and are now maintained by hand.
#
# Formerly-generated files (driver list, layouts, fonts, version) are
# committed under gen/.
#
# Expects from includer: CORE_DIR, CORE_OBJ_DIR, and OS selection vars
# (platform_is_windows/linux/macosx/android = 1/empty).
##############################################################################
GEN_DIR := $(CORE_DIR)/gen
INCFLAGS := \
-I$(CORE_DIR)/src/osd \
-I$(CORE_DIR)/src/emu \
-I$(CORE_DIR)/src/devices \
-I$(CORE_DIR)/src/mame \
-I$(CORE_DIR)/src/frontend/mame \
-I$(CORE_DIR)/src/lib \
-I$(CORE_DIR)/src/lib/util \
-I$(CORE_DIR)/src/lib/netlist \
-I$(CORE_DIR)/src/osd/modules/render \
-I$(CORE_DIR)/src/osd/libretro \
-I$(CORE_DIR)/src/osd/libretro/libretro-internal \
-I$(CORE_DIR)/src/osd/libretro/libretro-common/include \
-I$(GEN_DIR) \
-I$(GEN_DIR)/emu \
-I$(GEN_DIR)/emu/layout \
-I$(GEN_DIR)/mame/layout \
-I$(CORE_DIR)/3rdparty \
-I$(CORE_DIR)/3rdparty/utf8proc
ifeq ($(platform_is_windows), 1)
INCFLAGS += -I$(CORE_DIR)/src/osd/windows -I$(CORE_DIR)/3rdparty/compat/mingw -I$(CORE_DIR)/3rdparty/compat/winsdk-override
endif
# Defines common to every translation unit
COREDEFINES := -D__LIBRETRO__ -DNDEBUG -DFLAC__NO_DLL
ifeq ($(platform_is_windows), 1)
COREDEFINES += -DCRLF=3 -DUNICODE -D_UNICODE -Dmain=utf8_main -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0501
else
COREDEFINES += -DCRLF=2
endif
ifneq ($(BIGENDIAN), 1)
COREDEFINES += -DLSB_FIRST
endif
# Every TU is compiled with the retro prefix header, as under the old system
COREDEFINES += -include $(CORE_DIR)/src/osd/libretro/retroprefix.h
# OSD layer defines (osd_retro/ocore_retro groups only, as before)
OSDDEFS := -DRETROMAME -DOSD_RETRO
ifneq ($(platform_is_windows), 1)
OSDDEFS += -DSDLMAME_UNIX -DRETROMAME_UNIX
endif
ifeq ($(platform_is_linux), 1)
ifneq ($(DONT_USE_NETWORK), 1)
OSDDEFS += -DUSE_NETWORK
endif
endif
ifeq ($(platform_is_macosx), 1)
OSDDEFS += -DSDLMAME_MACOSX -DSDLMAME_DARWIN
endif
##############################################################################
# mess
##############################################################################
MESS_SRC_CXX := \
$(CORE_DIR)/gen/mame/mess/drivlist.cpp \
$(CORE_DIR)/gen/version.cpp \
$(CORE_DIR)/src/mame/mess.cpp \
$(CORE_DIR)/src/osd/libretro/libretro-internal/libretro.cpp \
$(CORE_DIR)/src/osd/libretro/retromain.cpp
MESS_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(MESS_SRC_CXX:.cpp=.o))
$(MESS_OBJS): GRPFLAGS :=
OBJECTS += $(MESS_OBJS)
##############################################################################
# mame_mess
##############################################################################
MAME_MESS_SRC_CXX := \
$(CORE_DIR)/src/mame/drivers/cdi.cpp \
$(CORE_DIR)/src/mame/machine/cdicdic.cpp \
$(CORE_DIR)/src/mame/machine/cdidvc.cpp \
$(CORE_DIR)/src/mame/machine/cdislavehle.cpp \
$(CORE_DIR)/src/mame/machine/mpeg1audio.cpp \
$(CORE_DIR)/src/mame/machine/mpeg1demux.cpp \
$(CORE_DIR)/src/mame/machine/mpeg1video.cpp \
$(CORE_DIR)/src/mame/video/mcd212.cpp
MAME_MESS_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(MAME_MESS_SRC_CXX:.cpp=.o))
$(MAME_MESS_OBJS): GRPFLAGS :=
OBJECTS += $(MAME_MESS_OBJS)
##############################################################################
# frontend
##############################################################################
FRONTEND_SRC_CXX := \
$(CORE_DIR)/src/frontend/mame/audit.cpp \
$(CORE_DIR)/src/frontend/mame/cheat.cpp \
$(CORE_DIR)/src/frontend/mame/clifront.cpp \
$(CORE_DIR)/src/frontend/mame/infoxml.cpp \
$(CORE_DIR)/src/frontend/mame/iptseqpoll.cpp \
$(CORE_DIR)/src/frontend/mame/language.cpp \
$(CORE_DIR)/src/frontend/mame/mame.cpp \
$(CORE_DIR)/src/frontend/mame/mameopts.cpp \
$(CORE_DIR)/src/frontend/mame/media_ident.cpp \
$(CORE_DIR)/src/frontend/mame/pluginopts.cpp \
$(CORE_DIR)/src/frontend/mame/ui/about.cpp \
$(CORE_DIR)/src/frontend/mame/ui/analogipt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/auditmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/cheatopt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/confswitch.cpp \
$(CORE_DIR)/src/frontend/mame/ui/custui.cpp \
$(CORE_DIR)/src/frontend/mame/ui/datmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/devopt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/dirmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/filecreate.cpp \
$(CORE_DIR)/src/frontend/mame/ui/filemngr.cpp \
$(CORE_DIR)/src/frontend/mame/ui/filesel.cpp \
$(CORE_DIR)/src/frontend/mame/ui/icorender.cpp \
$(CORE_DIR)/src/frontend/mame/ui/imgcntrl.cpp \
$(CORE_DIR)/src/frontend/mame/ui/info.cpp \
$(CORE_DIR)/src/frontend/mame/ui/info_pty.cpp \
$(CORE_DIR)/src/frontend/mame/ui/inifile.cpp \
$(CORE_DIR)/src/frontend/mame/ui/inputmap.cpp \
$(CORE_DIR)/src/frontend/mame/ui/keyboard.cpp \
$(CORE_DIR)/src/frontend/mame/ui/mainmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/menu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/miscmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/moptions.cpp \
$(CORE_DIR)/src/frontend/mame/ui/optsmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/pluginopt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/quitmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/selector.cpp \
$(CORE_DIR)/src/frontend/mame/ui/selgame.cpp \
$(CORE_DIR)/src/frontend/mame/ui/selmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/selsoft.cpp \
$(CORE_DIR)/src/frontend/mame/ui/simpleselgame.cpp \
$(CORE_DIR)/src/frontend/mame/ui/sliders.cpp \
$(CORE_DIR)/src/frontend/mame/ui/slotopt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/sndmenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/state.cpp \
$(CORE_DIR)/src/frontend/mame/ui/submenu.cpp \
$(CORE_DIR)/src/frontend/mame/ui/swlist.cpp \
$(CORE_DIR)/src/frontend/mame/ui/systemlist.cpp \
$(CORE_DIR)/src/frontend/mame/ui/text.cpp \
$(CORE_DIR)/src/frontend/mame/ui/textbox.cpp \
$(CORE_DIR)/src/frontend/mame/ui/ui.cpp \
$(CORE_DIR)/src/frontend/mame/ui/utils.cpp \
$(CORE_DIR)/src/frontend/mame/ui/videoopt.cpp \
$(CORE_DIR)/src/frontend/mame/ui/viewgfx.cpp \
$(CORE_DIR)/src/frontend/mame/ui/widgets.cpp
FRONTEND_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(FRONTEND_SRC_CXX:.cpp=.o))
$(FRONTEND_OBJS): GRPFLAGS :=
OBJECTS += $(FRONTEND_OBJS)
##############################################################################
# emu
##############################################################################
EMU_SRC_CXX := \
$(CORE_DIR)/src/emu/addrmap.cpp \
$(CORE_DIR)/src/emu/attotime.cpp \
$(CORE_DIR)/src/emu/bookkeeping.cpp \
$(CORE_DIR)/src/emu/config.cpp \
$(CORE_DIR)/src/emu/crsshair.cpp \
$(CORE_DIR)/src/emu/debug/express.cpp \
$(CORE_DIR)/src/emu/debug/textbuf.cpp \
$(CORE_DIR)/src/emu/debugger.cpp \
$(CORE_DIR)/src/emu/devcb.cpp \
$(CORE_DIR)/src/emu/devcpu.cpp \
$(CORE_DIR)/src/emu/devdelegate.cpp \
$(CORE_DIR)/src/emu/devfind.cpp \
$(CORE_DIR)/src/emu/device.cpp \
$(CORE_DIR)/src/emu/diexec.cpp \
$(CORE_DIR)/src/emu/digfx.cpp \
$(CORE_DIR)/src/emu/diimage.cpp \
$(CORE_DIR)/src/emu/dimemory.cpp \
$(CORE_DIR)/src/emu/dinetwork.cpp \
$(CORE_DIR)/src/emu/dinvram.cpp \
$(CORE_DIR)/src/emu/dipalette.cpp \
$(CORE_DIR)/src/emu/dipty.cpp \
$(CORE_DIR)/src/emu/dirtc.cpp \
$(CORE_DIR)/src/emu/dislot.cpp \
$(CORE_DIR)/src/emu/disound.cpp \
$(CORE_DIR)/src/emu/distate.cpp \
$(CORE_DIR)/src/emu/divideo.cpp \
$(CORE_DIR)/src/emu/drawgfx.cpp \
$(CORE_DIR)/src/emu/drivenum.cpp \
$(CORE_DIR)/src/emu/driver.cpp \
$(CORE_DIR)/src/emu/drivers/empty.cpp \
$(CORE_DIR)/src/emu/emucore.cpp \
$(CORE_DIR)/src/emu/emumem.cpp \
$(CORE_DIR)/src/emu/emumem_aspace.cpp \
$(CORE_DIR)/src/emu/emumem_hedp.cpp \
$(CORE_DIR)/src/emu/emumem_hedr0.cpp \
$(CORE_DIR)/src/emu/emumem_hedr1.cpp \
$(CORE_DIR)/src/emu/emumem_hedr2.cpp \
$(CORE_DIR)/src/emu/emumem_hedr3.cpp \
$(CORE_DIR)/src/emu/emumem_hedw0.cpp \
$(CORE_DIR)/src/emu/emumem_hedw1.cpp \
$(CORE_DIR)/src/emu/emumem_hedw2.cpp \
$(CORE_DIR)/src/emu/emumem_hedw3.cpp \
$(CORE_DIR)/src/emu/emumem_hem.cpp \
$(CORE_DIR)/src/emu/emumem_hep.cpp \
$(CORE_DIR)/src/emu/emumem_het.cpp \
$(CORE_DIR)/src/emu/emumem_heu.cpp \
$(CORE_DIR)/src/emu/emumem_heun.cpp \
$(CORE_DIR)/src/emu/emumem_mud.cpp \
$(CORE_DIR)/src/emu/emumem_mview.cpp \
$(CORE_DIR)/src/emu/emuopts.cpp \
$(CORE_DIR)/src/emu/emupal.cpp \
$(CORE_DIR)/src/emu/fileio.cpp \
$(CORE_DIR)/src/emu/hashfile.cpp \
$(CORE_DIR)/src/emu/image.cpp \
$(CORE_DIR)/src/emu/input.cpp \
$(CORE_DIR)/src/emu/inputdev.cpp \
$(CORE_DIR)/src/emu/ioport.cpp \
$(CORE_DIR)/src/emu/machine.cpp \
$(CORE_DIR)/src/emu/main.cpp \
$(CORE_DIR)/src/emu/mconfig.cpp \
$(CORE_DIR)/src/emu/memarray.cpp \
$(CORE_DIR)/src/emu/natkeyboard.cpp \
$(CORE_DIR)/src/emu/network.cpp \
$(CORE_DIR)/src/emu/output.cpp \
$(CORE_DIR)/src/emu/parameters.cpp \
$(CORE_DIR)/src/emu/recording.cpp \
$(CORE_DIR)/src/emu/render.cpp \
$(CORE_DIR)/src/emu/rendfont.cpp \
$(CORE_DIR)/src/emu/rendlay.cpp \
$(CORE_DIR)/src/emu/rendutil.cpp \
$(CORE_DIR)/src/emu/romentry.cpp \
$(CORE_DIR)/src/emu/romload.cpp \
$(CORE_DIR)/src/emu/save.cpp \
$(CORE_DIR)/src/emu/schedule.cpp \
$(CORE_DIR)/src/emu/screen.cpp \
$(CORE_DIR)/src/emu/softlist.cpp \
$(CORE_DIR)/src/emu/softlist_dev.cpp \
$(CORE_DIR)/src/emu/sound.cpp \
$(CORE_DIR)/src/emu/speaker.cpp \
$(CORE_DIR)/src/emu/tilemap.cpp \
$(CORE_DIR)/src/emu/uiinput.cpp \
$(CORE_DIR)/src/emu/validity.cpp \
$(CORE_DIR)/src/emu/video.cpp \
$(CORE_DIR)/src/emu/video/rgbsse.cpp \
$(CORE_DIR)/src/emu/xtal.cpp
EMU_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(EMU_SRC_CXX:.cpp=.o))
$(EMU_OBJS): GRPFLAGS :=
$(EMU_OBJS): GRPINCS := $(INCFLAGS) -I$(CORE_DIR)/src/lib/util/rxml
OBJECTS += $(EMU_OBJS)
##############################################################################
# optional
##############################################################################
OPTIONAL_SRC_CXX := \
$(CORE_DIR)/src/devices/cpu/m68000/m68kcpu.cpp \
$(CORE_DIR)/src/devices/cpu/m68000/m68kops.cpp \
$(CORE_DIR)/src/devices/cpu/m6805/m6805.cpp \
$(CORE_DIR)/src/devices/cpu/m6805/m68hc05.cpp \
$(CORE_DIR)/src/devices/imagedev/chd_cd.cpp \
$(CORE_DIR)/src/devices/machine/scc68070.cpp \
$(CORE_DIR)/src/devices/machine/timekpr.cpp \
$(CORE_DIR)/src/devices/sound/dmadac.cpp \
$(CORE_DIR)/src/devices/video/vector.cpp
OPTIONAL_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(OPTIONAL_SRC_CXX:.cpp=.o))
$(OPTIONAL_OBJS): GRPFLAGS :=
OBJECTS += $(OPTIONAL_OBJS)
##############################################################################
# utils
##############################################################################
UTILS_SRC_CXX := \
$(CORE_DIR)/src/lib/util/aviio.cpp \
$(CORE_DIR)/src/lib/util/bitmap.cpp \
$(CORE_DIR)/src/lib/util/cdrom.cpp \
$(CORE_DIR)/src/lib/util/chd.cpp \
$(CORE_DIR)/src/lib/util/chdcd.cpp \
$(CORE_DIR)/src/lib/util/corefile.cpp \
$(CORE_DIR)/src/lib/util/corestr.cpp \
$(CORE_DIR)/src/lib/util/coreutil.cpp \
$(CORE_DIR)/src/lib/util/delegate.cpp \
$(CORE_DIR)/src/lib/util/hash.cpp \
$(CORE_DIR)/src/lib/util/hashing.cpp \
$(CORE_DIR)/src/lib/util/ioprocs.cpp \
$(CORE_DIR)/src/lib/util/ioprocsfilter.cpp \
$(CORE_DIR)/src/lib/util/jedparse.cpp \
$(CORE_DIR)/src/lib/util/language.cpp \
$(CORE_DIR)/src/lib/util/msdib.cpp \
$(CORE_DIR)/src/lib/util/nanosvg.cpp \
$(CORE_DIR)/src/lib/util/opresolv.cpp \
$(CORE_DIR)/src/lib/util/options.cpp \
$(CORE_DIR)/src/lib/util/palette.cpp \
$(CORE_DIR)/src/lib/util/png.cpp \
$(CORE_DIR)/src/lib/util/strformat.cpp \
$(CORE_DIR)/src/lib/util/timeconv.cpp \
$(CORE_DIR)/src/lib/util/un7z.cpp \
$(CORE_DIR)/src/lib/util/unicode.cpp \
$(CORE_DIR)/src/lib/util/unzip.cpp \
$(CORE_DIR)/src/lib/util/vecstream.cpp \
$(CORE_DIR)/src/lib/util/wavwrite.cpp \
$(CORE_DIR)/src/lib/util/xmlfile.cpp \
$(CORE_DIR)/src/lib/util/zippath.cpp
UTILS_SRC_C := \
$(CORE_DIR)/src/lib/util/rxml/rxml.c
UTILS_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(UTILS_SRC_CXX:.cpp=.o)) \
$(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(UTILS_SRC_C:.c=.o))
$(UTILS_OBJS): GRPFLAGS := -DUTF8PROC_STATIC
$(UTILS_OBJS): GRPINCS := $(INCFLAGS) -I$(CORE_DIR)/src/lib/util/rxml
OBJECTS += $(UTILS_OBJS)
##############################################################################
# osd_retro
##############################################################################
OSD_RETRO_SRC_CXX := \
$(CORE_DIR)/src/osd/libretro/libretro-internal/retro_init.cpp \
$(CORE_DIR)/src/osd/libretro/video.cpp \
$(CORE_DIR)/src/osd/libretro/window.cpp \
$(CORE_DIR)/src/osd/modules/debugger/none.cpp \
$(CORE_DIR)/src/osd/modules/diagnostics/none.cpp \
$(CORE_DIR)/src/osd/modules/font/font_none.cpp \
$(CORE_DIR)/src/osd/modules/input/input_common.cpp \
$(CORE_DIR)/src/osd/modules/input/input_none.cpp \
$(CORE_DIR)/src/osd/modules/input/input_retro.cpp \
$(CORE_DIR)/src/osd/modules/lib/osdobj_common.cpp \
$(CORE_DIR)/src/osd/modules/midi/none.cpp \
$(CORE_DIR)/src/osd/modules/monitor/monitor_common.cpp \
$(CORE_DIR)/src/osd/modules/monitor/monitor_retro.cpp \
$(CORE_DIR)/src/osd/modules/netdev/none.cpp \
$(CORE_DIR)/src/osd/modules/osdwindow.cpp \
$(CORE_DIR)/src/osd/modules/output/none.cpp \
$(CORE_DIR)/src/osd/modules/render/drawretro.cpp \
$(CORE_DIR)/src/osd/modules/sound/none.cpp \
$(CORE_DIR)/src/osd/modules/sound/retro_sound.cpp \
$(CORE_DIR)/src/osd/osdnet.cpp \
$(CORE_DIR)/src/osd/watchdog.cpp
OSD_RETRO_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(OSD_RETRO_SRC_CXX:.cpp=.o))
$(OSD_RETRO_OBJS): GRPFLAGS := $(OSDDEFS) -D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_CONSTANT_MACROS -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS -DNO_USE_MIDI
OBJECTS += $(OSD_RETRO_OBJS)
##############################################################################
# ocore_retro
##############################################################################
OCORE_RETRO_SRC_CXX := \
$(CORE_DIR)/src/osd/modules/lib/osdlib_retro.cpp \
$(CORE_DIR)/src/osd/modules/osdmodule.cpp \
$(CORE_DIR)/src/osd/osdcore.cpp \
$(CORE_DIR)/src/osd/osdsync.cpp \
$(CORE_DIR)/src/osd/strconv.cpp
OCORE_RETRO_SRC_CXX += \
$(CORE_DIR)/src/osd/libretro/vfsfile.cpp
LRC_VFS_SRC_C := \
$(CORE_DIR)/src/osd/libretro/libretro-common/compat/compat_posix_string.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/compat/compat_strl.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/compat/fopen_utf8.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/encodings/encoding_utf.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/file/file_path.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/file/file_path_io.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/file/retro_dirent.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/streams/file_stream.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/string/stdstring.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/time/rtime.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/vfs/vfs_implementation.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/encodings/encoding_crc32.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/encodings/encoding_deflate.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/encodings/encoding_huffman.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/encodings/encoding_rzstd.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/features/features_cpu.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/flac/rflac.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/chd/rchd.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/jpeg/rjpeg.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_archive.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_bcj2.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_filters.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_lzma.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_lzma2.c \
$(CORE_DIR)/src/osd/libretro/libretro-common/formats/7z/r7z_lzma_stream.c
LRC_VFS_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(LRC_VFS_SRC_C:.c=.o))
$(LRC_VFS_OBJS): GRPINCS := -I$(CORE_DIR)/src/osd/libretro/libretro-common/include -I$(CORE_DIR)/src/osd/libretro/libretro-internal
$(LRC_VFS_OBJS): GRPFLAGS := -DHAVE_RFLAC -DHAVE_RZSTD
OBJECTS += $(LRC_VFS_OBJS)
OCORE_RETRO_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(OCORE_RETRO_SRC_CXX:.cpp=.o))
$(OCORE_RETRO_OBJS): GRPFLAGS := $(OSDDEFS)
OBJECTS += $(OCORE_RETRO_OBJS)
##############################################################################
# utf8proc
##############################################################################
UTF8PROC_SRC_C := \
$(CORE_DIR)/3rdparty/utf8proc/utf8proc.c
UTF8PROC_OBJS := $(patsubst $(CORE_DIR)/%,$(CORE_OBJ_DIR)/%,$(UTF8PROC_SRC_C:.c=.o))
$(UTF8PROC_OBJS): GRPFLAGS := -DUTF8PROC_STATIC
OBJECTS += $(UTF8PROC_OBJS)
##############################################################################
# Link layout
#
# The old system linked the mess "exe" objects against per-project static
# archives; archive members are only pulled in when referenced. Several
# compiled objects (legscsi, mfmhd, ...) reference devices that are not part
# of this build and are never pulled. A flat object link would fail on those
# dangling references, so the archive structure is preserved.
##############################################################################
# Objects linked directly (the old "mess" exe project)
LINK_OBJS := $(MESS_OBJS)
# Archives, in the old LIBDEPS order
CORE_ARCHIVES := \
$(CORE_OBJ_DIR)/libmame_mess.a \
$(CORE_OBJ_DIR)/libfrontend.a \
$(CORE_OBJ_DIR)/libemu.a \
$(CORE_OBJ_DIR)/liboptional.a \
$(CORE_OBJ_DIR)/libutils.a \
$(CORE_OBJ_DIR)/libosd_retro.a \
$(CORE_OBJ_DIR)/libocore_retro.a \
$(CORE_OBJ_DIR)/libutf8proc.a
$(CORE_OBJ_DIR)/libmame_mess.a: $(MAME_MESS_OBJS)
$(CORE_OBJ_DIR)/libfrontend.a: $(FRONTEND_OBJS)
$(CORE_OBJ_DIR)/libemu.a: $(EMU_OBJS)
$(CORE_OBJ_DIR)/liboptional.a: $(OPTIONAL_OBJS)
$(CORE_OBJ_DIR)/libutils.a: $(UTILS_OBJS)
$(CORE_OBJ_DIR)/libosd_retro.a: $(OSD_RETRO_OBJS)
$(CORE_OBJ_DIR)/libocore_retro.a: $(OCORE_RETRO_OBJS) $(LRC_VFS_OBJS)
$(CORE_OBJ_DIR)/libutf8proc.a: $(UTF8PROC_OBJS)
$(CORE_ARCHIVES):
@echo "AR $@"
@rm -f $@
@$(AR) rcs $@ $^