-!IF !DEFINED(BOOTIMAGE_VERSION)
-BOOTIMAGE_VERSION = latest
+VERSION = 0.99
+
+# 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 <git-describe.tmp>
+!IF [rm git-describe.tmp] == 0
+!ENDIF
!ENDIF
-!IF !DEFINED(VERSION)
-VERSION = version-missing
+!IF [git rev-parse HEAD > git-id.tmp] == 0
+GIT_ID = \
+!INCLUDE <git-id.tmp>
+!IF [rm git-id.tmp] == 0
+!ENDIF
!ENDIF
-!IF !DEFINED(GIT_LABEL)
-GIT_LABEL = git-label-missing
+!IF [git rev-parse --abbrev-ref HEAD > git-branch.tmp] == 0
+GIT_BRANCH = \
+!INCLUDE <git-branch.tmp>
+!IF [rm git-branch.tmp] == 0
!ENDIF
+!ENDIF
+
+GIT_LABEL = $(GIT_DESCRIBE)-$(GIT_ID)
!IF DEFINED(PLATFORM)
-LINK_FLAGS = /nologo shell32.lib
+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 DEFINED(DEBUG)
-LINK_FLAGS = $(LINK_FLAGS) /DEBUG
-CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG
-!ENDIF
-
!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
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
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 \
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 $<
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)
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.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