# Makefile for MinGW by mborik & z00m
# Change `PREFIX` according your needs
# Run it with `make -f Makefile.win`

# cross-compile from ubuntu with mingw32
# make -f Makefile.win GCC=x86_64-w64-mingw32-gcc GPP=x86_64-w64-mingw32-g++ WINDRES=x86_64-w64-mingw32-windres

GCC=gcc.exe
CC=$(GCC)
GPP=g++.exe
C++=$(GPP)

PREFIX=c:/mingw32/usr/local/bin/
CREATEDIR=mkdir -p
INSTALL=cp
UNINSTALL=rm -f
WINDRES=windres.exe --preprocessor "cpp.exe"
COMPRESS=upx.exe --best -vk --overlay=skip --compress-icons=0 

EXE=sjasmplus.exe

SUBDIR_BASE=sjasm
SUBDIR_LUA=lua5.5
SUBDIR_LUABRIDGE=LuaBridge/Source
SUBDIR_CRC32C=crc32c

# Ped7g: -pedantic removed due to Lua5.4 having too many warnings
CFLAGS=-DNDEBUG -O2 -Wall -static -DUSE_LUA -DMAX_PATH=PATH_MAX -I$(SUBDIR_LUA) -I$(SUBDIR_LUABRIDGE) -I$(SUBDIR_CRC32C)
CXXFLAGS=-std=gnu++17 $(CFLAGS)

LDFLAGS= -s

#sjasmplus object files
OBJS=\
	$(SUBDIR_BASE)/devices.o \
	$(SUBDIR_BASE)/directives.o \
	$(SUBDIR_BASE)/io_cpc.o \
	$(SUBDIR_BASE)/io_err.o \
	$(SUBDIR_BASE)/io_nex.o \
	$(SUBDIR_BASE)/io_snapshots.o \
	$(SUBDIR_BASE)/io_trd.o \
	$(SUBDIR_BASE)/io_tzx.o \
	$(SUBDIR_BASE)/io_tape.o \
	$(SUBDIR_BASE)/lua_sjasm.o \
	$(SUBDIR_BASE)/parser.o \
	$(SUBDIR_BASE)/reader.o \
	$(SUBDIR_BASE)/relocate.o \
	$(SUBDIR_BASE)/sjasm.o \
	$(SUBDIR_BASE)/sjio.o \
	$(SUBDIR_BASE)/support.o \
	$(SUBDIR_BASE)/tables.o \
	$(SUBDIR_BASE)/z80.o \
	$(SUBDIR_CRC32C)/crc32c.o

#liblua objects
LUAOBJS= \
	$(SUBDIR_LUA)/lcorolib.o $(SUBDIR_LUA)/lctype.o $(SUBDIR_LUA)/lutf8lib.o \
	$(SUBDIR_LUA)/lapi.o $(SUBDIR_LUA)/lauxlib.o $(SUBDIR_LUA)/lbaselib.o \
	$(SUBDIR_LUA)/lcode.o $(SUBDIR_LUA)/ldblib.o $(SUBDIR_LUA)/ldebug.o \
	$(SUBDIR_LUA)/ldo.o $(SUBDIR_LUA)/ldump.o $(SUBDIR_LUA)/lfunc.o \
	$(SUBDIR_LUA)/lgc.o $(SUBDIR_LUA)/linit.o $(SUBDIR_LUA)/liolib.o \
	$(SUBDIR_LUA)/llex.o $(SUBDIR_LUA)/lmathlib.o $(SUBDIR_LUA)/lmem.o \
	$(SUBDIR_LUA)/loadlib.o $(SUBDIR_LUA)/lobject.o $(SUBDIR_LUA)/lopcodes.o \
	$(SUBDIR_LUA)/loslib.o $(SUBDIR_LUA)/lparser.o $(SUBDIR_LUA)/lstate.o \
	$(SUBDIR_LUA)/lstring.o $(SUBDIR_LUA)/lstrlib.o $(SUBDIR_LUA)/ltable.o \
	$(SUBDIR_LUA)/ltablib.o $(SUBDIR_LUA)/ltm.o $(SUBDIR_LUA)/lundump.o \
	$(SUBDIR_LUA)/lvm.o $(SUBDIR_LUA)/lzio.o

RES=sjasmwin32/sjasmplus.res


.PHONY: all clean

all: $(LUAOBJS) $(OBJS) $(RES)
	$(GPP) -o $(EXE) $(CXXFLAGS) $(OBJS) $(LUAOBJS) $(LDFLAGS) $(RES)

install:
	$(CREATEDIR) $(PREFIX)
	$(INSTALL) $(EXE) $(PREFIX)

uninstall:
	$(UNINSTALL) $(PREFIX)/$(EXE)
	
compress:
	$(COMPRESS) $(EXE)	

$(SUBDIR_LUA)/%.o : $(SUBDIR_LUA)/%.c	# build Lua as C++ library, not C
	$(GPP) -x c++ $(CFLAGS) -o $@ -c $<

.c.o:					# build other .c files as C (if any ever...)
	$(GCC) $(CFLAGS) -o $@ -c $<

.cpp.o:
	$(GPP) $(CXXFLAGS) -o $@ -c $<

$(RES): sjasmwin32/sjasmplus.mingw.rc
	$(WINDRES) -i $< -O coff -o $@

clean:
	$(UNINSTALL) \
		$(SUBDIR_BASE)/*.o \
		$(SUBDIR_LUA)/*.o \
		$(SUBDIR_CRC32C)/*.o \
		$(RES) $(EXE) *~
