3 # Crazy hack to do shell commands
4 # We do it in Nmakefile because that way we don't have to invoke build through build.cmd
5 # and we can just do ``nmake /f Nmakefile x86-64-vista`` or similar
6 # and we still get the git branch, id, etc
8 !IF [git describe --all > git-describe.tmp] == 0
10 !INCLUDE <git-describe.tmp>
11 !IF [rm git-describe.tmp] == 0
15 !IF [git rev-parse HEAD > git-id.tmp] == 0
18 !IF [rm git-id.tmp] == 0
22 !IF [git rev-parse --abbrev-ref HEAD > git-branch.tmp] == 0
24 !INCLUDE <git-branch.tmp>
25 !IF [rm git-branch.tmp] == 0
29 GIT_LABEL = $(GIT_DESCRIBE)-$(GIT_ID)
33 LINK_FLAGS = /nologo shell32.lib user32.lib
34 CL_FLAGS = /nologo /O2 /WX /W3 /D_CRT_SECURE_NO_WARNINGS /DFACTOR_VERSION=$(VERSION) /DFACTOR_GIT_LABEL=$(GIT_LABEL)
35 CL_FLAGS_VISTA = /D_WIN32_WINNT=0x0600
37 !IF "$(PLATFORM)" == "x86-32"
38 LINK_FLAGS = $(LINK_FLAGS) /safeseh /largeaddressaware
39 PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj
40 SUBSYSTEM_COM_FLAGS = console,"5.01"
41 SUBSYSTEM_EXE_FLAGS = windows,"5.01"
43 !ELSEIF "$(PLATFORM)" == "x86-32-vista"
44 LINK_FLAGS = $(LINK_FLAGS) /safeseh /largeaddressaware
45 CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA)
46 PLAF_DLL_OBJS = vm\os-windows-x86.32.obj vm\safeseh.obj vm\cpu-x86.obj
47 SUBSYSTEM_COM_FLAGS = console
48 SUBSYSTEM_EXE_FLAGS = windows
50 !ELSEIF "$(PLATFORM)" == "x86-64"
51 PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj
52 SUBSYSTEM_COM_FLAGS = console,"5.02"
53 SUBSYSTEM_EXE_FLAGS = windows,"5.02"
56 !ELSEIF "$(PLATFORM)" == "x86-64-vista"
57 CL_FLAGS = $(CL_FLAGS) $(CL_FLAGS_VISTA)
58 PLAF_DLL_OBJS = vm\os-windows-x86.64.obj vm\cpu-x86.obj
59 SUBSYSTEM_COM_FLAGS = console
60 SUBSYSTEM_EXE_FLAGS = windows
64 LINK_FLAGS = $(LINK_FLAGS) /DEBUG
65 CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG
68 !IF DEFINED(REPRODUCIBLE)
69 CL_FLAGS = $(CL_FLAGS) /DFACTOR_REPRODUCIBLE
72 ML_FLAGS = /nologo /safeseh
74 EXE_OBJS = vm\main-windows.obj vm\factor.res
76 DLL_OBJS = $(PLAF_DLL_OBJS) \
78 vm\aging_collector.obj \
90 vm\data_heap_checker.obj \
96 vm\full_collector.obj \
100 vm\instruction_operands.obj \
106 vm\nursery_collector.obj \
107 vm\object_start_map.obj \
113 vm\sampling_profiler.obj \
115 vm\to_tenured_collector.obj \
123 cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $<
126 cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $<
129 ml $(ML_FLAGS) /Fo$@ /c $<
134 libfactor-ffi-test.dll: vm/ffi_test.obj
135 link $(LINK_FLAGS) /out:libfactor-ffi-test.dll /dll /def:vm\ffi_test.def vm/ffi_test.obj
137 factor.dll.lib: $(DLL_OBJS)
138 link $(LINK_FLAGS) /implib:factor.dll.lib /out:factor.dll /dll $(DLL_OBJS)
140 factor.com: $(EXE_OBJS) $(DLL_OBJS)
141 link $(LINK_FLAGS) /out:factor.com /SUBSYSTEM:$(SUBSYSTEM_COM_FLAGS) $(EXE_OBJS) $(DLL_OBJS)
143 factor.exe: $(EXE_OBJS) $(DLL_OBJS)
144 link $(LINK_FLAGS) /out:factor.exe /SUBSYSTEM:$(SUBSYSTEM_EXE_FLAGS) $(EXE_OBJS) $(DLL_OBJS)
146 all: factor.com factor.exe factor.dll.lib libfactor-ffi-test.dll
151 @echo Usage: nmake /f Nmakefile platform
152 @echo Where platform is one of:
160 nmake /nologo PLATFORM=x86-32 /f Nmakefile all
163 nmake /nologo PLATFORM=x86-64 /f Nmakefile all
166 nmake /nologo PLATFORM=x86-32-vista /f Nmakefile all
169 nmake /nologo PLATFORM=x86-64-vista /f Nmakefile all
173 if exist vm\factor.res del vm\factor.res
174 if exist factor.lib del factor.lib
175 if exist factor.com del factor.com
176 if exist factor.exe del factor.exe
177 if exist factor.dll del factor.dll
178 if exist factor.dll.lib del factor.dll.lib
179 if exist libfactor-ffi-test.dll del libfactor-ffi-test.dll
180 if exist libfactor-ffi-test.exp del libfactor-ffi-test.exp
181 if exist libfactor-ffi-test.lib del libfactor-ffi-test.lib
183 .PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean