X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=Nmakefile;h=065d24a757cc00a5710bf97b574b96c2e45e9b48;hp=a8b7e103ec21b312b3d862cc57a65671a615c3fb;hb=HEAD;hpb=8c7f740c265d76279ce32544d8065239c7b6d221 diff --git a/Nmakefile b/Nmakefile old mode 100755 new mode 100644 index a8b7e103ec..f87fb76d2d --- a/Nmakefile +++ b/Nmakefile @@ -1,36 +1,91 @@ -!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 /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 /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 /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) LINK_FLAGS = $(LINK_FLAGS) /DEBUG CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG !ENDIF -!IF "$(PLATFORM)" == "x86-32" -LINK_FLAGS = $(LINK_FLAGS) /safeseh -PLAF_DLL_OBJS = vm\os-windows-nt-x86.32.obj vm\safeseh.obj -!ELSEIF "$(PLATFORM)" == "x86-64" -PLAF_DLL_OBJS = vm\os-windows-nt-x86.64.obj +!IF DEFINED(REPRODUCIBLE) +CL_FLAGS = $(CL_FLAGS) /DFACTOR_REPRODUCIBLE !ENDIF ML_FLAGS = /nologo /safeseh -EXE_OBJS = vm\main-windows-nt.obj vm\factor.res +EXE_OBJS = vm\main-windows.obj vm\factor.res DLL_OBJS = $(PLAF_DLL_OBJS) \ vm\os-windows.obj \ - vm\os-windows-nt.obj \ vm\aging_collector.obj \ vm\alien.obj \ vm\arrays.obj \ vm\bignum.obj \ - vm\booleans.obj \ vm\byte_arrays.obj \ vm\callbacks.obj \ vm\callstack.obj \ @@ -45,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 \ @@ -56,26 +109,28 @@ DLL_OBJS = $(PLAF_DLL_OBJS) \ vm\jit.obj \ vm\math.obj \ vm\mvm.obj \ - vm\mvm-windows-nt.obj \ + vm\mvm-windows.obj \ vm\nursery_collector.obj \ vm\object_start_map.obj \ vm\objects.obj \ vm\primitives.obj \ - vm\profiler.obj \ vm\quotations.obj \ vm\run.obj \ + vm\safepoints.obj \ + vm\sampling_profiler.obj \ vm\strings.obj \ vm\to_tenured_collector.obj \ vm\tuples.obj \ vm\utilities.obj \ - vm\vm.obj \ + 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 $< @@ -84,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 @@ -104,6 +169,8 @@ default: @echo Where platform is one of: @echo x86-32 @echo x86-64 + @echo x86-32-vista + @echo x86-64-vista @exit 1 x86-32: @@ -112,15 +179,27 @@ x86-32: x86-64: nmake /nologo PLATFORM=x86-64 /f Nmakefile all +x86-32-vista: + nmake /nologo PLATFORM=x86-32-vista /f Nmakefile all + +x86-64-vista: + nmake /nologo PLATFORM=x86-64-vista /f Nmakefile all + 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 clean +.PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean factor.exe.manifest .SUFFIXES: .rs