Added mailslot fs driver
[reactos.git] / reactos / Makefile
1 #
2 # Global makefile
3 #
4
5 #
6 # Select your host
7 #
8 #HOST = mingw32-linux
9 #HOST = mingw32-windows
10
11 PATH_TO_TOP = .
12
13 include rules.mak
14
15 #
16 # Required to run the system
17 #
18 COMPONENTS = iface_native iface_additional ntoskrnl
19 BUS = acpi isapnp
20 DLLS = ntdll kernel32 crtdll advapi32 fmifs gdi32 secur32 user32 ws2_32 msafd msvcrt
21 SUBSYS = smss win32k csrss
22
23 #
24 # Select the server(s) you want to build
25 #
26 #SERVERS = posix linux os2
27 SERVERS = win32
28
29 #
30 # Select the loader(s) you want to build
31 #
32 #LOADERS = boot dos
33 LOADERS = dos
34
35 #
36 # Select the device drivers and filesystems you want
37 #
38 #DEVICE_DRIVERS = beep event floppy ide_test mouse sound test test1 parallel serial
39 DEVICE_DRIVERS = vidport vga blue ide null floppy
40
41 #INPUT_DRIVERS = keyboard
42 INPUT_DRIVERS = keyboard
43
44 #FS_DRIVERS = vfat minix ext2 template
45 FS_DRIVERS = vfat ms
46
47 #NET_DRIVERS = ndis tdi tcpip tditest wshtcpip afd
48 NET_DRIVERS = ndis tcpip tditest wshtcpip afd
49
50 #NET_DEVICE_DRIVERS = ne2000
51 NET_DEVICE_DRIVERS = ne2000
52
53 #
54 # system applications (required for startup)
55 #
56 #SYS_APPS = shell winlogon services
57 SYS_APPS = shell winlogon services
58
59 APPS = args hello test cat bench apc shm lpc thread event file gditest \
60 pteb consume dump_shared_data vmtest regtest alive mstest objdir
61
62 #NET_APPS = ping roshttpd
63 NET_APPS = ping
64
65
66 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) $(NET_DRIVERS) $(NET_DEVICE_DRIVERS)
67
68 all: buildno $(COMPONENTS) $(BUS) $(DLLS) $(SUBSYS) $(LOADERS) $(KERNEL_SERVICES) $(SYS_APPS) $(APPS) $(NET_APPS)
69
70 .PHONY: all
71
72 clean: buildno_clean $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(DLLS:%=%_clean) $(LOADERS:%=%_clean) \
73 $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) $(SYS_APPS:%=%_clean) $(APPS:%=%_clean)
74
75 .PHONY: clean
76
77 ifeq ($(HOST),mingw32-linux)
78 rcopy$(EXE_POSTFIX): rcopy.c
79 $(HOST_CC) -g -DUNIX_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
80 endif
81 ifeq ($(HOST),mingw32-windows)
82 rcopy$(EXE_POSTFIX): rcopy.c
83 $(HOST_CC) -g -DDOS_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
84 endif
85
86 ifeq ($(HOST),mingw32-linux)
87 rmkdir$(EXE_POSTFIX): rmkdir.c
88 $(HOST_CC) -g -DUNIX_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
89 endif
90 ifeq ($(HOST),mingw32-windows)
91 rmkdir$(EXE_POSTFIX): rmkdir.c
92 $(HOST_CC) -g -DDOS_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
93 endif
94
95
96 install: rcopy$(EXE_POSTFIX) rmkdir$(EXE_POSTFIX) make_install_dirs autoexec_install \
97 $(COMPONENTS:%=%_install) $(BUS:%=%_install) \
98 $(DLLS:%=%_install) $(LOADERS:%=%_install) \
99 $(KERNEL_SERVICES:%=%_install) $(SUBSYS:%=%_install) \
100 $(SYS_APPS:%=%_install) $(APPS:%=%_install)
101
102 dist: rcopy$(EXE_POSTFIX) clean_dist_dir make_dist_dirs $(COMPONENTS:%=%_dist) \
103 $(BUS:%=%_dist) $(DLLS:%=%_dist) \
104 $(LOADERS:%=%_dist) $(KERNEL_SERVICES:%=%_dist) $(SUBSYS:%=%_dist) \
105 $(SYS_APPS:%=%_dist) $(APPS:%=%_dist)
106
107 #
108 # Build number generator
109 #
110 buildno: include/reactos/version.h
111 make -C apps/buildno
112
113 buildno_clean:
114 make -C apps/buildno clean
115
116 buildno_dist:
117
118 buildno_install:
119
120 .PHONY: buildno buildno_clean buildno_dist buildno_install
121
122 #
123 # System Applications
124 #
125 $(SYS_APPS): %:
126 make -C apps/system/$*
127
128 $(SYS_APPS:%=%_clean): %_clean:
129 make -C apps/system/$* clean
130
131 $(SYS_APPS:%=%_dist): %_dist:
132 make -C apps/system/$* dist
133
134 $(SYS_APPS:%=%_install): %_install:
135 make -C apps/system/$* install
136
137 .PHONY: $(SYS_APPS) $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_dist)
138
139 #
140 # Applications
141 #
142 $(APPS): %:
143 make -C apps/$*
144
145 $(APPS:%=%_clean): %_clean:
146 make -C apps/$* clean
147
148 $(APPS:%=%_dist): %_dist:
149 make -C apps/$* dist
150
151 $(APPS:%=%_install): %_install:
152 make -C apps/$* install
153
154 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_install) $(APPS:%=%_dist)
155
156 #
157 # Network applications
158 #
159 $(NET_APPS): %:
160 make -C apps/net/$*
161
162 $(NET_APPS:%=%_clean): %_clean:
163 make -C apps/net/$* clean
164
165 $(NET_APPS:%=%_dist): %_dist:
166 make -C apps/net/$* dist
167
168 $(NET_APPS:%=%_install): %_install:
169 make -C apps/net/$* install
170
171 .PHONY: $(NET_APPS) $(NET_APPS:%=%_clean) $(NET_APPS:%=%_install) $(NET_APPS:%=%_dist)
172
173 #
174 # Interfaces
175 #
176 iface_native:
177 make -C iface/native
178
179 iface_native_clean:
180 make -C iface/native clean
181
182 iface_native_install:
183
184 iface_native_dist:
185
186 iface_additional:
187 make -C iface/addsys
188
189 iface_additional_clean:
190 make -C iface/addsys clean
191
192 iface_additional_install:
193
194 iface_additional_dist:
195
196 .PHONY: iface_native iface_native_clean iface_native_install \
197 iface_native_dist \
198 iface_additional iface_additional_clean iface_additional_install \
199 iface_additional_dist
200
201 #
202 # Bus driver rules
203 #
204 $(BUS): %:
205 make -C services/bus/$*
206
207 $(BUS:%=%_clean): %_clean:
208 make -C services/bus/$* clean
209
210 $(BUS:%=%_install): %_install:
211 make -C services/bus/$* install
212
213 $(BUS:%=%_dist): %_dist:
214 make -C services/bus/$* dist
215
216 .PHONY: $(BUS) $(BUS:%=%_clean) \
217 $(BUS:%=%_install) $(BUS:%=%_dist)
218
219 #
220 # Device driver rules
221 #
222 $(DEVICE_DRIVERS): %:
223 make -C services/dd/$*
224
225 $(DEVICE_DRIVERS:%=%_clean): %_clean:
226 make -C services/dd/$* clean
227
228 $(DEVICE_DRIVERS:%=%_install): %_install:
229 make -C services/dd/$* install
230
231 $(DEVICE_DRIVERS:%=%_dist): %_dist:
232 make -C services/dd/$* dist
233
234 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
235 $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_dist)
236
237 #
238 # Input driver rules
239 #
240 $(INPUT_DRIVERS): %:
241 make -C services/input/$*
242
243 $(INPUT_DRIVERS:%=%_clean): %_clean:
244 make -C services/input/$* clean
245
246 $(INPUT_DRIVERS:%=%_install): %_install:
247 make -C services/input/$* install
248
249 $(INPUT_DRIVERS:%=%_dist): %_dist:
250 make -C services/input/$* dist
251
252 .PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_clean) \
253 $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_dist)
254
255 $(FS_DRIVERS): %:
256 make -C services/fs/$*
257
258 $(FS_DRIVERS:%=%_clean): %_clean:
259 make -C services/fs/$* clean
260
261 $(FS_DRIVERS:%=%_install): %_install:
262 make -C services/fs/$* install
263
264 $(FS_DRIVERS:%=%_dist): %_dist:
265 make -C services/fs/$* dist
266
267 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_install) \
268 $(FS_DRIVERS:%=%_dist)
269
270 $(NET_DRIVERS): %:
271 make -C services/net/$*
272
273 $(NET_DRIVERS:%=%_clean): %_clean:
274 make -C services/net/$* clean
275
276 $(NET_DRIVERS:%=%_install): %_install:
277 make -C services/net/$* install
278
279 $(NET_DRIVERS:%=%_dist): %_dist:
280 make -C services/net/$* dist
281
282 .PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_clean) $(NET_DRIVERS:%=%_install) \
283 $(NET_DRIVERS:%=%_dist)
284
285 $(NET_DEVICE_DRIVERS): %:
286 make -C services/net/dd/$*
287
288 $(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
289 make -C services/net/dd/$* clean
290
291 $(NET_DEVICE_DRIVERS:%=%_install): %_install:
292 make -C services/net/dd/$* install
293
294 $(NET_DEVICE_DRIVERS:%=%_dist): %_dist:
295 make -C services/net/dd/$* dist
296
297 .PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) \
298 $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_dist)
299
300 #
301 # Kernel loaders
302 #
303
304 $(LOADERS): %:
305 make -C loaders/$*
306
307 $(LOADERS:%=%_clean): %_clean:
308 make -C loaders/$* clean
309
310 $(LOADERS:%=%_install): %_install:
311 make -C loaders/$* install
312
313 $(LOADERS:%=%_dist): %_dist:
314 make -C loaders/$* dist
315
316 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_install) \
317 $(LOADERS:%=%_dist)
318
319 #
320 # Required system components
321 #
322
323 ntoskrnl:
324 make -C ntoskrnl
325
326 ntoskrnl_clean:
327 make -C ntoskrnl clean
328
329 ntoskrnl_install:
330 make -C ntoskrnl install
331
332 ntoskrnl_dist:
333 make -C ntoskrnl dist
334
335 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_install ntoskrnl_dist
336
337 #
338 # Required DLLs
339 #
340
341 $(DLLS): %:
342 make -C lib/$*
343
344 $(DLLS:%=%_clean): %_clean:
345 make -C lib/$* clean
346
347 $(DLLS:%=%_install): %_install:
348 make -C lib/$* install
349
350 $(DLLS:%=%_dist): %_dist:
351 make -C lib/$* dist
352
353 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_dist)
354
355 #
356 # Kernel Subsystems
357 #
358
359 $(SUBSYS): %:
360 make -C subsys/$*
361
362 $(SUBSYS:%=%_clean): %_clean:
363 make -C subsys/$* clean
364
365 $(SUBSYS:%=%_install): %_install:
366 make -C subsys/$* install
367
368 $(SUBSYS:%=%_dist): %_dist:
369 make -C subsys/$* dist
370
371 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) \
372 $(SUBSYS:%=%_dist)
373
374 #
375 # Make an install floppy
376 #
377 make_install_dirs:
378 ./rmkdir $(FLOPPY_DIR)/dlls
379 ./rmkdir $(FLOPPY_DIR)/apps
380 ./rmkdir $(FLOPPY_DIR)/drivers
381 ./rmkdir $(FLOPPY_DIR)/subsys
382
383
384 .PHONY: make_install_dirs
385
386 autoexec_install: $(FLOPPY_DIR)/autoexec.bat
387
388 $(FLOPPY_DIR)/autoexec.bat: bootflop.bat
389 $(CP) bootflop.bat $(FLOPPY_DIR)/autoexec.bat
390
391 #
392 # Make a distribution saveset
393 #
394
395 clean_dist_dir:
396 ifeq ($(DOSCLI),yes)
397 - $(RM) $(DIST_DIR)\dlls\*.dll
398 - $(RM) $(DIST_DIR)\apps\*.exe
399 - $(RM) $(DIST_DIR)\drivers\*.sys
400 - $(RM) $(DIST_DIR)\subsys\*.exe
401 - $(RMDIR) $(DIST_DIR)\dlls
402 - $(RMDIR) $(DIST_DIR)\apps
403 - $(RMDIR) $(DIST_DIR)\drivers
404 - $(RMDIR) $(DIST_DIR)\subsys
405 - $(RMDIR) $(DIST_DIR)
406 else
407 $(RM) -r $(DIST_DIR)
408 endif
409
410 make_dist_dirs: ./rmkdir
411 ./rmkdir $(DIST_DIR)
412 ./rmkdir $(DIST_DIR)/dlls
413 ./rmkdir $(DIST_DIR)/apps
414 ./rmkdir $(DIST_DIR)/drivers
415 ./rmkdir $(DIST_DIR)/dlls
416 ./rmkdir $(DIST_DIR)/subsys
417
418 .PHONY: clean_dist_dir make_dist_dirs
419
420 #
421 #
422 #
423 etags:
424 find . -name "*.[ch]" -print | etags --language=c -
425
426 # EOF