
#
# RxDOS Vers 6.00 (c) Mike Podanoffsky
#
# this makefile uses JWasm and OW Wlink + exe2bin.
# make utility to use is NMAKE. If WMAKE is used, option -ms must be added!

OUTDIR = Release

TARGETS = $(OUTDIR) $(OUTDIR)\rxdos.sys $(OUTDIR)\rxdosbio.sys $(OUTDIR)\rxdoscmd.exe $(OUTDIR)\rxd_boot.exe $(OUTDIR)\rxvdisk.sys

SOURCE_DIR = .

INCLUDE_SW = -I$(SOURCE_DIR)

# to use OW Wlink set WLINK=1, else MS OMF linker is used (link16.exe)

WLINK=1

!if "$(RxDOS_RELEASE)" == "1"
ASM_SW = -DRxDOS_RELEASE
LINK_SW =
!else
ASM_SW =
LINK_SW = 
!endif

!ifndef MASM
MASM=0
!endif

!if $(MASM)
ASM= @ml.exe -c -nologo -Zm -Fo$* -Fl$*
!else
ASM= @JWasm.exe -nologo -Zm -Fo$* -Fl$*
!endif
!if $(WLINK)
LINK= @wlink.exe sys dos op NOCASEexact, quiet
!else
LINK= @link16.exe /NOLOGO /MAP
!endif

!if "$(INCLUDE_DATACHECK)" == "1"
ASM_SW = -DRxDOS_RELEASE -DINCLUDE_DATACHECK
LINK_SW = 
!endif

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# All
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

all: $(TARGETS)

$(OUTDIR):
	@if not exist $(OUTDIR)\nul mkdir $(OUTDIR)

clean:
	del $(OUTDIR)\*.obj
	del $(OUTDIR)\*.map
	del $(OUTDIR)\*.exe 
	del $(OUTDIR)\*.sys 

xdata:
	$(MAKE) "INCLUDE_DATACHECK=1"

rel:
	$(MAKE) clean
	$(MAKE) "RxDOS_RELEASE=1"

debug:
	$(MAKE)

zip:
	$(MAKE) rel
	@if not exist ver\nul mkdir ver
	zip -D ver\rxdossrc.zip *.* Res\*.* RxDosMbr\*.* RxDosChk\*.* Bin\*.*
	zip -j ver\rxd_boot.zip  $(OUTDIR)\rx*.sys $(OUTDIR)\rxdoscmd.exe $(OUTDIR)\rxd_boot.exe RES\*

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Shortcuts
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

rxdos: $(OUTDIR)\rxdos.sys

rxdosbio: $(OUTDIR)\rxdosbio.sys

rxdoscmd: $(OUTDIR)\rxdoscmd.exe

rxd_boot: $(OUTDIR)\rxd_boot.exe

rxvdisk:  $(OUTDIR)\rxvdisk.sys

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Overwrite default rules
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

.asm{$(OUTDIR)}.exe:
	$(ASM) $(ASM_SW) $(INCLUDE_SW) $<

.asm{$(OUTDIR)}.obj:
	$(ASM) $(ASM_SW) $(INCLUDE_SW) $<

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# boot program
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MODS1 = $(OUTDIR)\rxd_boot.obj

$(OUTDIR)\rxd_boot.exe : $(MODS1)
!if $(WLINK)
	$(LINK) $(LINK_SW) file {$(MODS1)} name $*.exe op map=$*.map
!else
	$(LINK) $(LINK_SW) $(MODS1), $*.exe, $*.map;
!endif

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Bios load program - rxdosbio
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MODS2 = $(OUTDIR)\rxdosbio.obj

$(OUTDIR)\rxdosbio.sys : $(MODS2)
!if $(WLINK)
	$(LINK) $(LINK_SW) file {$(MODS2)} name $*.exe op map=$*.map
!else
	$(LINK) $(LINK_SW) $(MODS2), $*.exe, $*.map;
!endif    
	@Bin\exe2bin -q -l=0000 $*.exe $*.sys
    @del $*.exe

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# DOS kernel
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MODS3 = $(OUTDIR)\rxdos.obj     $(OUTDIR)\rxdosccb.obj \
        $(OUTDIR)\rxdosdev.obj  $(OUTDIR)\rxdosexe.obj \
        $(OUTDIR)\rxdosfat.obj  $(OUTDIR)\rxdosfcb.obj \
        $(OUTDIR)\rxdosfil.obj  $(OUTDIR)\rxdoslfn.obj \
        $(OUTDIR)\rxdosf32.obj  $(OUTDIR)\rxdosifs.obj \
        $(OUTDIR)\rxdosmem.obj  $(OUTDIR)\rxdossft.obj \
        $(OUTDIR)\rxdosstr.obj  $(OUTDIR)\rxdosctb.obj \
        $(OUTDIR)\debug.obj \
        $(OUTDIR)\rxdoserr.obj  $(OUTDIR)\rxdosini.obj 

$(OUTDIR)\rxdos.sys : $(MODS3)
!if $(WLINK)
	$(LINK) $(LINK_SW) file {$(MODS3)} name $*.exe op map=$*.map
!else
	$(LINK) $(LINK_SW) @<<
$(OUTDIR)\rxdos    + $(OUTDIR)\rxdosccb +
$(OUTDIR)\rxdosdev + $(OUTDIR)\rxdosexe +
$(OUTDIR)\rxdosfat + $(OUTDIR)\rxdosfcb +
$(OUTDIR)\rxdosfil + $(OUTDIR)\rxdoslfn +
$(OUTDIR)\rxdosf32 + $(OUTDIR)\rxdosifs +
$(OUTDIR)\rxdosmem + $(OUTDIR)\rxdossft +
$(OUTDIR)\rxdosstr + $(OUTDIR)\rxdosctb +
$(OUTDIR)\rxdoserr + $(OUTDIR)\rxdosini, 
$*.exe, $*.map;
<<
!endif
	@Bin\exe2bin -q -l=0000 $*.exe $*.sys
    @del $*.exe

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# DOS Command - rxdoscmd.exe
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  rxdosren MUST be last file
# (japheth: rxdoscmd instead of rxdosren must be last file! See
#  label RXDOSLASTADDRESS in map file)

MODS4 = $(OUTDIR)\rxdoscpy.obj $(OUTDIR)\rxdosdir.obj $(OUTDIR)\rxdosfor.obj \
        $(OUTDIR)\debug.obj \
        $(OUTDIR)\rxdosprm.obj $(OUTDIR)\rxdosren.obj $(OUTDIR)\rxdoscmd.obj  

$(OUTDIR)\rxdoscmd.exe : $(MODS4)
!if $(WLINK)
	$(LINK) $(LINK_SW) file {$(MODS4)} name $*.exe op map=$*.map
!else
	$(LINK) $(LINK_SW) @<<
$(OUTDIR)\rxdoscpy + $(OUTDIR)\rxdosdir + $(OUTDIR)\rxdosfor +
$(OUTDIR)\debug.obj +
$(OUTDIR)\rxdosprm + $(OUTDIR)\rxdosren + $(OUTDIR)\rxdoscmd,
$*.exe, $*.map;
<<
!endif

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# RAM DISK
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MODS5 = $(OUTDIR)\rxvdisk.obj

$(OUTDIR)\rxvdisk.sys : $(MODS5)
!if $(WLINK)
	$(LINK) $(LINK_SW) file {$(MODS5)} name $*.exe op map=$*.map
!else
	$(LINK) $(LINK_SW) $(MODS5), $*.exe, $*.map;
!endif
	@Bin\exe2bin -q -l=0000 $*.exe $*.sys
    @del $*.exe

