X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=Nmakefile;h=065d24a757cc00a5710bf97b574b96c2e45e9b48;hp=02dbfd4fa981f1cad874a4a1b662cf8a59682164;hb=HEAD;hpb=2c3dd8c3c8a978e78da7d9343fb97602e29c5371 diff --git a/Nmakefile b/Nmakefile index 02dbfd4fa9..f87fb76d2d 100644 --- a/Nmakefile +++ b/Nmakefile @@ -1,28 +1,70 @@ -!IF !DEFINED(BOOTIMAGE_VERSION) -BOOTIMAGE_VERSION = latest +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 [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 -CL_FLAGS = /nologo /O2 /WX /W3 /D_CRT_SECURE_NO_WARNINGS +LINK_FLAGS = /nologo shell32.lib user32.lib +CL_FLAGS = /nologo /O2 /WX /W3 /D_CRT_SECURE_NO_WARNINGS /DFACTOR_VERSION=$(VERSION) /DFACTOR_GIT_LABEL=$(GIT_LABEL) 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 +SUBSYSTEM_EXE_FLAGS = windows !ELSEIF "$(PLATFORM)" == "x86-64" PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj +SUBSYSTEM_COM_FLAGS = console,"5.02" +SUBSYSTEM_EXE_FLAGS = windows,"5.02" + !ELSEIF "$(PLATFORM)" == "x86-64-vista" 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) @@ -30,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 @@ -54,10 +100,8 @@ DLL_OBJS = $(PLAF_DLL_OBJS) \ vm\entry_points.obj \ vm\errors.obj \ vm\factor.obj \ - vm\free_list.obj \ vm\full_collector.obj \ vm\gc.obj \ - vm/gc_info.obj \ vm\image.obj \ vm\inline_cache.obj \ vm\instruction_operands.obj \ @@ -81,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 $< @@ -94,16 +139,26 @@ DLL_OBJS = $(PLAF_DLL_OBJS) \ rc $< libfactor-ffi-test.dll: vm/ffi_test.obj - link $(LINK_FLAGS) /out:libfactor-ffi-test.dll /dll vm/ffi_test.obj + link $(LINK_FLAGS) /out:libfactor-ffi-test.dll /dll /def:vm\ffi_test.def vm/ffi_test.obj factor.dll.lib: $(DLL_OBJS) link $(LINK_FLAGS) /implib:factor.dll.lib /out:factor.dll /dll $(DLL_OBJS) factor.com: $(EXE_OBJS) $(DLL_OBJS) - link $(LINK_FLAGS) /out:factor.com /SUBSYSTEM:console $(EXE_OBJS) $(DLL_OBJS) + link $(LINK_FLAGS) /out:factor.com /SUBSYSTEM:$(SUBSYSTEM_COM_FLAGS) $(EXE_OBJS) $(DLL_OBJS) factor.exe: $(EXE_OBJS) $(DLL_OBJS) - link $(LINK_FLAGS) /out:factor.exe /SUBSYSTEM:windows $(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 @@ -132,13 +187,19 @@ x86-64-vista: clean: del vm\*.obj + if exist vm\factor.res del vm\factor.res if exist factor.lib del factor.lib - if exist factor.res del factor.res 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