8 # Define to build ReactOS external targets
10 ifeq ($(ROS_BUILD_EXT),)
16 include $(PATH_TO_TOP)/rules.mak
18 # Required to run the system
19 COMPONENTS = iface_native iface_additional hallib ntoskrnl
21 # Hardware Abstraction Layers
30 # advapi32 crtdll fmifs gdi32 kernel32 libpcap packet msafd msvcrt ntdll ole32
31 # oleaut32 psapi rpcrt4 secur32 shell32 user32 version ws2help ws2_32 wsock32 wshirda
32 DLLS = advapi32 crtdll fmifs gdi32 kernel32 packet msafd msvcrt ntdll \
33 secur32 user32 version winedbgc ws2help ws2_32 wshirda #winmm
35 SUBSYS = smss win32k csrss ntvdm
38 # Select the server(s) you want to build
40 #SERVERS = posix linux os2
47 # Driver support libraries
49 DRIVERS_LIB = bzip2 zlib
51 # Kernel mode device drivers
53 # beep blue floppy null parallel ramdrv serenum serial vga vidport
54 DEVICE_DRIVERS = beep blue floppy null serial vga vidport
56 # Kernel mode input drivers
57 # keyboard mouclass psaux sermouse
58 INPUT_DRIVERS = keyboard mouclass psaux
60 # Kernel mode file system drivers
61 # cdfs ext2 fs_rec ms np vfat
62 FS_DRIVERS = cdfs fs_rec ms np vfat mup ntfs
64 # Kernel mode networking drivers
65 # afd ndis npf tcpip tdi wshtcpip
66 NET_DRIVERS = afd ndis npf tcpip tdi wshtcpip
68 # Kernel mode networking device drivers
70 NET_DEVICE_DRIVERS = ne2000
72 # Kernel mode storage drivers
73 # atapi cdrom class2 disk scsiport
74 STORAGE_DRIVERS = atapi cdrom class2 disk scsiport
77 # autochk lsass services shell winlogon
78 SYS_APPS = autochk services shell winlogon gstart usetup
82 SYS_SVC = rpcss eventlog
84 APPS = tests testsets utils
87 # External (sub)systems for ReactOS
88 # rosapps wine posix os2 (requires c++) java (non-existant)
89 EXTERNALS = rosapps wine posix os2
91 ifeq ($(ROS_BUILD_EXT),yes)
92 EXT_MODULES = $(EXTERNALS)
97 KERNEL_DRIVERS = $(DRIVERS_LIB) $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) \
98 $(NET_DRIVERS) $(NET_DEVICE_DRIVERS) $(STORAGE_DRIVERS)
100 all: tools dk implib $(COMPONENTS) $(HALS) $(BUS) $(DLLS) $(SUBSYS) \
101 $(LOADERS) $(KERNEL_DRIVERS) $(SYS_APPS) $(SYS_SVC) \
102 $(APPS) $(EXT_MODULES)
104 #config: $(TOOLS:%=%_config)
106 depends: $(DLLS:%=%_depends) $(SUBSYS:%=%_depends) $(SYS_SVC:%=%_depends) \
107 $(EXT_MODULES:%=%_depends) $(POSIX_LIBS:%=%_depends)
109 implib: $(COMPONENTS:%=%_implib) $(HALS:%=%_implib) $(BUS:%=%_implib) \
110 $(DLLS:%=%_implib) $(LOADERS:%=%_implib) \
111 $(KERNEL_DRIVERS:%=%_implib) $(SUBSYS:%=%_implib) \
112 $(SYS_APPS:%=%_implib) $(SYS_SVC:%=%_implib) \
113 $(APPS:%=%_implib) $(EXT_MODULES:%=%_implib)
115 clean: tools dk_clean $(HALS:%=%_clean) \
116 $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(DLLS:%=%_clean) \
117 $(LOADERS:%=%_clean) $(KERNEL_DRIVERS:%=%_clean) $(SUBSYS:%=%_clean) \
118 $(SYS_APPS:%=%_clean) $(SYS_SVC:%=%_clean) \
119 $(NET_APPS:%=%_clean) \
120 $(APPS:%=%_clean) $(EXT_MODULES:%=%_clean) \
121 clean_after tools_clean
124 $(RM) $(PATH_TO_TOP)/include/roscfg.h
126 install: tools install_dirs install_before \
127 $(COMPONENTS:%=%_install) $(HALS:%=%_install) $(BUS:%=%_install) \
128 $(DLLS:%=%_install) $(LOADERS:%=%_install) \
129 $(KERNEL_DRIVERS:%=%_install) $(SUBSYS:%=%_install) \
130 $(SYS_APPS:%=%_install) $(SYS_SVC:%=%_install) \
131 $(APPS:%=%_install) $(EXT_MODULES:%=%_install)
133 dist: $(TOOLS_PATH)/rcopy$(EXE_POSTFIX) dist_clean dist_dirs \
134 $(HALS:%=%_dist) $(COMPONENTS:%=%_dist) $(BUS:%=%_dist) $(DLLS:%=%_dist) \
135 $(LOADERS:%=%_dist) $(KERNEL_DRIVERS:%=%_dist) $(SUBSYS:%=%_dist) \
136 $(SYS_APPS:%=%_dist) $(SYS_SVC:%=%_dist) \
137 $(NET_APPS:%=%_dist) \
138 $(APPS:%=%_dist) $(EXT_MODULES:%=%_dist)
140 .PHONY: all depends implib clean clean_before install dist
144 # System Applications
147 make -C subsys/system/$*
149 $(SYS_APPS:%=%_implib): %_implib:
150 make -C subsys/system/$* implib
152 $(SYS_APPS:%=%_clean): %_clean:
153 make -C subsys/system/$* clean
155 $(SYS_APPS:%=%_dist): %_dist:
156 make -C subsys/system/$* dist
158 $(SYS_APPS:%=%_install): %_install:
159 make -C subsys/system/$* install
161 .PHONY: $(SYS_APPS) $(SYS_APPS:%=%_implib) $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_dist)
169 $(SYS_SVC:%=%_depends): %_depends:
170 make -C services/$* depends
172 $(SYS_SVC:%=%_implib): %_implib:
173 make -C services/$* implib
175 $(SYS_SVC:%=%_clean): %_clean:
176 make -C services/$* clean
178 $(SYS_SVC:%=%_dist): %_dist:
179 make -C services/$* dist
181 $(SYS_SVC:%=%_install): %_install:
182 make -C services/$* install
184 .PHONY: $(SYS_SVC) $(SYS_SVC:%=%_depends) $(SYS_SVC:%=%_implib) $(SYS_SVC:%=%_clean) $(SYS_SVC:%=%_install) $(SYS_SVC:%=%_dist)
191 # Extra (optional system) Applications
196 $(APPS:%=%_implib): %_implib:
197 make -C apps/$* implib
199 $(APPS:%=%_clean): %_clean:
200 make -C apps/$* clean
202 $(APPS:%=%_dist): %_dist:
205 $(APPS:%=%_install): %_install:
206 make -C apps/$* install
208 .PHONY: $(APPS) $(APPS:%=%_implib) $(APPS:%=%_clean) $(APPS:%=%_install) $(APPS:%=%_dist)
212 # External ports and subsystem personalities
215 make -C $(ROOT_PATH)/$*
217 $(EXTERNALS:%=%_depends): %_depends:
218 make -C $(ROOT_PATH)/$* depends
220 $(EXTERNALS:%=%_implib): %_implib:
221 make -C $(ROOT_PATH)/$* implib
223 $(EXTERNALS:%=%_clean): %_clean:
224 make -C $(ROOT_PATH)/$* clean
226 $(EXTERNALS:%=%_dist): %_dist:
227 make -C $(ROOT_PATH)/$* dist
229 $(EXTERNALS:%=%_install): %_install:
230 make -C $(ROOT_PATH)/$* install
232 .PHONY: $(EXTERNALS) $(EXTERNALS:%=%_depends) $(EXTERNALS:%=%_implib) $(EXTERNALS:%=%_clean) $(EXTERNALS:%=%_install) $(EXTERNALS:%=%_dist)
250 .PHONY: tools tools_implib tools_clean tools_install tools_dist
258 $(RMKDIR) $(DDK_PATH)
259 $(RMKDIR) $(DDK_PATH_LIB)
260 $(RMKDIR) $(DDK_PATH_INC)
261 $(RMKDIR) $(SDK_PATH)
262 $(RMKDIR) $(SDK_PATH_LIB)
263 $(RMKDIR) $(SDK_PATH_INC)
264 $(RMKDIR) $(XDK_PATH)
265 $(RMKDIR) $(XDK_PATH_LIB)
266 $(RMKDIR) $(XDK_PATH_INC)
270 # WARNING! Be very sure that there are no important files
271 # in these directories before cleaning them!!!
273 $(RM) $(DDK_PATH_LIB)/*.a
274 # $(RM) $(DDK_PATH_INC)/*.h
275 $(RMDIR) $(DDK_PATH_LIB)
276 # $(RMDIR) $(DDK_PATH_INC)
277 $(RM) $(SDK_PATH_LIB)/*.a
278 # $(RM) $(SDK_PATH_INC)/*.h
279 $(RMDIR) $(SDK_PATH_LIB)
280 # $(RMDIR) $(SDK_PATH_INC)
281 $(RM) $(XDK_PATH_LIB)/*.a
282 # $(RM) $(XDK_PATH_INC)/*.h
283 $(RMDIR) $(XDK_PATH_LIB)
284 # $(RMDIR) $(XDK_PATH_INC)
290 .PHONY: dk dk_implib dk_clean dk_install dk_dist
302 make -C iface/native clean
304 iface_native_install:
311 iface_additional_implib:
313 iface_additional_clean:
314 make -C iface/addsys clean
316 iface_additional_install:
318 iface_additional_dist:
320 .PHONY: iface_native iface_native_implib iface_native_clean iface_native_install \
322 iface_additional iface_additional_implib iface_additional_clean \
323 iface_additional_install iface_additional_dist
329 make -C drivers/bus/$*
331 $(BUS:%=%_implib): %_implib:
332 make -C drivers/bus/$* implib
334 $(BUS:%=%_clean): %_clean:
335 make -C drivers/bus/$* clean
337 $(BUS:%=%_install): %_install:
338 make -C drivers/bus/$* install
340 $(BUS:%=%_dist): %_dist:
341 make -C drivers/bus/$* dist
343 .PHONY: $(BUS) $(BUS:%=%_implib) $(BUS:%=%_clean) \
344 $(BUS:%=%_install) $(BUS:%=%_dist)
347 # Driver support libraries rules
350 make -C drivers/lib/$*
352 $(DRIVERS_LIB:%=%_implib): %_implib:
353 make -C drivers/lib/$* implib
355 $(DRIVERS_LIB:%=%_clean): %_clean:
356 make -C drivers/lib/$* clean
358 $(DRIVERS_LIB:%=%_install): %_install:
359 make -C drivers/lib/$* install
361 $(DRIVERS_LIB:%=%_dist): %_dist:
362 make -C drivers/lib/$* dist
364 .PHONY: $(DRIVERS_LIB) $(DRIVERS_LIB:%=%_implib) $(DRIVERS_LIB:%=%_clean) \
365 $(DRIVERS_LIB:%=%_install) $(DRIVERS_LIB:%=%_dist)
368 # Device driver rules
370 $(DEVICE_DRIVERS): %:
371 make -C drivers/dd/$*
373 $(DEVICE_DRIVERS:%=%_implib): %_implib:
374 make -C drivers/dd/$* implib
376 $(DEVICE_DRIVERS:%=%_clean): %_clean:
377 make -C drivers/dd/$* clean
379 $(DEVICE_DRIVERS:%=%_install): %_install:
380 make -C drivers/dd/$* install
382 $(DEVICE_DRIVERS:%=%_dist): %_dist:
383 make -C drivers/dd/$* dist
385 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_implib) $(DEVICE_DRIVERS:%=%_clean) \
386 $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_dist)
392 make -C drivers/input/$*
394 $(INPUT_DRIVERS:%=%_implib): %_implib:
395 make -C drivers/input/$* implib
397 $(INPUT_DRIVERS:%=%_clean): %_clean:
398 make -C drivers/input/$* clean
400 $(INPUT_DRIVERS:%=%_install): %_install:
401 make -C drivers/input/$* install
403 $(INPUT_DRIVERS:%=%_dist): %_dist:
404 make -C drivers/input/$* dist
406 .PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_implib) $(INPUT_DRIVERS:%=%_clean)\
407 $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_dist)
410 make -C drivers/fs/$*
412 $(FS_DRIVERS:%=%_implib): %_implib:
413 make -C drivers/fs/$* implib
415 $(FS_DRIVERS:%=%_clean): %_clean:
416 make -C drivers/fs/$* clean
418 $(FS_DRIVERS:%=%_install): %_install:
419 make -C drivers/fs/$* install
421 $(FS_DRIVERS:%=%_dist): %_dist:
422 make -C drivers/fs/$* dist
424 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_implib) $(FS_DRIVERS:%=%_clean) \
425 $(FS_DRIVERS:%=%_install) $(FS_DRIVERS:%=%_dist)
428 # Network driver rules
431 make -C drivers/net/$*
433 $(NET_DRIVERS:%=%_implib): %_implib:
434 make -C drivers/net/$* implib
436 $(NET_DRIVERS:%=%_clean): %_clean:
437 make -C drivers/net/$* clean
439 $(NET_DRIVERS:%=%_install): %_install:
440 make -C drivers/net/$* install
442 $(NET_DRIVERS:%=%_dist): %_dist:
443 make -C drivers/net/$* dist
445 .PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_implib) $(NET_DRIVERS:%=%_clean) \
446 $(NET_DRIVERS:%=%_install) $(NET_DRIVERS:%=%_dist)
448 $(NET_DEVICE_DRIVERS): %:
449 make -C drivers/net/dd/$*
451 $(NET_DEVICE_DRIVERS:%=%_implib): %_implib:
452 make -C drivers/net/dd/$* implib
454 $(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
455 make -C drivers/net/dd/$* clean
457 $(NET_DEVICE_DRIVERS:%=%_install): %_install:
458 make -C drivers/net/dd/$* install
460 $(NET_DEVICE_DRIVERS:%=%_dist): %_dist:
461 make -C drivers/net/dd/$* dist
463 .PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) $(NET_DEVICE_DRIVERS:%=%_implib) \
464 $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_dist)
467 # storage driver rules
469 $(STORAGE_DRIVERS): %:
470 make -C drivers/storage/$*
472 $(STORAGE_DRIVERS:%=%_implib): %_implib:
473 make -C drivers/storage/$* implib
475 $(STORAGE_DRIVERS:%=%_clean): %_clean:
476 make -C drivers/storage/$* clean
478 $(STORAGE_DRIVERS:%=%_install): %_install:
479 make -C drivers/storage/$* install
481 $(STORAGE_DRIVERS:%=%_dist): %_dist:
482 make -C drivers/storage/$* dist
484 .PHONY: $(STORAGE_DRIVERS) $(STORAGE_DRIVERS:%=%_clean) \
485 $(STORAGE_DRIVERS:%=%_install) $(STORAGE_DRIVERS:%=%_dist)
494 $(LOADERS:%=%_implib): %_implib:
496 $(LOADERS:%=%_clean): %_clean:
497 make -C loaders/$* clean
499 $(LOADERS:%=%_install): %_install:
500 make -C loaders/$* install
502 $(LOADERS:%=%_dist): %_dist:
503 make -C loaders/$* dist
505 .PHONY: $(LOADERS) $(LOADERS:%=%_implib) $(LOADERS:%=%_clean) $(LOADERS:%=%_install) \
509 # Required system components
516 make -C ntoskrnl implib
519 make -C ntoskrnl clean
522 make -C ntoskrnl install
525 make -C ntoskrnl dist
527 .PHONY: ntoskrnl ntoskrnl_implib ntoskrnl_clean ntoskrnl_install ntoskrnl_dist
530 # Hardware Abstraction Layer import library
537 make -C hal/hal implib
540 make -C hal/hal clean
543 make -C hal/hal install
548 .PHONY: hallib hallib_implib hallib_clean hallib_install hallib_dist
551 # Hardware Abstraction Layers
557 $(HALS:%=%_implib): %_implib:
558 make -C hal/$* implib
560 $(HALS:%=%_clean): %_clean:
563 $(HALS:%=%_install): %_install:
564 make -C hal/$* install
566 $(HALS:%=%_dist): %_dist:
569 .PHONY: $(HALS) $(HALS:%=%_implib) $(HALS:%=%_clean) $(HALS:%=%_install) $(HALS:%=%_dist)
578 $(DLLS:%=%_depends): %_depends:
579 make -C lib/$* depends
581 $(DLLS:%=%_implib): %_implib:
582 make -C lib/$* implib
584 $(DLLS:%=%_clean): %_clean:
587 $(DLLS:%=%_install): %_install:
588 make -C lib/$* install
590 $(DLLS:%=%_dist): %_dist:
593 .PHONY: $(DLLS) $(DLLS:%=%_depends) $(DLLS:%=%_implib) $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_dist)
596 # Subsystem support modules
602 $(SUBSYS:%=%_depends): %_depends:
603 make -C subsys/$* depends
605 $(SUBSYS:%=%_implib): %_implib:
606 make -C subsys/$* implib
608 $(SUBSYS:%=%_clean): %_clean:
609 make -C subsys/$* clean
611 $(SUBSYS:%=%_install): %_install:
612 make -C subsys/$* install
614 $(SUBSYS:%=%_dist): %_dist:
615 make -C subsys/$* dist
617 .PHONY: $(SUBSYS) $(SUBSYS:%=%_depends) $(SUBSYS:%=%_implib) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) \
621 # Create an installation
625 $(RM) $(INSTALL_DIR)/system32/drivers/*.*
626 $(RM) $(INSTALL_DIR)/system32/config/*.*
627 $(RM) $(INSTALL_DIR)/system32/*.*
628 $(RM) $(INSTALL_DIR)/symbols/*.*
629 $(RM) $(INSTALL_DIR)/media/fonts/*.*
630 $(RM) $(INSTALL_DIR)/media/*.*
631 $(RM) $(INSTALL_DIR)/bin/*.*
632 $(RM) $(INSTALL_DIR)/*.com
633 $(RM) $(INSTALL_DIR)/*.bat
634 $(RMDIR) $(INSTALL_DIR)/system32/drivers
635 $(RMDIR) $(INSTALL_DIR)/system32/config
636 $(RMDIR) $(INSTALL_DIR)/system32
637 $(RMDIR) $(INSTALL_DIR)/symbols
638 $(RMDIR) $(INSTALL_DIR)/media/fonts
639 $(RMDIR) $(INSTALL_DIR)/media
640 $(RMDIR) $(INSTALL_DIR)/bin
641 $(RMDIR) $(INSTALL_DIR)
644 $(RMKDIR) $(INSTALL_DIR)
645 $(RMKDIR) $(INSTALL_DIR)/bin
646 $(RMKDIR) $(INSTALL_DIR)/media
647 $(RMKDIR) $(INSTALL_DIR)/media/fonts
648 $(RMKDIR) $(INSTALL_DIR)/symbols
649 $(RMKDIR) $(INSTALL_DIR)/system32
650 $(RMKDIR) $(INSTALL_DIR)/system32/config
651 $(RMKDIR) $(INSTALL_DIR)/system32/drivers
654 $(CP) bootc.lst $(INSTALL_DIR)/bootc.lst
655 $(CP) boot.bat $(INSTALL_DIR)/boot.bat
656 $(CP) aboot.bat $(INSTALL_DIR)/aboot.bat
657 $(CP) system.hiv $(INSTALL_DIR)/system32/config/system.hiv
658 $(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/media/fonts/helb____.ttf
659 $(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/media/fonts/timr____.ttf
661 .PHONY: install_clean install_dirs install_before
665 # Make a distribution saveset
669 $(RM) $(DIST_DIR)/symbols/*.sym
670 $(RM) $(DIST_DIR)/drivers/*.sys
671 $(RM) $(DIST_DIR)/subsys/*.exe
672 $(RM) $(DIST_DIR)/dlls/*.dll
673 $(RM) $(DIST_DIR)/apps/*.exe
674 $(RM) $(DIST_DIR)/*.exe
675 $(RMDIR) $(DIST_DIR)/symbols
676 $(RMDIR) $(DIST_DIR)/subsys
677 $(RMDIR) $(DIST_DIR)/drivers
678 $(RMDIR) $(DIST_DIR)/dlls
679 $(RMDIR) $(DIST_DIR)/apps
683 $(RMKDIR) $(DIST_DIR)
684 $(RMKDIR) $(DIST_DIR)/apps
685 $(RMKDIR) $(DIST_DIR)/dlls
686 $(RMKDIR) $(DIST_DIR)/drivers
687 $(RMKDIR) $(DIST_DIR)/subsys
688 $(RMKDIR) $(DIST_DIR)/symbols
690 .PHONY: dist_clean dist_dirs
694 find . -name "*.[ch]" -print | etags --language=c -