#------------------------------------------------------------------------------#
# Makefile for building WildMidi library and player for DOS.
# You will need a DJGPP build environment and GNU make to do it painlessly.
# To build natively on DOS, you need long file names support (e.g. doslfn.)
#------------------------------------------------------------------------------#

# Set to 1 for debug build
DEBUG = 0

# DXE3 version of the library requires DJGPP-2.05 or newer.
# Set to 0 if dont want to build / use a DXE3 version of the library.
USE_DXE = 1

# The tools
ifeq ($(CROSS),)
CC=gcc
AS=as
AR=ar
RANLIB=ranlib
else
CC=$(CROSS)-gcc
AS=$(CROSS)-as
AR=$(CROSS)-ar
RANLIB=$(CROSS)-ranlib
endif
DXE3GEN=dxe3gen

INCLUDE = -I. -I../include/stdint -I../include
CFLAGS = $(INCLUDE) -Wall -W -fno-common
ARFLAGS = cr

LD = $(CC)
ifneq ($(USE_DXE),1)
WM_LINK = WildMidi
else
WM_LINK = WildMidi_dxe
endif
LDFLAGS = -L. -l$(WM_LINK)

# build for pentium and newer (comment out if not wanted)
CFLAGS += -march=i586
ifeq ($(DEBUG),1)
CFLAGS += -g
else
CFLAGS += -O2 -fomit-frame-pointer -ffast-math
endif

# Build rules
%.o: %.c
	$(CC) -c $(CFLAGS) -o $@ $<
%.o: ../src/%.c
	$(CC) -c $(CFLAGS) -o $@ $<
%.o: ../src/player/%.c
	$(CC) -c $(CFLAGS) -o $@ $<
%.o: ../src/player/dos/%.c
	$(CC) -c $(CFLAGS) -o $@ $<


# Objects
LIB_OBJ= wm_error.o file_io.o lock.o wildmidi_lib.o reverb.o gus_pat.o f_xmidi.o f_mus.o f_hmp.o f_midi.o f_hmi.o mus2mid.o xmi2mid.o internal_midi.o patches.o sample.o
PLAYER_OBJ= wm_tty.o msleep.o getopt_long.o out_none.o dosirq.o dosdma.o dossb.o out_dossb.o out_wave.o wildmidi.o

# Build targets
TARGETS = libWildMidi.a wildmidi.exe libWildMidi_dxe.a wildmidi.dxe

.PHONY: clean distclean
all: $(TARGETS)

libWildMidi.a: $(LIB_OBJ)
	$(AR) $(ARFLAGS) $@ $^
	$(RANLIB) $@

libWildMidi_dxe.a: wildmidi.dxe
wildmidi.dxe: $(LIB_OBJ)
	-$(DXE3GEN) -Y libWildMidi_dxe.a -o $@ -E _WildMidi_ -U  $^

wildmidi.exe: lib$(WM_LINK).a $(PLAYER_OBJ)
	$(LD) -o $@ $(PLAYER_OBJ) $(LDFLAGS)

clean:
	rm -rf $(LIB_OBJ) $(PLAYER_OBJ)
distclean: clean
	rm -rf $(TARGETS)

