SOURCEDIR := $(abspath $(patsubst %/,%,$(dir $(abspath $(lastword \
	$(MAKEFILE_LIST))))))

NAME := genplus
JGNAME := $(NAME)-jg

FLAGS := -std=c99 -Wall -Wno-strict-aliasing -pedantic
DEFS := -DLSB_FIRST -DUSE_32BPP_RENDERING -DMAXROMSIZE=33554432 \
	-DHAVE_YM3438_CORE -DHAVE_OPLL_CORE \
	-DENABLE_SUB_68K_ADDRESS_ERROR_EXCEPTIONS
SRCDIR := $(SOURCEDIR)/../core

INCLUDES = -I$(SRCDIR) -I$(SRCDIR)/cart_hw -I$(SRCDIR)/cart_hw/svp \
	-I$(SRCDIR)/cd_hw -I$(SRCDIR)/input_hw -I$(SRCDIR)/m68k -I$(SRCDIR)/ntsc \
	-I$(SRCDIR)/sound -I$(SRCDIR)/z80 -I$(SOURCEDIR)/.

LINKER = $(CC)

LIBS = -lm
LIBS_STATIC =

LIBS_REQUIRES :=

DOCS := ../LICENSE.txt README

# Object dirs
MKDIRS := core/cart_hw/svp \
	core/cd_hw \
	core/input_hw \
	core/m68k \
	core/ntsc \
	core/sound \
	core/z80

override INSTALL_DATA := 0
override INSTALL_EXAMPLE := 0
override INSTALL_SHARED := 0

include $(SOURCEDIR)/version.h
include $(SOURCEDIR)/mk/jg.mk

EXT := c

CSRCS := core/genesis.c \
	core/io_ctrl.c \
	core/loadrom.c \
	core/mem68k.c \
	core/membnk.c \
	core/memz80.c \
	core/state.c \
	core/system.c \
	core/vdp_ctrl.c \
	core/vdp_render.c \
	core/cart_hw/svp/svp.c \
	core/cart_hw/svp/ssp16.c \
	core/cart_hw/areplay.c \
	core/cart_hw/eeprom_93c.c \
	core/cart_hw/eeprom_i2c.c \
	core/cart_hw/eeprom_spi.c \
	core/cart_hw/ggenie.c \
	core/cart_hw/md_cart.c \
	core/cart_hw/megasd.c \
	core/cart_hw/sms_cart.c \
	core/cart_hw/sram.c \
	core/cd_hw/cd_cart.c \
	core/cd_hw/cdc.c \
	core/cd_hw/cdd.c \
	core/cd_hw/gfx.c \
	core/cd_hw/pcm.c \
	core/cd_hw/scd.c \
	core/input_hw/activator.c \
	core/input_hw/gamepad.c \
	core/input_hw/graphic_board.c \
	core/input_hw/input.c \
	core/input_hw/lightgun.c \
	core/input_hw/mouse.c \
	core/input_hw/paddle.c \
	core/input_hw/sportspad.c \
	core/input_hw/teamplayer.c \
	core/input_hw/terebi_oekaki.c \
	core/input_hw/xe_1ap.c \
	core/m68k/m68kcpu.c \
	core/m68k/s68kcpu.c \
	core/ntsc/md_ntsc.c \
	core/ntsc/sms_ntsc.c \
	core/sound/blip_buf.c \
	core/sound/eq.c \
	core/sound/opll.c \
	core/sound/psg.c \
	core/sound/sound.c \
	core/sound/ym2413.c \
	core/sound/ym2612.c \
	core/sound/ym3438.c \
	core/z80/z80.c

JGSRCS := crc32.c jg.c

# List of object files
OBJS := $(patsubst %,$(OBJDIR)/%,$(CSRCS:.c=.o))
OBJS_JG := $(patsubst %,$(OBJDIR)/%,$(JGSRCS:.c=.o))

# Core commands
BUILD_JG = $(call COMPILE_C, $(FLAGS) $(DEFS) $(INCLUDES) $(CFLAGS_JG))
BUILD_MAIN = $(call COMPILE_C, $(FLAGS) $(DEFS) $(INCLUDES))

.PHONY: $(PHONY)

all: $(TARGET)

# Core rules
$(OBJDIR)/core/%.o: $(SRCDIR)/%.$(EXT) $(PREREQ)
	$(call COMPILE_INFO,$(BUILD_MAIN))
	@$(BUILD_MAIN)

include $(SOURCEDIR)/mk/rules.mk
