Major update of the build system:
[reactos.git] / reactos / Makefile
1 #
2 # Global makefile
3 #
4
5 PATH_TO_TOP = .
6
7 include $(PATH_TO_TOP)/rules.mak
8
9 #
10 # Required to run the system
11 #
12 COMPONENTS = iface_native iface_additional hallib ntoskrnl
13 HALS = halx86
14 BUS = acpi isapnp
15 DLLS = ntdll kernel32 advapi32 crtdll msvcrt fmifs gdi32 msafd \
16 ole32 oleaut32 secur32 shell32 user32 ws2_32 version
17 SUBSYS = smss win32k csrss
18
19 #
20 # Select the server(s) you want to build
21 #
22 #SERVERS = posix linux os2
23 SERVERS = win32
24
25 #
26 # Select the loader(s) you want to build
27 #
28 #LOADERS = boot dos
29 LOADERS = dos
30
31 #
32 # Select the device drivers and filesystems you want
33 #
34 #DEVICE_DRIVERS = beep floppy mouse sound test parallel serial
35 DEVICE_DRIVERS = vidport vga blue ide null floppy
36
37 #INPUT_DRIVERS = keyboard
38 INPUT_DRIVERS = keyboard mouclass psaux
39
40 #FS_DRIVERS = vfat minix ext2 template
41 FS_DRIVERS = vfat ms np
42
43 #NET_DRIVERS = ndis tdi tcpip tditest wshtcpip afd
44 NET_DRIVERS = ndis tdi tcpip tditest wshtcpip afd
45
46 #NET_DEVICE_DRIVERS = ne2000
47 NET_DEVICE_DRIVERS = ne2000
48
49 #
50 # storage drivers (don't change the order)
51 #
52 STORAGE_DRIVERS = class2 scsiport disk
53
54 #
55 # system applications (required for startup)
56 #
57 #SYS_APPS = lsass services shell winlogon
58 SYS_APPS = services shell winlogon
59
60 APPS = args hello test cat bench apc shm lpc thread event file gditest \
61 pteb consume dump_shared_data vmtest regtest alive mstest nptest \
62 objdir atomtest
63
64 #NET_APPS = ping roshttpd telnet
65 NET_APPS = ping roshttpd
66
67
68 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) \
69 $(NET_DRIVERS) $(NET_DEVICE_DRIVERS) $(STORAGE_DRIVERS)
70
71 all: tools buildno dk $(COMPONENTS) $(HALS) $(BUS) $(DLLS) $(SUBSYS) \
72 $(LOADERS) $(KERNEL_SERVICES) $(SYS_APPS) $(APPS) $(NET_APPS)
73
74 clean: buildno_clean dk_clean $(HALS:%=%_clean) \
75 $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(DLLS:%=%_clean) \
76 $(LOADERS:%=%_clean) $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) \
77 $(SYS_APPS:%=%_clean) $(APPS:%=%_clean) $(NET_APPS:%=%_clean) clean_after tools_clean
78
79 clean_after:
80 $(RM) $(PATH_TO_TOP)/include/roscfg.h
81
82 install: tools buildno install_dirs install_before \
83 $(COMPONENTS:%=%_install) $(HALS:%=%_install) $(BUS:%=%_install) \
84 $(DLLS:%=%_install) $(LOADERS:%=%_install) \
85 $(KERNEL_SERVICES:%=%_install) $(SUBSYS:%=%_install) \
86 $(SYS_APPS:%=%_install) $(APPS:%=%_install)
87
88 dist: $(TOOLS_PATH)/rcopy$(EXE_POSTFIX) dist_clean dist_dirs \
89 $(HALS:%=%_dist) $(COMPONENTS:%=%_dist) $(BUS:%=%_dist) $(DLLS:%=%_dist) \
90 $(LOADERS:%=%_dist) $(KERNEL_SERVICES:%=%_dist) $(SUBSYS:%=%_dist) \
91 $(SYS_APPS:%=%_dist) $(APPS:%=%_dist) $(NET_APPS:%=%_dist)
92
93 .PHONY: all clean clean_before install dist
94
95 #
96 # Build number generator
97 #
98 buildno: include/reactos/version.h
99 make -C apps/buildno
100
101 buildno_clean:
102 make -C apps/buildno clean
103
104 buildno_dist:
105
106 buildno_install:
107
108 .PHONY: buildno buildno_clean buildno_dist buildno_install
109
110 #
111 # System Applications
112 #
113 $(SYS_APPS): %:
114 make -C apps/system/$*
115
116 $(SYS_APPS:%=%_clean): %_clean:
117 make -C apps/system/$* clean
118
119 $(SYS_APPS:%=%_dist): %_dist:
120 make -C apps/system/$* dist
121
122 $(SYS_APPS:%=%_install): %_install:
123 make -C apps/system/$* install
124
125 .PHONY: $(SYS_APPS) $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_dist)
126
127 #
128 # Applications
129 #
130 $(APPS): %:
131 make -C apps/$*
132
133 $(APPS:%=%_clean): %_clean:
134 make -C apps/$* clean
135
136 $(APPS:%=%_dist): %_dist:
137 make -C apps/$* dist
138
139 $(APPS:%=%_install): %_install:
140 make -C apps/$* install
141
142 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_install) $(APPS:%=%_dist)
143
144 #
145 # Network applications
146 #
147 $(NET_APPS): %:
148 make -C apps/net/$*
149
150 $(NET_APPS:%=%_clean): %_clean:
151 make -C apps/net/$* clean
152
153 $(NET_APPS:%=%_dist): %_dist:
154 make -C apps/net/$* dist
155
156 $(NET_APPS:%=%_install): %_install:
157 make -C apps/net/$* install
158
159 .PHONY: $(NET_APPS) $(NET_APPS:%=%_clean) $(NET_APPS:%=%_install) $(NET_APPS:%=%_dist)
160
161
162 #
163 # Tools
164 #
165 tools:
166 make -C tools
167
168 tools_clean:
169 make -C tools clean
170
171 tools_install:
172
173 tools_dist:
174
175 .PHONY: tools tools_clean tools_install tools_dist
176
177
178 #
179 # Developer Kits
180 #
181 dk:
182 $(RMKDIR) $(DK_PATH)
183 $(RMKDIR) $(DDK_PATH)
184 $(RMKDIR) $(DDK_PATH_LIB)
185 $(RMKDIR) $(DDK_PATH_INC)
186 $(RMKDIR) $(SDK_PATH)
187 $(RMKDIR) $(SDK_PATH_LIB)
188 $(RMKDIR) $(SDK_PATH_INC)
189 $(RMKDIR) $(XDK_PATH)
190 $(RMKDIR) $(XDK_PATH_LIB)
191 $(RMKDIR) $(XDK_PATH_INC)
192
193 # WARNING! Be very sure that there are no important files
194 # in these directories before cleaning them!!!
195 dk_clean:
196 $(RM) $(DDK_PATH_LIB)/*.a
197 # $(RM) $(DDK_PATH_INC)/*.h
198 $(RMDIR) $(DDK_PATH_LIB)
199 # $(RMDIR) $(DDK_PATH_INC)
200 $(RM) $(SDK_PATH_LIB)/*.a
201 # $(RM) $(SDK_PATH_INC)/*.h
202 $(RMDIR) $(SDK_PATH_LIB)
203 # $(RMDIR) $(SDK_PATH_INC)
204 $(RM) $(XDK_PATH_LIB)/*.a
205 # $(RM) $(XDK_PATH_INC)/*.h
206 $(RMDIR) $(XDK_PATH_LIB)
207 # $(RMDIR) $(XDK_PATH_INC)
208
209 dk_install:
210
211 dk_dist:
212
213 .PHONY: dk dk_clean dk_install dk_dist
214
215
216 #
217 # Interfaces
218 #
219 iface_native:
220 make -C iface/native
221
222 iface_native_clean:
223 make -C iface/native clean
224
225 iface_native_install:
226
227 iface_native_dist:
228
229 iface_additional:
230 make -C iface/addsys
231
232 iface_additional_clean:
233 make -C iface/addsys clean
234
235 iface_additional_install:
236
237 iface_additional_dist:
238
239 .PHONY: iface_native iface_native_clean iface_native_install \
240 iface_native_dist \
241 iface_additional iface_additional_clean iface_additional_install \
242 iface_additional_dist
243
244 #
245 # Bus driver rules
246 #
247 $(BUS): %:
248 make -C services/bus/$*
249
250 $(BUS:%=%_clean): %_clean:
251 make -C services/bus/$* clean
252
253 $(BUS:%=%_install): %_install:
254 make -C services/bus/$* install
255
256 $(BUS:%=%_dist): %_dist:
257 make -C services/bus/$* dist
258
259 .PHONY: $(BUS) $(BUS:%=%_clean) \
260 $(BUS:%=%_install) $(BUS:%=%_dist)
261
262 #
263 # Device driver rules
264 #
265 $(DEVICE_DRIVERS): %:
266 make -C services/dd/$*
267
268 $(DEVICE_DRIVERS:%=%_clean): %_clean:
269 make -C services/dd/$* clean
270
271 $(DEVICE_DRIVERS:%=%_install): %_install:
272 make -C services/dd/$* install
273
274 $(DEVICE_DRIVERS:%=%_dist): %_dist:
275 make -C services/dd/$* dist
276
277 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
278 $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_dist)
279
280 #
281 # Input driver rules
282 #
283 $(INPUT_DRIVERS): %:
284 make -C services/input/$*
285
286 $(INPUT_DRIVERS:%=%_clean): %_clean:
287 make -C services/input/$* clean
288
289 $(INPUT_DRIVERS:%=%_install): %_install:
290 make -C services/input/$* install
291
292 $(INPUT_DRIVERS:%=%_dist): %_dist:
293 make -C services/input/$* dist
294
295 .PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_clean) \
296 $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_dist)
297
298 $(FS_DRIVERS): %:
299 make -C services/fs/$*
300
301 $(FS_DRIVERS:%=%_clean): %_clean:
302 make -C services/fs/$* clean
303
304 $(FS_DRIVERS:%=%_install): %_install:
305 make -C services/fs/$* install
306
307 $(FS_DRIVERS:%=%_dist): %_dist:
308 make -C services/fs/$* dist
309
310 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) \
311 $(FS_DRIVERS:%=%_install) $(FS_DRIVERS:%=%_dist)
312
313 #
314 # Network driver rules
315 #
316 $(NET_DRIVERS): %:
317 make -C services/net/$*
318
319 $(NET_DRIVERS:%=%_clean): %_clean:
320 make -C services/net/$* clean
321
322 $(NET_DRIVERS:%=%_install): %_install:
323 make -C services/net/$* install
324
325 $(NET_DRIVERS:%=%_dist): %_dist:
326 make -C services/net/$* dist
327
328 .PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_clean) \
329 $(NET_DRIVERS:%=%_install) $(NET_DRIVERS:%=%_dist)
330
331 $(NET_DEVICE_DRIVERS): %:
332 make -C services/net/dd/$*
333
334 $(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
335 make -C services/net/dd/$* clean
336
337 $(NET_DEVICE_DRIVERS:%=%_install): %_install:
338 make -C services/net/dd/$* install
339
340 $(NET_DEVICE_DRIVERS:%=%_dist): %_dist:
341 make -C services/net/dd/$* dist
342
343 .PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) \
344 $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_dist)
345
346 #
347 # storage driver rules
348 #
349 $(STORAGE_DRIVERS): %:
350 make -C services/storage/$*
351
352 $(STORAGE_DRIVERS:%=%_clean): %_clean:
353 make -C services/storage/$* clean
354
355 $(STORAGE_DRIVERS:%=%_install): %_install:
356 make -C services/storage/$* install
357
358 $(STORAGE_DRIVERS:%=%_dist): %_dist:
359 make -C services/storage/$* dist
360
361 .PHONY: $(STORAGE_DRIVERS) $(STORAGE_DRIVERS:%=%_clean) \
362 $(STORAGE_DRIVERS:%=%_install) $(STORAGE_DRIVERS:%=%_dist)
363
364 #
365 # Kernel loaders
366 #
367
368 $(LOADERS): %:
369 make -C loaders/$*
370
371 $(LOADERS:%=%_clean): %_clean:
372 make -C loaders/$* clean
373
374 $(LOADERS:%=%_install): %_install:
375 make -C loaders/$* install
376
377 $(LOADERS:%=%_dist): %_dist:
378 make -C loaders/$* dist
379
380 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_install) \
381 $(LOADERS:%=%_dist)
382
383 #
384 # Required system components
385 #
386
387 ntoskrnl:
388 make -C ntoskrnl
389
390 ntoskrnl_clean:
391 make -C ntoskrnl clean
392
393 ntoskrnl_install:
394 make -C ntoskrnl install
395
396 ntoskrnl_dist:
397 make -C ntoskrnl dist
398
399 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_install ntoskrnl_dist
400
401 #
402 # Hardware Abstraction Layer import library
403 #
404
405 hallib:
406 make -C hal/hal
407
408 hallib_clean:
409 make -C hal/hal clean
410
411 hallib_install:
412 make -C hal/hal install
413
414 hallib_dist:
415 make -C hal/hal dist
416
417 .PHONY: hallib hallib_clean hallib_install hallib_dist
418
419 #
420 # Hardware Abstraction Layers
421 #
422
423 $(HALS): %:
424 make -C hal/$*
425
426 $(HALS:%=%_clean): %_clean:
427 make -C hal/$* clean
428
429 $(HALS:%=%_install): %_install:
430 make -C hal/$* install
431
432 $(HALS:%=%_dist): %_dist:
433 make -C hal/$* dist
434
435 .PHONY: $(HALS) $(HALS:%=%_clean) $(HALS:%=%_install) $(HALS:%=%_dist)
436
437 #
438 # Required DLLs
439 #
440
441 $(DLLS): %:
442 make -C lib/$*
443
444 $(DLLS:%=%_clean): %_clean:
445 make -C lib/$* clean
446
447 $(DLLS:%=%_install): %_install:
448 make -C lib/$* install
449
450 $(DLLS:%=%_dist): %_dist:
451 make -C lib/$* dist
452
453 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_dist)
454
455 #
456 # Kernel Subsystems
457 #
458
459 $(SUBSYS): %:
460 make -C subsys/$*
461
462 $(SUBSYS:%=%_clean): %_clean:
463 make -C subsys/$* clean
464
465 $(SUBSYS:%=%_install): %_install:
466 make -C subsys/$* install
467
468 $(SUBSYS:%=%_dist): %_dist:
469 make -C subsys/$* dist
470
471 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) \
472 $(SUBSYS:%=%_dist)
473
474 #
475 # Create an installation
476 #
477
478 install_clean:
479 $(RM) $(INSTALL_DIR)/system32/drivers/*.*
480 $(RM) $(INSTALL_DIR)/system32/config/*.*
481 $(RM) $(INSTALL_DIR)/system32/*.*
482 $(RM) $(INSTALL_DIR)/symbols/*.*
483 $(RM) $(INSTALL_DIR)/media/fonts/*.*
484 $(RM) $(INSTALL_DIR)/media/*.*
485 $(RM) $(INSTALL_DIR)/bin/*.*
486 $(RM) $(INSTALL_DIR)/*.com
487 $(RM) $(INSTALL_DIR)/*.bat
488 $(RMDIR) $(INSTALL_DIR)/system32/drivers
489 $(RMDIR) $(INSTALL_DIR)/system32/config
490 $(RMDIR) $(INSTALL_DIR)/system32
491 $(RMDIR) $(INSTALL_DIR)/symbols
492 $(RMDIR) $(INSTALL_DIR)/media/fonts
493 $(RMDIR) $(INSTALL_DIR)/media
494 $(RMDIR) $(INSTALL_DIR)/bin
495 $(RMDIR) $(INSTALL_DIR)
496
497 install_dirs:
498 $(RMKDIR) $(INSTALL_DIR)
499 $(RMKDIR) $(INSTALL_DIR)/bin
500 $(RMKDIR) $(INSTALL_DIR)/media
501 $(RMKDIR) $(INSTALL_DIR)/media/fonts
502 $(RMKDIR) $(INSTALL_DIR)/symbols
503 $(RMKDIR) $(INSTALL_DIR)/system32
504 $(RMKDIR) $(INSTALL_DIR)/system32/config
505 $(RMKDIR) $(INSTALL_DIR)/system32/drivers
506
507 install_before:
508 $(CP) boot.bat $(INSTALL_DIR)/boot.bat
509 $(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/media/fonts/helb____.ttf
510 $(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/media/fonts/timr____.ttf
511
512 .PHONY: install_clean install_dirs install_before
513
514
515 #
516 # Make a distribution saveset
517 #
518
519 dist_clean:
520 $(RM) $(DIST_DIR)/symbols/*.sym
521 $(RM) $(DIST_DIR)/drivers/*.sys
522 $(RM) $(DIST_DIR)/subsys/*.exe
523 $(RM) $(DIST_DIR)/dlls/*.dll
524 $(RM) $(DIST_DIR)/apps/*.exe
525 $(RM) $(DIST_DIR)/*.exe
526 $(RMDIR) $(DIST_DIR)/symbols
527 $(RMDIR) $(DIST_DIR)/subsys
528 $(RMDIR) $(DIST_DIR)/drivers
529 $(RMDIR) $(DIST_DIR)/dlls
530 $(RMDIR) $(DIST_DIR)/apps
531 $(RMDIR) $(DIST_DIR)
532
533 dist_dirs:
534 $(RMKDIR) $(DIST_DIR)
535 $(RMKDIR) $(DIST_DIR)/apps
536 $(RMKDIR) $(DIST_DIR)/dlls
537 $(RMKDIR) $(DIST_DIR)/drivers
538 $(RMKDIR) $(DIST_DIR)/subsys
539 $(RMKDIR) $(DIST_DIR)/symbols
540
541 .PHONY: dist_clean dist_dirs
542
543
544 etags:
545 find . -name "*.[ch]" -print | etags --language=c -
546
547 # EOF