OBJ = armloader.o asmcode.o casplus.o cpu.o des.o debug.o emu.o flash.o gdbstub.o gui.o interrupt.o keypad.o lcd.o link.o memory.o misc.o mmu.o os-win32.o resource.o schedule.o serial.o sha256.o snippets.o translate.o usb.o usblink.o

FLAGS = -W -Wall

CC ?= gcc
LD ?= ld
WINDRES ?= windres
OBJCOPY ?= objcopy

all : nspire_emu.exe

emu.exe : $(OBJ)
	$(CC) $(FLAGS) $(OBJ) -o $@ -lgdi32 -lcomdlg32 -lwinmm -lws2_32

nspire_emu.exe : $(OBJ)
	$(CC) $(FLAGS) $(OBJ) -o $@ -lgdi32 -lcomdlg32 -lwinmm -lws2_32 -s -Wl,--nxcompat

cpu.o : cpu.c
	$(CC) $(FLAGS) -O3 -c $< -o $@

resource.o : resource.rc id.h
	$(WINDRES) $< -o $@

sha256.o : sha256.c
	$(CC) $(FLAGS) -O3 -c $< -o $@

asmcode.o : asmcode.S
	$(CC) -c $< -o $@

armsnippets.o: armsnippets.S
	arm-none-eabi-gcc -c -mcpu=arm7tdmi $< -o $@

snippets.o: armsnippets.o
	arm-none-eabi-objcopy -O binary $< snippets.bin
	$(LD) -r -b binary -o snippets.o snippets.bin
	rm snippets.bin
	$(OBJCOPY) --rename-section .data=.rodata,alloc,load,readonly,data,contents snippets.o snippets.o

%.o : %.c
	$(CC) $(FLAGS) -Os -c $< -o $@

clean : 
	rm -f *.o nspire_emu.exe emu.exe
