#
#  GNU make makefile for the MkMake/MkDep/MkLang/MkImp/bin32c
#  utilities used during Watt-32 developement
#
#  DOS versions:   Requires djgpp2 + SLang 1.3+ library installed.
#  Win32 versions: Requires MingW + Slang 1.3+ installed.
#  Linux versions: Requires gcc + Slang 1.3+ installed.

.SUFFIXES: .exe .l .y

#
# Change to suite:
#
SLANG_ROOT_DOS   ?= $(DJDIR)/contrib/slang.210
SLANG_LIB_DOS    ?= $(SLANG_ROOT_DOS)/src/djgobjs/libslang.a

SLANG_ROOT_WIN   ?= $(realpath $(MINGW32))/src/TUI/Slang
SLANG_LIB_WIN    ?= $(SLANG_ROOT_WIN)/src/gw32objs/libslang.a
SLANG_LIB_WIN_CL ?= $(SLANG_ROOT_WIN)/src/mw32objs/wslang32.lib

#
# Cross-compiling Watt-32 on Linux using '../src/configur.sh'.
# We assume S-Lang for Linux is installed in the correct place.
#
SLANG_ROOT_LINUX ?=
SLANG_LIB_LINUX  ?= -lslang

CC     = gcc
CFLAGS = -save-temps -Wall -g # -s

all: mkmake.exe mkdep.exe mklang.exe mkimp.exe dxegen.exe bin2c.exe

win32: $(addprefix win32/, mkmake.exe mkdep.exe mklang.exe bin2c.exe)

linux: $(addprefix linux/, mkmake mkdep mklang bin2c)

mkdep.exe: mkdep.c
	$(CC) $(CFLAGS) -o $@ $^

mklang.exe: mklang.c
	$(CC) $(CFLAGS) -o $@ $^

mkimp.exe: mkimp.c
	$(CC) $(CFLAGS) -o $@ $^

mkmake.exe: mkmake.c
	$(CC) $(CFLAGS) -I$(SLANG_ROOT_DOS)/src -o $@ $^ $(SLANG_LIB_DOS)

bin2c.exe: bin2c.c
	$(CC) $(CFLAGS) -o $@ $^

dxegen.exe: dxegen.c
	$(CC) $(CFLAGS) -o $@ $^

mkimp.c: mkimp.l
	flex -o$@ $^

#
# Win32 binaries:
#
win32/mkmake.exe: mkmake.c
	$(CC) -m32 $(CFLAGS) -I$(SLANG_ROOT_WIN)/src -o $*.exe $^ $(SLANG_LIB_WIN)

win32/mkdep.exe: mkdep.c
	$(CC) -m32 $(CFLAGS) -o $*.exe $^

win32/mklang.exe: mklang.c
	$(CC) -m32 $(CFLAGS) -o $*.exe $^

win32/bin2c.exe: bin2c.c
	$(CC) -m32 $(CFLAGS) -o $*.exe $^

#
# MSVC version for testing:
#
msvc/mkmake.exe: mkmake.c
	cl -nologo -MD -Zi -I../inc -Fe$@ -I$(SLANG_ROOT_WIN)/src $^ $(SLANG_LIB_WIN_CL)

#
# Linux binaries:
#
linux/mkmake: mkmake.c
	$(CC) $(CFLAGS) -o $@ $^ $(SLANG_LIB_LINUX)

linux/mkdep: mkdep.c
	$(CC) $(CFLAGS) -o $@ $^

linux/mklang: mklang.c
	$(CC) $(CFLAGS) -o $@ $^

linux/bin2c: bin2c.c
	$(CC) $(CFLAGS) -o $@ $^

clean:
	@rm -f *.o mk*.exe dxegen.exe bin2c.exe \
               win32/mk*.exe win32/bin2.exe \
               linux/mk*.exe linux/bin2.exe \
               mkimp.c mkimp_gr.c

