1 2# this makefile (NMake) creates the JWasm Win32 binary with MS Visual C++. 3# 4# optionally, a DOS binary can be created. Then the HXDEV package is needed. 5# 6# to use jwlink instead of MS link, enter: "nmake -f msvc.mak mslink=0 7# to additionally create a DOS binary, enter: "nmake -f msvc.mak dos=1 mslink=0" 8 9name = jwasm 10WIN=1 11 12!ifndef DOS 13DOS=0 14!endif 15!ifndef MSLINK 16MSLINK=1 17!endif 18 19# directory paths to adjust 20# VCDIR - root directory for VC compiler, linker, include and lib files 21# W32LIB - directory for Win32 import library files (kernel32.lib). 22# HXDIR - for DOS=1 only: root directory to search for stub LOADPEX.BIN, 23# libs DKRNL32S.LIB + IMPHLP.LIB and tool PATCHPE.EXE. 24 25!ifndef VCDIR 26VCDIR = %VCToolsInstallDir% 27!endif 28VCBIN=$(VCDIR)\bin\Hostx86\x86 29 30!ifndef W32LIB 31W32LIB = %WindowsSdkDir%\Lib\%WindowsSdkVersion%\um\x86 32W32LIBU = %WindowsSdkDir%\Lib\%WindowsSdkVersion%\ucrt\x86 33!endif 34 35!if $(DOS) 36HXDIR = \HX 37!endif 38 39!ifndef DEBUG 40DEBUG=0 41!endif 42 43!ifndef OUTD 44!if $(DEBUG) 45OUTD=build\MSVCD 46!else 47OUTD=build\MSVCR 48!endif 49!endif 50 51inc_dirs = -Isrc\H -I"$(VCDIR)\include" 52 53linker = link.exe 54lib = lib.exe 55 56!ifndef TRMEM 57TRMEM=0 58!endif 59 60!if $(DEBUG) 61#extra_c_flags = -Zi -Od -DDEBUG_OUT -FAa 62extra_c_flags = -Z7 -Od -DDEBUG_OUT 63!else 64extra_c_flags = -O2 -Gs -DNDEBUG 65!endif 66 67!if $(TRMEM) 68extra_c_flags = $(extra_c_flags) -DTRMEM -DFASTMEM=0 69!endif 70 71c_flags =-D__NT__ $(extra_c_flags) 72 73# linker option /OPT:NOWIN98 is not accepted by all MS linkers 74#LOPT = /NOLOGO /OPT:NOWIN98 75LOPT = /NOLOGO 76!if $(DEBUG) 77LOPTD = /debug 78!endif 79 80lflagsd = $(LOPTD) /SUBSYSTEM:CONSOLE $(LOPT) /map:$^*.map /Libpath:$(HXDIR)\lib 81lflagsw = $(LOPTD) /SUBSYSTEM:CONSOLE $(LOPT) /map:$^*.map 82 83CC="$(VCBIN)\cl.exe" -c -nologo $(inc_dirs) $(c_flags) 84 85{src}.c{$(OUTD)}.obj: 86 @$(CC) -Fo$* $< 87 88proj_obj = \ 89!include msmod.inc 90 91!if $(TRMEM) 92proj_obj = $(proj_obj) $(OUTD)/trmem.obj 93!endif 94 95!if $(WIN) 96TARGET1=$(OUTD)\$(name).exe 97!endif 98!if $(DOS) 99TARGET2=$(OUTD)\$(name)d.exe 100!endif 101 102ALL: build $(OUTD) $(TARGET1) $(TARGET2) 103 104build: 105 @mkdir build 106 107$(OUTD): 108 @mkdir $(OUTD) 109 110$(OUTD)\$(name).exe : $(OUTD)/main.obj $(OUTD)/$(name).lib 111!if $(MSLINK) 112 @$(linker) $(lflagsw) $(OUTD)/main.obj $(OUTD)/$(name).lib /LibPath:"$(VCDIR)\lib\x86" /LibPath:"$(W32LIB)" /LibPath:"$(W32LIBU)" /OUT:$@ 113!else 114 @jwlink @<< 115format windows pe file $(OUTD)/main.obj name $@ 116lib $(OUTD)/$(name).lib libpath "$(VCDIR)\Lib\x86" libpath "$(W32LIB)" op start=_mainCRTStartup, norelocs, eliminate, map=$(OUTD)/$(name).map 117#sort global op statics 118disable 173 119<< 120!endif 121 122$(OUTD)\$(name)d.exe : $(OUTD)/main.obj $(OUTD)/$(name).lib 123!if $(MSLINK) 124 @$(linker) @<< 125$(lflagsd) /NODEFAULTLIB initw32.obj $(OUTD)/main.obj $(OUTD)/$(name).lib /LIBPATH:$(VCDIR)\Lib 126libc.lib oldnames.lib /LIBPATH:$(HXDIR)\Lib imphlp.lib dkrnl32s.lib /STUB:$(HXDIR)\Bin\LOADPEX.BIN 127/OUT:$@ /FIXED:NO 128<< 129 @$(HXDIR)\bin\patchpe $@ 130!else 131 @jwlink @<< 132format windows pe hx file $(HXDIR)/lib/initw32.obj, $(OUTD)/main.obj name $@ lib $(OUTD)/$(name).lib 133libpath $(VCDIR)/Lib 134libpath $(HXDIR)/Lib lib imphlp.lib, dkrnl32s.lib, hxemu387.lib reference EMUInit 135op start=_start, eliminate, map=$(OUTD)/$(name)d.map, stub=$(HXDIR)\Bin\LOADPEX.BIN 136<< 137!endif 138 139$(OUTD)\$(name).lib : $(proj_obj) 140 @$(lib) /nologo /out:$(OUTD)\$(name).lib @<< 141$(proj_obj) 142<< 143 144$(OUTD)/msgtext.obj: src/msgtext.c src/H/msgdef.h src/H/globals.h 145 @$(CC) -Fo$* src/msgtext.c 146 147$(OUTD)/reswords.obj: src/reswords.c src/H/instruct.h src/H/special.h src/H/directve.h src/H/opndcls.h src/H/instravx.h 148 @$(CC) -Fo$* src/reswords.c 149 150###### 151 152clean: 153 @erase $(OUTD)\*.exe 154 @erase $(OUTD)\*.obj 155 @erase $(OUTD)\*.map 156