# Phoenix 1.1 Makefile
# Written by Lukas Lipka

CFLAGS   = -g -O3 -funroll-loops -Iinclude
CPPFLAGS = -g -O3 -funroll-loops -Iinclude

OBJ_DIR = obj


OBJ_LIST = \
$(OBJ_DIR)/main.o \
$(OBJ_DIR)/debug.o \
$(OBJ_DIR)/vfile.o \
$(OBJ_DIR)/registry.o \
$(OBJ_DIR)/ini.o \
$(OBJ_DIR)/screen.o \
$(OBJ_DIR)/metrics.o \
$(OBJ_DIR)/mouse.o \
$(OBJ_DIR)/keyboard.o \
$(OBJ_DIR)/tasks.o \
$(OBJ_DIR)/events.o \
$(OBJ_DIR)/exports.o \
$(OBJ_DIR)/image.o \
$(OBJ_DIR)/text.o \
$(OBJ_DIR)/list.o \
$(OBJ_DIR)/dms.o \
$(OBJ_DIR)/resource.o \
$(OBJ_DIR)/dms/bin.o \
$(OBJ_DIR)/dms/txt.o \
$(OBJ_DIR)/error.o \
$(OBJ_DIR)/timer.o \
$(OBJ_DIR)/thread.o \
$(OBJ_DIR)/font.o \
$(OBJ_DIR)/utext.o \
$(OBJ_DIR)/vfile/msdos.o \
$(OBJ_DIR)/vfile/root.o \
$(OBJ_DIR)/dms/utxt.o \
$(OBJ_DIR)/dynld.o

#Applications
APPOBJ = \
$(OBJ_DIR)/xapps/desktop.o \
$(OBJ_DIR)/xapps/sample.o \
$(OBJ_DIR)/xapps/nav.o \
$(OBJ_DIR)/xapps/calc.o \
$(OBJ_DIR)/xapps/snote.o \
$(OBJ_DIR)/xapps/o3pad.o \
$(OBJ_DIR)/xapps/regedit.o \
$(OBJ_DIR)/xapps/immagine.o \
$(OBJ_DIR)/xapps/setscr.o \
$(OBJ_DIR)/xapps/setmouse.o \
$(OBJ_DIR)/xapps/resedit.o \
$(OBJ_DIR)/xapps/about.o \
$(OBJ_DIR)/xapps/snake.o \
$(OBJ_DIR)/xapps/kedit.o \
$(OBJ_DIR)/xapps/setkeyb.o \
$(OBJ_DIR)/xapps/mines.o \
$(OBJ_DIR)/xapps/setwall.o \
$(OBJ_DIR)/xapps/settheme.o \
$(OBJ_DIR)/xapps/console.o \
$(OBJ_DIR)/xapps/rundos.o \
$(OBJ_DIR)/xapps/laby.o

APPLD = \
bin/xapps/desktop.app \
bin/xapps/sample.app \
bin/xapps/nav.app \
bin/xapps/calc.app \
bin/xapps/snote.app \
bin/xapps/o3pad.app \
bin/xapps/regedit.app \
bin/xapps/immagine.app \
bin/xapps/setscr.app \
bin/xapps/setmouse.app \
bin/xapps/resedit.app \
bin/xapps/about.app \
bin/xapps/snake.app \
bin/xapps/kedit.app \
bin/xapps/setkeyb.app \
bin/xapps/mines.app \
bin/xapps/setwall.app \
bin/xapps/settheme.app \
bin/xapps/console.app \
bin/xapps/rundos.app \
bin/xapps/laby.app

#Libraries
LIBOBJ = \
$(OBJ_DIR)/xlib/widget.o \
$(OBJ_DIR)/xlib/skin.o \
$(OBJ_DIR)/xlib/bmp.o \
$(OBJ_DIR)/xlib/button.o \
$(OBJ_DIR)/xlib/label.o \
$(OBJ_DIR)/xlib/progress.o \
$(OBJ_DIR)/xlib/checkbox.o \
$(OBJ_DIR)/xlib/clipbrd.o \
$(OBJ_DIR)/xlib/window.o \
$(OBJ_DIR)/xlib/menu.o \
$(OBJ_DIR)/xlib/scrllbar.o \
$(OBJ_DIR)/xlib/listbox.o \
$(OBJ_DIR)/xlib/textbox.o \
$(OBJ_DIR)/xlib/canvas.o \
$(OBJ_DIR)/xlib/treeview.o \
$(OBJ_DIR)/xlib/groupbox.o \
$(OBJ_DIR)/xlib/slider.o \
$(OBJ_DIR)/xlib/listview.o \
$(OBJ_DIR)/xlib/iodlg.o \
$(OBJ_DIR)/xlib/combobox.o \
$(OBJ_DIR)/xlib/fms.o \
$(OBJ_DIR)/xlib/fprop.o \
$(OBJ_DIR)/xlib/tabbook.o \
$(OBJ_DIR)/xlib/cp.o \
$(OBJ_DIR)/xlib/toolbar.o \
$(OBJ_DIR)/xlib/png.o \
$(OBJ_DIR)/xlib/prevscr.o \
$(OBJ_DIR)/xlib/conlib.o \
$(OBJ_DIR)/xlib/grfx.o

