VERSION = 0.98 # 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 [rm git-describe.tmp] == 0 !ENDIF !ENDIF !IF [git rev-parse HEAD > git-id.tmp] == 0 GIT_ID = \ !INCLUDE !IF [rm git-id.tmp] == 0 !ENDIF !ENDIF !IF [git rev-parse --abbrev-ref HEAD > git-branch.tmp] == 0 GIT_BRANCH = \ !INCLUDE !IF [rm git-branch.tmp] == 0 !ENDIF !ENDIF GIT_LABEL = $(GIT_DESCRIBE)-$(GIT_ID) !IF DEFINED(PLATFORM) 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 !ENDIF !IF DEFINED(DEBUG) LINK_FLAGS = $(LINK_FLAGS) /DEBUG CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG !ENDIF ML_FLAGS = /nologo /safeseh EXE_OBJS = vm\main-windows.obj vm\factor.res DLL_OBJS = $(PLAF_DLL_OBJS) \ vm\os-windows.obj \ vm\aging_collector.obj \ vm\alien.obj \ vm\arrays.obj \ vm\bignum.obj \ vm\byte_arrays.obj \ vm\callbacks.obj \ vm\callstack.obj \ vm\code_blocks.obj \ vm\code_heap.obj \ vm\compaction.obj \ vm\contexts.obj \ vm\data_heap.obj \ vm\data_heap_checker.obj \ vm\debug.obj \ vm\dispatch.obj \ vm\entry_points.obj \ vm\errors.obj \ vm\factor.obj \ vm\full_collector.obj \ vm\gc.obj \ vm\image.obj \ vm\inline_cache.obj \ vm\instruction_operands.obj \ vm\io.obj \ vm\jit.obj \ vm\math.obj \ vm\mvm.obj \ vm\mvm-windows.obj \ vm\nursery_collector.obj \ vm\object_start_map.obj \ vm\objects.obj \ vm\primitives.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\words.obj .cpp.obj: cl /EHsc $(CL_FLAGS) /Fo$@ /c $< .c.obj: cl $(CL_FLAGS) /Fo$@ /c $< .asm.obj: ml $(ML_FLAGS) /Fo$@ /c $< .rs.res: rc $< libfactor-ffi-test.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:$(SUBSYSTEM_COM_FLAGS) $(EXE_OBJS) $(DLL_OBJS) factor.exe: $(EXE_OBJS) $(DLL_OBJS) link $(LINK_FLAGS) /out:factor.exe /SUBSYSTEM:$(SUBSYSTEM_EXE_FLAGS) $(EXE_OBJS) $(DLL_OBJS) all: factor.com factor.exe factor.dll.lib libfactor-ffi-test.dll !ENDIF default: @echo Usage: nmake /f Nmakefile platform @echo Where platform is one of: @echo x86-32 @echo x86-64 @echo x86-32-vista @echo x86-64-vista @exit 1 x86-32: nmake /nologo PLATFORM=x86-32 /f Nmakefile all 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.com del factor.com if exist factor.exe del factor.exe if exist factor.dll del factor.dll if exist factor.dll.lib del factor.dll.lib 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 .SUFFIXES: .rs