
# This makefile creates the JWasm Win32 or Win64 binary with PellesC. 
# Enter
#   pomake -f PellesC.mak
# to create the Win32 version. Or enter
#   pomake -f PellesC.mak amd64=1
# to create the Win64 version.
#
# Optionally, with 'pomake -f PellesC.mak DOS' one can additionally
# create a JWasm DOS binary (32-bit only. This needs the HXDEV package
# (see HXDIR below).

name = jwasm

# directory paths to adjust
# PODIR  - root directory for compiler, linker, include and lib files

!ifndef PODIR
PODIR  = \PellesC
!endif

!ifdef AMD64
TARGET=/Tamd64-coff
!endif

!ifdef DEBUG
OUTD=build\POCD
extra_c_flags = -Zi -DDEBUG_OUT $(TARGET)
LOPTD = /debug
!else
OUTD=build\POCR
extra_c_flags = -O2 -DNDEBUG $(TARGET)
LOPTD =
!endif

inc_dirs = -Isrc\H -I"$(PODIR)\include"

LINK = $(PODIR)\Bin\polink.exe
LIB = $(PODIR)\Bin\polib.exe

# options: 
#  -Ze  enable MS extensions
#  -J   default type of char is unsigned
#  -std:C99  use C99, not C11
c_flags =-D__NT__ -Ze -J -std:C99 $(extra_c_flags)

lflagsw = $(LOPTD) /SUBSYSTEM:CONSOLE /map:$*.map

CC=$(PODIR)\bin\pocc.exe $(inc_dirs) $(c_flags)

{src}.c{$(OUTD)}.obj:
	$(CC) -Fo$*.obj $<

proj_obj = \
!include msmod.inc

!ifdef DOS
# directory where HXDEV has been installed.
HXDIR=\hx
DOSTARG=$(OUTD)\$(name)d.exe
lflagsd = $(LOPTD) /NODEFAULTLIB /FIXED:NO /SUBSYSTEM:CONSOLE /map:$*.map /STUB:$(HXDIR)\bin\loadpex.bin /LIBPATH:$(HXDIR)\Lib dkrnl32s.lib imphlp.lib /STACK:0x40000,0x1000 /HEAP:0x1000,0x1000
!endif

all: $(OUTD) $(OUTD)\$(name).exe $(DOSTARG)

$(OUTD):
	@mkdir $(OUTD)

$(OUTD)\$(name).exe : $(OUTD)\main.obj $(OUTD)\$(name).lib
!ifdef AMD64
	$(LINK) $(lflagsw) $(OUTD)\main.obj $(OUTD)\$(name).lib /LIBPATH:$(PODIR)\Lib /LIBPATH:$(PODIR)\Lib\Win64 /OUT:$@
!else
	$(LINK) $(lflagsw) $(OUTD)\main.obj $(OUTD)\$(name).lib /LIBPATH:$(PODIR)\Lib /LIBPATH:$(PODIR)\Lib\Win /OUT:$@
!endif

$(OUTD)\$(name)d.exe : $(OUTD)\main.obj $(OUTD)\$(name).lib
	@$(LINK) $(lflagsd) $(HXDIR)\Lib\initw32.obj $(OUTD)\main.obj $(OUTD)\$(name).lib /LIBPATH:$(PODIR)\Lib crt.lib /OUT:$@
	@$(HXDIR)\bin\patchpe $*.exe

$(OUTD)\$(name).lib : $(proj_obj)
	@$(LIB) /out:$(OUTD)\$(name).lib $(proj_obj)

######

clean:
	@erase $(OUTD)\*.exe
	@erase $(OUTD)\*.obj
	@erase $(OUTD)\*.map
