
# nmake makefile which creates JLOAD.EXE
# tools used:
# - Assembler: JWasm/Masm
# - OMF Linker:
#    + jwlink or
#    + MS LINK 
# - RAW binary Linker ( or COFF linker):
#    + jwlink
#    + MS LINK or
#    + POLINK 

!ifndef DEBUG
DEBUG = 0
!endif

!if $(DEBUG)
OUTDIR = DEBUG
!else
OUTDIR = RELEASE
!endif

NAME  = JLOAD
NAME32= JLOAD32
VXD1  = VMM
VXD4  = VDMAD
LIBS  = 

!ifndef MASM
MASM=0
!endif

!ifndef MSLINK32
MSLINK32=$(MASM)
!endif


!if $(MASM)
ASM   = @ml.exe -c -nologo -Fl$* -Fo$* -D?DEBUG=$(DEBUG) -I..\..\Include -I..\..\src
ASM32 = @ml.exe -c -coff -nologo -Sg $(AOPTD) -I..\..\Include -I..\..\src
!else
ASM   = @jwasm.exe -c -nologo -Fl$* -Fo$* -D?DEBUG=$(DEBUG) -I..\..\Include -I..\..\src
ASM32 = @jwasm.exe -c -coff -nologo -Sg $(AOPTD) -I..\..\Include -I..\..\src
!endif

#LINK16  = @\dm\bin\link.exe
#LINK16  = link16.exe
#LOPTS = /MAP:FULL/NOE/NON/ONERROR:NOEXE
LINK16  = jwlink.exe
LOPTS = op m=$*.MAP
!if $(MSLINK32)
LINK32=@link.exe /nologo /filealign:0x200 /fixed /driver /subsystem:native /base:0xF83F0000 /align:0x10000 /MAP /MERGE:DATA_=.text
#LINK32=polink.exe /fixed /driver /subsystem:native /base:0xFBFF0000 /align:0x10000 /MAP /MERGE:.data=.text
!else
LINK32=@jwlink.exe format raw bin op offset=0xF8400000, map, start='_start@0',quiet
!endif
INC32=jload.inc jload32.inc debug.inc ..\..\src\Jemm32.inc ..\..\Include\jlm.inc
INC16=jload.inc debug.inc ..\..\src\Jemm32.inc ..\..\src\Jemm.inc ..\..\Include\jlm.inc

ALL: $(OUTDIR) $(OUTDIR)\$(NAME).EXE

$(OUTDIR):
	@mkdir $(OUTDIR)

$(OUTDIR)\$(NAME).EXE: $(OUTDIR)\$(NAME).obj MAKEFILE
#	$(LINK16) @<<
#$*.OBJ $(LOPTS), $*.EXE, $*.MAP, $(LIBS);
	@$(LINK16) format dos file $*.OBJ $(LOPTS) name $*.EXE op quiet

$(OUTDIR)\$(NAME).OBJ: $(NAME).asm $(OUTDIR)\$(NAME32).inc $(INC16)
	$(ASM) $(NAME).asm

$(OUTDIR)\$(NAME32).INC: $(OUTDIR)\$(NAME32).obj $(OUTDIR)\$(VXD1).obj $(OUTDIR)\$(VXD4).obj
	@cd $(OUTDIR)
!if $(MSLINK32)
	$(LINK32) $(NAME32).obj $(VXD1).obj $(VXD4).obj /OUT:$(NAME32).bin 
	@..\..\extrsect.exe -i -q -x 0 $(NAME32).bin $(NAME32).inc
!else
	$(LINK32) f { $(NAME32).obj $(VXD1).obj $(VXD4).obj} name $(NAME32).bin
	@..\..\bin2inc.exe $(NAME32).bin $(NAME32).inc
!endif
	@cd ..

$(OUTDIR)\$(NAME32).obj: $(NAME32).asm $(INC32) MAKEFILE
	$(ASM32) -Fl$(OUTDIR)\$(NAME32).LST -Fo$(OUTDIR)\$(NAME32).OBJ $(NAME32).asm

$(OUTDIR)\$(VXD1).obj: $(VXD1).asm $(INC32) MAKEFILE
	$(ASM32) -Fl$(OUTDIR)\$(VXD1).LST -Fo$(OUTDIR)\$(VXD1).OBJ $(VXD1).asm

$(OUTDIR)\$(VXD4).obj: $(VXD4).asm $(INC32) MAKEFILE
	$(ASM32) -Fl$(OUTDIR)\$(VXD4).LST -Fo$(OUTDIR)\$(VXD4).OBJ $(VXD4).asm

clean:
	@del $(OUTDIR)\*.exe
	@del $(OUTDIR)\*.obj
	@del $(OUTDIR)\*.lib
	@del $(OUTDIR)\*.lst
	@del $(OUTDIR)\*.map
