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

TTDPATCH_OBJECTS=ttdpatch.o ttdprotl.o switches.o

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

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



all: loadtycoon

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



# 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 -g -O2 -c -DUSE_IMAGE -o linuxtycoon.o loadtycoon.c



%.o: %.c exitcodes.h patches.h
	gcc -g -O2 -c -DUSE_TTDPATCH -o $@ $<

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

%.o: ttdpatch/%.cpp patches.h
	gcc -g -I ttdpatch -fno-exceptions -fno-rtti -O2 -c -DLINTTDX=1 -o $@ $<

%.o: ttdpatch/%.c
	gcc -g -I ttdpatch -fno-exceptions -fno-rtti -O2 -c -DLINTTDX=1 -o $@ $<



ldttest: ldttest.o ldttest1.o

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



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

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