ICEDUMP=icedump

#NASM = nasmb
NASM = nasm
MAKE = make

SRC_ICEDUMP = \
	$(ICEDUMP).asm \
	apicall.asm \
	callback.asm \
	cmd_bhrama.asm \
	cmd_breakr3.asm \
	cmd_cdplayer.asm \
	cmd_clip.asm \
	cmd_dump.asm \
	cmd_fdump.asm \
	cmd_fpu.asm \
	cmd_haspcode.asm \
	cmd_help.asm \
	cmd_load.asm \
	cmd_memory.asm \
	cmd_mp3player.asm \
	cmd_msr.asm \
	cmd_option.asm \
	cmd_pageflag.asm \
	cmd_pbpm.asm \
	cmd_pedump.asm \
	cmd_protect.asm \
	cmd_screendump.asm \
	cmd_tetris.asm \
	cmd_thread.asm \
	cmd_trace.asm \
	common.asm \
	fileio.asm \
	k32.asm \
	memio.asm \
	parser.asm \
	taskmod.asm \
	util.asm \
	wiat.asm


OBJ_ICEDUMP = $(patsubst %.asm,%.o,$(SRC_ICEDUMP))

DEP_ICEDUMP = stub.dep $(patsubst %.asm,%.dep,$(SRC_ICEDUMP))

DEF_ICEDUMP = $(DIR_SRC)/$(ICEDUMP).def

DIR_SRC=../src

DIR_INC=$(DIR_SRC)/inc ../mp3/inc ../pd/inc ../../common/inc


ifeq ($(MAKELEVEL),0)

  VERSIONS = 3.22 3.23 3.24 3.25 4.00 4.01 4.05.334 4.05.526 4.21.53 4.25.824 4.26.922 4.27.562

  MY_WINICE = 4.27.562

  PD_LIB = pd/lib/pe.lib pd/lib/ymir.lib

#  ARCHIVE_ICEDUMP = $(foreach i,$(VERSIONS),$(i)/$(ICEDUMP).exe)
#  ARCHIVE_ICEDUMP += src doc sdclean pd mp3 latex file_id.diz makefile

  LINKFLAGS = /ignore:4078 /ignore:4070 /ignore:4039 /align:1024
  LINKFLAGS += /entry:ICEDUMP_Control /nologo /out:$(ICEDUMP).exe /vxd /nod
  LINKFLAGS += /def:$(DEF_ICEDUMP) /stub:stub.exe
  LINKFLAGS += /map:$(ICEDUMP).map
#  LINKFLAGS += /pdb:$(ICEDUMP).pdb
#  LINKFLAGS += /debug
  LINKFLAGS += $(foreach i,$(PD_LIB),../$(i))

  all: $(VERSIONS)

  $(VERSIONS): $(ICEDUMP).lnk $(PD_LIB)
	@$(MAKE) WINICE_VERSION=$@ -C $@ -f ../makefile

  $(ICEDUMP).lnk: force
	@echo $(LINKFLAGS) $(OBJ_ICEDUMP) > $@

  force: ;

  loadsym: $(MY_WINICE)/$(ICEDUMP).nms
	nmsym /sym:$^

  $(MY_WINICE)/$(ICEDUMP).nms: $(MY_WINICE)/$(ICEDUMP).sym
	nmsym $^ /out:$@

  $(MY_WINICE)/$(ICEDUMP).sym: $(MY_WINICE)/$(ICEDUMP).map
	cd $(MY_WINICE); mapall $(ICEDUMP).exe $(ICEDUMP).map; msym $(ICEDUMP).map
#	-mapall -p "__%s" $(ICEDUMP).exe $(ICEDUMP).map

  $(MY_WINICE)/$(ICEDUMP).map: force
	@$(MAKE) WINICE_VERSION=$(MY_WINICE) -C $(MY_WINICE) -f ../makefile

  mp3:
	$(MAKE) -C $@

  dep: $(foreach i,$(VERSIONS),$(i).dep)

  $(foreach i,$(VERSIONS),$(i).dep):
	$(MAKE) -C $(subst .dep,,$@) WINICE_VERSION=$(subst .dep,,$@) -f ../makefile dep
	
  zip:
#	zip -9pr icedump6.zip $(ARCHIVE_ICEDUMP)

  TEMPFILES = $(foreach i,$(VERSIONS),$(i)/*.o $(i)/*.exp $(i)/*.lib $(i)/*.map $(i)/*.nms $(i)/*.sym)

  clean:
	rm -f $(TEMPFILES)

  distclean:
	rm -f $(TEMPFILES) $(foreach i,$(VERSIONS),$(i)/*.dep $(i)/$(ICEDUMP).exe $(i)/stub.exe)

  .PHONY: all $(VERSIONS) clean dep distclean loadsym mp3 zip

endif

ifeq ($(MAKELEVEL),1)

  NASMFLAGS = -w+orphan-labels
  NASMFLAGS += -dWINICE_VERSION_MAJOR=$(word 1,$(subst ., ,$(WINICE_VERSION)))
  NASMFLAGS += -dWINICE_VERSION_MINOR=$(word 2,$(subst ., ,$(WINICE_VERSION)))
ifneq ($(word 3,$(subst ., ,$(WINICE_VERSION))),)
  NASMFLAGS += -dWINICE_BUILD=$(word 3,$(subst ., ,$(WINICE_VERSION)))
endif
  NASMFLAGS += $(foreach i,$(DIR_INC),-i$(i)/)
#  NASMFLAGS += -g

  vpath %.asm
  vpath %.asm $(DIR_SRC)

  vpath %.mac
  vpath %.mac $(DIR_INC)

  vpath %.inc
  vpath %.inc $(DIR_INC)

  all: $(ICEDUMP).exe

  $(ICEDUMP).exe: stub.exe $(OBJ_ICEDUMP) $(DEF_ICEDUMP)
	-link @../$(ICEDUMP).lnk
	-rm -f $(ICEDUMP).exp $(ICEDUMP).lib

  stub.exe: stub.asm
	$(NASM) $(NASMFLAGS) -f bin -o $@ $<

  dep:

  %.o: %.asm
	$(NASM) $(NASMFLAGS) -f win32 -o $@ $<

  stub.dep: stub.asm
	$(NASM) -M -dMAKEDEP $(NASMFLAGS) $< | sed 's/\(.*stub:\)/stub.exe :/g' > $@

  %.dep: %.asm
	$(NASM) -M -dMAKEDEP $(NASMFLAGS) $< | sed 's/\(.*$*:\)/$*.o :/g' > $@
#	$(NASM) -M -dMAKEDEP $(NASMFLAGS) $< | sed 's/\(.*$*:\)/$*.o $@ :/g' > $@

  -include $(DEP_ICEDUMP)

  .PHONY: all dep

endif
