# --- configuration

# Whether we should compile in TTDPatch. See http://ttdpatch.net/ for details,
# HACKING for details regarding integration and possibilities of newer version
# integration.
TTDPATCH=1


CFLAGS=-g -O2


# --- build stuff


OBJECTS=start_core.o bankswitch.o timer.o video_patches.o \
	getcwd.o mouse_patches.o fs_patches.o random_patches.o keyb_patches.o \
	network_patches.o serial_patches.o stringtable.o \
	patch_locs_us.o patch_locs_en.o patch_locs_de.o \
	patch_locs_fr.o patch_locs_es.o

ifeq ($(TTDPATCH),1)
  CFLAGS += -DUSE_TTDPATCH
  TTDPATCH_OBJECTS=ttdprotl.o
else
  TTDPATCH_OBJECTS=
endif


OBJECTS_LOADER=$(OBJECTS) loadtycoon.o $(TTDPATCH_OBJECTS)

OBJECTS_IMAGE=$(OBJECTS) linuxtycoon.o image.o



all: loadtycoon

loadtycoon: $(OBJECTS_LOADER) loadtycoonlink.res libttdpatch.a
	gcc -Xlinker -T -Xlinker loadtycoonlink.res -o $@ $(OBJECTS_LOADER) -lgii -lc -L. -lttdpatch



# Just some experimental stuff

linuxtycoon: $(OBJECTS_IMAGE) loadtycoonlink.res
	gcc -Xlinker -T -Xlinker linuxtycoonlink.res -o $@ $(OBJECTS_IMAGE) -lgii -lc

linuxtycoon.o: loadtycoon.c exitcodes.h
	gcc $(CFLAGS) -c -DUSE_IMAGE -o linuxtycoon.o loadtycoon.c



%.o: %.c exitcodes.h patches.h
	gcc $(CFLAGS) -c -o $@ $<

%.o: %.asm inc/system.inc inc/syscall.inc patches.inc
	nasm -f elf -D__LINUX__ -i./inc/ $<



mousetest: mousetest.o
	gcc -o mousetest -lgii mousetest.o

mousetest.o: mousetest.c
	gcc -o mousetest.o -c -O2 mousetest.c

search_patches: grep.o grepdef.o search_patches.o
load_tycoon_writeimg: load_tycoon_writeimg.o
gen_patch_include: gen_patch_include.o
extract_strings: extract_strings.o

patches.inc: gen_patch_include patches.dat
	./gen_patch_include patches.dat assembler>patches.inc

patches.h: gen_patch_include patches.dat
	./gen_patch_include patches.dat c>patches.h

# TODO: Clean build of multiple languages images is not really supported.

patch_locs_us.asm: search_patches patches.dat tycoon_us.img
	./search_patches patches.dat tycoon_us.img patch_locs_us.asm patch_locs_us

patch_locs_en.asm: search_patches patches.dat tycoon_en.img
	./search_patches patches.dat tycoon_en.img patch_locs_en.asm patch_locs_en
	
patch_locs_de.asm: search_patches patches.dat tycoon_de.img
	./search_patches patches.dat tycoon_de.img patch_locs_de.asm patch_locs_de

patch_locs_es.asm: search_patches patches.dat tycoon_es.img
	./search_patches patches.dat tycoon_es.img patch_locs_es.asm patch_locs_es

patch_locs_fr.asm: search_patches patches.dat tycoon_fr.img
	./search_patches patches.dat tycoon_fr.img patch_locs_fr.asm patch_locs_fr

tycoon_us.img: tycoon.img
	rm -f tycoon_us.img
	ln -s tycoon.img tycoon_us.img

tycoon_en.img: tycoon.img
	rm -f tycoon_en.img
	ln -s tycoon.img tycoon_en.img

tycoon_de.img: tycoon.img
	rm -f tycoon_de.img
	ln -s tycoon.img tycoon_de.img

tycoon_es.img: tycoon.img
	rm -f tycoon_es.img
	ln -s tycoon.img tycoon_es.img

tycoon_fr.img: tycoon.img
	rm -f tycoon_fr.img
	ln -s tycoon.img tycoon_fr.img

tycoon.img: load_tycoon_writeimg tycoon/TYCOON.EXE
	./load_tycoon_writeimg

ttdprotl.o: ttdprotl.bin



disass: loadtycoon
	objdump --disassemble loadtycoon>loadtycoon.dis

distyc: tycoon.img
	nasm -u -k 0,1199968 tycoon.img >tycoon.asm

instpatch:
	cp ../ttdpatch/ttdprotl.bin .
	cp ../ttdpatch/libttdpatch.a .

clean:
	rm -f loadtycoon linuxtycoon *.o patch_locs_??.asm *.img
	rm -f load_tycoon_writeimg gen_patch_include search_patches
