X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=Nmakefile;h=065d24a757cc00a5710bf97b574b96c2e45e9b48;hp=160ec7a3350a9098f5f40d57ac0268d7d7007b0e;hb=HEAD;hpb=2725f7c2ba7e025355e7275d707732a9eed4c700 diff --git a/Nmakefile b/Nmakefile index 160ec7a335..f87fb76d2d 100644 --- a/Nmakefile +++ b/Nmakefile @@ -1,11 +1,33 @@ -!IF !DEFINED(VERSION) -VERSION = version-missing +VERSION = 0.100 + +# Crazy hack to do shell commands +# We do it in Nmakefile because that way we don't have to invoke build through build.cmd +# and we can just do ``nmake /f Nmakefile x86-64-vista`` or similar +# and we still get the git branch, id, etc + +!IF [git describe --all > git-describe.tmp] == 0 +GIT_DESCRIBE = \ +!INCLUDE +!IF [del git-describe.tmp] == 0 +!ENDIF !ENDIF -!IF !DEFINED(GIT_LABEL) -GIT_LABEL = git-label-missing +!IF [git rev-parse HEAD > git-id.tmp] == 0 +GIT_ID = \ +!INCLUDE +!IF [del git-id.tmp] == 0 +!ENDIF !ENDIF +!IF [git rev-parse --abbrev-ref HEAD > git-branch.tmp] == 0 +GIT_BRANCH = \ +!INCLUDE +!IF [del git-branch.tmp] == 0 +!ENDIF +!ENDIF + +GIT_LABEL = $(GIT_DESCRIBE)-$(GIT_ID) + !IF DEFINED(PLATFORM) LINK_FLAGS = /nologo shell32.lib user32.lib @@ -13,13 +35,13 @@ CL_FLAGS = /nologo /O2 /WX /W3 /D_CRT_SECURE_NO_WARNINGS /DFACTOR_VERSION=$(VERS CL_FLAGS_VISTA = /D_WIN32_WINNT=0x0600 !IF "$(PLATFORM)" == "x86-32" -LINK_FLAGS = $(LINK_FLAGS) /safeseh +LINK_FLAGS = $(LINK_FLAGS) /safeseh /largeaddressaware PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj SUBSYSTEM_COM_FLAGS = console,"5.01" SUBSYSTEM_EXE_FLAGS = windows,"5.01" !ELSEIF "$(PLATFORM)" == "x86-32-vista" -LINK_FLAGS = $(LINK_FLAGS) /safeseh +LINK_FLAGS = $(LINK_FLAGS) /safeseh /largeaddressaware CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA) PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj SUBSYSTEM_COM_FLAGS = console @@ -36,6 +58,13 @@ CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA) PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj SUBSYSTEM_COM_FLAGS = console SUBSYSTEM_EXE_FLAGS = windows + +!ELSE +CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA) +PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj +SUBSYSTEM_COM_FLAGS = console +SUBSYSTEM_EXE_FLAGS = windows + !ENDIF !IF DEFINED(DEBUG) @@ -43,6 +72,10 @@ LINK_FLAGS = $(LINK_FLAGS) /DEBUG CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG !ENDIF +!IF DEFINED(REPRODUCIBLE) +CL_FLAGS = $(CL_FLAGS) /DFACTOR_REPRODUCIBLE +!ENDIF + ML_FLAGS = /nologo /safeseh EXE_OBJS = vm\main-windows.obj vm\factor.res @@ -92,11 +125,12 @@ DLL_OBJS = $(PLAF_DLL_OBJS) \ vm\vm.obj \ vm\words.obj -.cpp.obj: - cl /EHsc $(CL_FLAGS) /Fo$@ /c $< +# batch mode has :: +.cpp.obj:: + cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $< -.c.obj: - cl $(CL_FLAGS) /Fo$@ /c $< +.c.obj:: + cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $< .asm.obj: ml $(ML_FLAGS) /Fo$@ /c $< @@ -116,6 +150,16 @@ factor.com: $(EXE_OBJS) $(DLL_OBJS) factor.exe: $(EXE_OBJS) $(DLL_OBJS) link $(LINK_FLAGS) /out:factor.exe /SUBSYSTEM:$(SUBSYSTEM_EXE_FLAGS) $(EXE_OBJS) $(DLL_OBJS) +# If we compile factor.exe, run mt.exe, and run factor.exe, +# then Windows caches the manifest. Even on a recompile without applying +# the mt.exe tool, if the factor.exe.manifest file is present, the manifest +# is applied. To avoid this, we delete the .manifest file on clean +# and copy it from a reference file on compilation and mt.exe. +# +factor.exe.manifest: factor.exe + copy factor.exe.manifest.in factor.exe.manifest + mt -manifest factor.exe.manifest -outputresource:"factor.exe;#1" + all: factor.com factor.exe factor.dll.lib libfactor-ffi-test.dll !ENDIF @@ -147,12 +191,15 @@ clean: if exist factor.lib del factor.lib if exist factor.com del factor.com if exist factor.exe del factor.exe + if exist factor.exe.manifest del factor.exe.manifest + if exist factor.exp del factor.exp if exist factor.dll del factor.dll if exist factor.dll.lib del factor.dll.lib + if exist factor.dll.exp del factor.dll.exp if exist libfactor-ffi-test.dll del libfactor-ffi-test.dll if exist libfactor-ffi-test.exp del libfactor-ffi-test.exp if exist libfactor-ffi-test.lib del libfactor-ffi-test.lib -.PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean +.PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean factor.exe.manifest .SUFFIXES: .rs