]> gitweb.factorcode.org Git - factor.git/blob - Nmakefile
vm/master.hpp: optional reproducible VM compilation
[factor.git] / Nmakefile
1 VERSION = 0.99
2
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
7
8 !IF [git describe --all > git-describe.tmp] == 0
9 GIT_DESCRIBE = \
10 !INCLUDE <git-describe.tmp>
11 !IF [rm git-describe.tmp] == 0
12 !ENDIF
13 !ENDIF
14
15 !IF [git rev-parse HEAD > git-id.tmp] == 0
16 GIT_ID = \
17 !INCLUDE <git-id.tmp>
18 !IF [rm git-id.tmp] == 0
19 !ENDIF
20 !ENDIF
21
22 !IF [git rev-parse --abbrev-ref HEAD > git-branch.tmp] == 0
23 GIT_BRANCH = \
24 !INCLUDE <git-branch.tmp>
25 !IF [rm git-branch.tmp] == 0
26 !ENDIF
27 !ENDIF
28
29 GIT_LABEL = $(GIT_DESCRIBE)-$(GIT_ID)
30
31 !IF DEFINED(PLATFORM)
32
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
36
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"
42
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
49
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"
54
55
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
61 !ENDIF
62
63 !IF DEFINED(DEBUG)
64 LINK_FLAGS = $(LINK_FLAGS) /DEBUG
65 CL_FLAGS = $(CL_FLAGS) /Zi /DFACTOR_DEBUG
66 !ENDIF
67
68 !IF DEFINED(REPRODUCIBLE)
69 CL_FLAGS = $(CL_FLAGS) /DFACTOR_REPRODUCIBLE=1
70 !ENDIF
71
72 ML_FLAGS = /nologo /safeseh
73
74 EXE_OBJS = vm\main-windows.obj vm\factor.res
75
76 DLL_OBJS = $(PLAF_DLL_OBJS) \
77         vm\os-windows.obj \
78         vm\aging_collector.obj \
79         vm\alien.obj \
80         vm\arrays.obj \
81         vm\bignum.obj \
82         vm\byte_arrays.obj \
83         vm\callbacks.obj \
84         vm\callstack.obj \
85         vm\code_blocks.obj \
86         vm\code_heap.obj \
87         vm\compaction.obj \
88         vm\contexts.obj \
89         vm\data_heap.obj \
90         vm\data_heap_checker.obj \
91         vm\debug.obj \
92         vm\dispatch.obj \
93         vm\entry_points.obj \
94         vm\errors.obj \
95         vm\factor.obj \
96         vm\full_collector.obj \
97         vm\gc.obj \
98         vm\image.obj \
99         vm\inline_cache.obj \
100         vm\instruction_operands.obj \
101         vm\io.obj \
102         vm\jit.obj \
103         vm\math.obj \
104         vm\mvm.obj \
105         vm\mvm-windows.obj \
106         vm\nursery_collector.obj \
107         vm\object_start_map.obj \
108         vm\objects.obj \
109         vm\primitives.obj \
110         vm\quotations.obj \
111         vm\run.obj \
112         vm\safepoints.obj \
113         vm\sampling_profiler.obj \
114         vm\strings.obj \
115         vm\to_tenured_collector.obj \
116         vm\tuples.obj \
117         vm\utilities.obj \
118         vm\vm.obj \
119         vm\words.obj
120
121 # batch mode has ::
122 .cpp.obj::
123         cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $<
124
125 .c.obj::
126         cl /EHsc $(CL_FLAGS) /MP /Fovm/ /c $<
127
128 .asm.obj:
129         ml $(ML_FLAGS) /Fo$@ /c $<
130
131 .rs.res:
132         rc $<
133
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
136
137 factor.dll.lib: $(DLL_OBJS)
138         link $(LINK_FLAGS) /implib:factor.dll.lib /out:factor.dll /dll $(DLL_OBJS)
139
140 factor.com: $(EXE_OBJS) $(DLL_OBJS)
141         link $(LINK_FLAGS) /out:factor.com /SUBSYSTEM:$(SUBSYSTEM_COM_FLAGS) $(EXE_OBJS) $(DLL_OBJS)
142
143 factor.exe: $(EXE_OBJS) $(DLL_OBJS)
144         link $(LINK_FLAGS) /out:factor.exe /SUBSYSTEM:$(SUBSYSTEM_EXE_FLAGS) $(EXE_OBJS) $(DLL_OBJS)
145
146 all: factor.com factor.exe factor.dll.lib libfactor-ffi-test.dll
147
148 !ENDIF
149
150 default:
151         @echo Usage: nmake /f Nmakefile platform
152         @echo Where platform is one of:
153         @echo x86-32
154         @echo x86-64
155         @echo x86-32-vista
156         @echo x86-64-vista
157         @exit 1
158
159 x86-32:
160         nmake /nologo PLATFORM=x86-32 /f Nmakefile all
161
162 x86-64:
163         nmake /nologo PLATFORM=x86-64 /f Nmakefile all
164
165 x86-32-vista:
166         nmake /nologo PLATFORM=x86-32-vista /f Nmakefile all
167
168 x86-64-vista:
169         nmake /nologo PLATFORM=x86-64-vista /f Nmakefile all
170
171 clean:
172         del vm\*.obj
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
182
183 .PHONY: all default x86-32 x86-64 x86-32-vista x86-64-vista clean
184
185 .SUFFIXES: .rs