LIBLD = \
bin/xlib/widget.dl \
bin/xlib/skin.dl \
bin/xlib/bmp.dl \
bin/xlib/clipbrd.dl \
bin/xlib/button.dl \
bin/xlib/label.dl \
bin/xlib/progress.dl \
bin/xlib/checkbox.dl \
bin/xlib/window.dl \
bin/xlib/menu.dl \
bin/xlib/scrllbar.dl \
bin/xlib/listbox.dl \
bin/xlib/textbox.dl \
bin/xlib/canvas.dl \
bin/xlib/treeview.dl \
bin/xlib/groupbox.dl \
bin/xlib/slider.dl \
bin/xlib/listview.dl \
bin/xlib/iodlg.dl \
bin/xlib/combobox.dl \
bin/xlib/fms.dl \
bin/xlib/fprop.dl \
bin/xlib/tabbook.dl \
bin/xlib/cp.dl \
bin/xlib/toolbar.dl \
bin/xlib/png.dl \
bin/xlib/prevscr.dl \
bin/xlib/conlib.dl \
bin/xlib/grfx.dl

LIB_LIST = \
lib/libz.a

all : $(OBJ_LIST) $(OBJ_DIR)/dynldlnk.o dynldlnk.exe $(LIBOBJ) $(LIBLD) $(APPOBJ) $(APPLD) bin/main.exe
	@echo Codename Phoenix has been built.

$(OBJ_DIR)/xlib/%.o: src/xlib/%.c
	gcc $(CFLAGS) -c $< -o $@

$(OBJ_DIR)/xapps/%.o: src/xapps/%.c
	gcc $(CFLAGS) -c $< -o $@

$(OBJ_DIR)/xlib/%.o: src/dms/%.c
	gcc $(CFLAGS) -c $< -o $@

$(OBJ_DIR)/vfile/%.o: src/vfile/%.c
	gcc $(CFLAGS) -c $< -o $@

$(OBJ_DIR)/%.o: src/%.c
	gcc $(CFLAGS) -c $< -o $@

bin/xapps/%.app: $(OBJ_DIR)/xapps/%.o
	dynldlnk.exe $@ $<

bin/xapps/setscr.app: $(OBJ_DIR)/xapps/setscr.o res/setscr.res
	dynldlnk.exe -Rres/setscr.res bin/xapps/setscr.app $(OBJ_DIR)/xapps/setscr.o

bin/xapps/about.app: $(OBJ_DIR)/xapps/about.o res/about.res
	dynldlnk.exe -Rres/about.res bin/xapps/about.app $(OBJ_DIR)/xapps/about.o

bin/xlib/fms.dl: $(OBJ_DIR)/xlib/fms.o res/fms.res
	dynldlnk.exe -Rres/fms.res bin/xlib/fms.dl $(OBJ_DIR)/xlib/fms.o

bin/xlib/prevscr.dl: $(OBJ_DIR)/xlib/prevscr.o res/prvscr.res
	dynldlnk.exe -Rres/prvscr.res bin/xlib/prevscr.dl $(OBJ_DIR)/xlib/prevscr.o

bin/xlib/cp.dl: $(OBJ_DIR)/xlib/cp.o res/cp.res
	dynldlnk.exe -Rres/cp.res bin/xlib/cp.dl $(OBJ_DIR)/xlib/cp.o

bin/xlib/%.dl: $(OBJ_DIR)/xlib/%.o
	dynldlnk.exe $@ $<

dynldlnk.exe : obj/dynldlnk.o
	gcc -s -o dynldlnk.exe obj/dynldlnk.o lib/libz.a

reslnk.exe : obj/reslnk.o
	gcc -s -o reslnk.exe obj/reslnk.o obj/list.o lib/libz.a

bin/main.exe : $(OBJ_LIST)
	gcc -s -o bin\main.exe $(OBJ_LIST) $(LIB_LIST) -lalttf -lalleg

clean :
	del $(subst /,\,$(OBJ_DIR)/*.o)
	del $(subst /,\,$(OBJ_DIR)/xlib/*.o)
	del $(subst /,\,$(OBJ_DIR)/xapps/*.o)
	del $(subst /,\,$(OBJ_DIR)/dms/*.o)
	del $(subst /,\,$(OBJ_DIR)/vfile/*.o)
	del $(subst /,\,bin/xapps/*.app)
	del $(subst /,\,bin/xlib/*.dl)

compress :
	upx -9 bin/main.exe