Added -r switch to objdir to recurse the system name space.
[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
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
61
62 # objdir
63
64 #NET_APPS = ping roshttpd
65 NET_APPS = ping
66
67
68 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) $(NET_DRIVERS) $(NET_DEVICE_DRIVERS)
69
70 all: buildno $(COMPONENTS) $(BUS) $(DLLS) $(SUBSYS) $(LOADERS) $(KERNEL_SERVICES) $(SYS_APPS) $(APPS) $(NET_APPS)
71
72 .PHONY: all
73
74 clean: buildno_clean $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(DLLS:%=%_clean) $(LOADERS:%=%_clean) \
75 $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) $(SYS_APPS:%=%_clean) $(APPS:%=%_clean)
76
77 .PHONY: clean
78
79 ifeq ($(HOST),mingw32-linux)
80 rcopy$(EXE_POSTFIX): rcopy.c
81 $(HOST_CC) -g -DUNIX_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
82 endif
83 ifeq ($(HOST),mingw32-windows)
84 rcopy$(EXE_POSTFIX): rcopy.c
85 $(HOST_CC) -g -DDOS_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
86 endif
87
88 ifeq ($(HOST),mingw32-linux)
89 rmkdir$(EXE_POSTFIX): rmkdir.c
90 $(HOST_CC) -g -DUNIX_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
91 endif
92 ifeq ($(HOST),mingw32-windows)
93 rmkdir$(EXE_POSTFIX): rmkdir.c
94 $(HOST_CC) -g -DDOS_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
95 endif
96
97
98 install: rcopy$(EXE_POSTFIX) rmkdir$(EXE_POSTFIX) make_install_dirs autoexec_install \
99 $(COMPONENTS:%=%_install) $(BUS:%=%_install) \
100 $(DLLS:%=%_install) $(LOADERS:%=%_install) \
101 $(KERNEL_SERVICES:%=%_install) $(SUBSYS:%=%_install) \
102 $(SYS_APPS:%=%_install) $(APPS:%=%_install)
103
104 dist: rcopy$(EXE_POSTFIX) clean_dist_dir make_dist_dirs $(COMPONENTS:%=%_dist) \
105 $(BUS:%=%_dist) $(DLLS:%=%_dist) \
106 $(LOADERS:%=%_dist) $(KERNEL_SERVICES:%=%_dist) $(SUBSYS:%=%_dist) \
107 $(SYS_APPS:%=%_dist) $(APPS:%=%_dist)
108
109 #
110 # Build number generator
111 #
112 buildno: include/reactos/version.h
113 make -C apps/buildno
114
115 buildno_clean:
116 make -C apps/buildno clean
117
118 buildno_dist:
119
120 buildno_install:
121
122 .PHONY: buildno buildno_clean buildno_dist buildno_install
123
124 #
125 # System Applications
126 #
127 $(SYS_APPS): %:
128 make -C apps/system/$*
129
130 $(SYS_APPS:%=%_clean): %_clean:
131 make -C apps/system/$* clean
132
133 $(SYS_APPS:%=%_dist): %_dist:
134 make -C apps/system/$* dist
135
136 $(SYS_APPS:%=%_install): %_install:
137 make -C apps/system/$* install
138
139 .PHONY: $(SYS_APPS) $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_dist)
140
141 #
142 # Applications
143 #
144 $(APPS): %:
145 make -C apps/$*
146
147 $(APPS:%=%_clean): %_clean:
148 make -C apps/$* clean
149
150 $(APPS:%=%_dist): %_dist:
151 make -C apps/$* dist
152
153 $(APPS:%=%_install): %_install:
154 make -C apps/$* install
155
156 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_install) $(APPS:%=%_dist)
157
158 #
159 # Network applications
160 #
161 $(NET_APPS): %:
162 make -C apps/net/$*
163
164 $(NET_APPS:%=%_clean): %_clean:
165 make -C apps/net/$* clean
166
167 $(NET_APPS:%=%_dist): %_dist:
168 make -C apps/net/$* dist
169
170 $(NET_APPS:%=%_install): %_install:
171 make -C apps/net/$* install
172
173 .PHONY: $(NET_APPS) $(NET_APPS:%=%_clean) $(NET_APPS:%=%_install) $(NET_APPS:%=%_dist)
174
175 #
176 # Interfaces
177 #
178 iface_native:
179 make -C iface/native
180
181 iface_native_clean:
182 make -C iface/native clean
183
184 iface_native_install:
185
186 iface_native_dist:
187
188 iface_additional:
189 make -C iface/addsys
190
191 iface_additional_clean:
192 make -C iface/addsys clean
193
194 iface_additional_install:
195
196 iface_additional_dist:
197
198 .PHONY: iface_native iface_native_clean iface_native_install \
199 iface_native_dist \
200 iface_additional iface_additional_clean iface_additional_install \
201 iface_additional_dist
202
203 #
204 # Bus driver rules
205 #
206 $(BUS): %:
207 make -C services/bus/$*
208
209 $(BUS:%=%_clean): %_clean:
210 make -C services/bus/$* clean
211
212 $(BUS:%=%_install): %_install:
213 make -C services/bus/$* install
214
215 $(BUS:%=%_dist): %_dist:
216 make -C services/bus/$* dist
217
218 .PHONY: $(BUS) $(BUS:%=%_clean) \
219 $(BUS:%=%_install) $(BUS:%=%_dist)
220
221 #
222 # Device driver rules
223 #
224 $(DEVICE_DRIVERS): %:
225 make -C services/dd/$*
226
227 $(DEVICE_DRIVERS:%=%_clean): %_clean:
228 make -C services/dd/$* clean
229
230 $(DEVICE_DRIVERS:%=%_install): %_install:
231 make -C services/dd/$* install
232
233 $(DEVICE_DRIVERS:%=%_dist): %_dist:
234 make -C services/dd/$* dist
235
236 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
237 $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_dist)
238
239 #
240 # Input driver rules
241 #
242 $(INPUT_DRIVERS): %:
243 make -C services/input/$*
244
245 $(INPUT_DRIVERS:%=%_clean): %_clean:
246 make -C services/input/$* clean
247
248 $(INPUT_DRIVERS:%=%_install): %_install:
249 make -C services/input/$* install
250
251 $(INPUT_DRIVERS:%=%_dist): %_dist:
252 make -C services/input/$* dist
253
254 .PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_clean) \
255 $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_dist)
256
257 $(FS_DRIVERS): %:
258 make -C services/fs/$*
259
260 $(FS_DRIVERS:%=%_clean): %_clean:
261 make -C services/fs/$* clean
262
263 $(FS_DRIVERS:%=%_install): %_install:
264 make -C services/fs/$* install
265
266 $(FS_DRIVERS:%=%_dist): %_dist:
267 make -C services/fs/$* dist
268
269 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_install) \
270 $(FS_DRIVERS:%=%_dist)
271
272 $(NET_DRIVERS): %:
273 make -C services/net/$*
274
275 $(NET_DRIVERS:%=%_clean): %_clean:
276 make -C services/net/$* clean
277
278 $(NET_DRIVERS:%=%_install): %_install:
279 make -C services/net/$* install
280
281 $(NET_DRIVERS:%=%_dist): %_dist:
282 make -C services/net/$* dist
283
284 .PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_clean) $(NET_DRIVERS:%=%_install) \
285 $(NET_DRIVERS:%=%_dist)
286
287 $(NET_DEVICE_DRIVERS): %:
288 make -C services/net/dd/$*
289
290 $(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
291 make -C services/net/dd/$* clean
292
293 $(NET_DEVICE_DRIVERS:%=%_install): %_install:
294 make -C services/net/dd/$* install
295
296 $(NET_DEVICE_DRIVERS:%=%_dist): %_dist:
297 make -C services/net/dd/$* dist
298
299 .PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) \
300 $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_dist)
301
302 #
303 # Kernel loaders
304 #
305
306 $(LOADERS): %:
307 make -C loaders/$*
308
309 $(LOADERS:%=%_clean): %_clean:
310 make -C loaders/$* clean
311
312 $(LOADERS:%=%_install): %_install:
313 make -C loaders/$* install
314
315 $(LOADERS:%=%_dist): %_dist:
316 make -C loaders/$* dist
317
318 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_install) \
319 $(LOADERS:%=%_dist)
320
321 #
322 # Required system components
323 #
324
325 ntoskrnl:
326 make -C ntoskrnl
327
328 ntoskrnl_clean:
329 make -C ntoskrnl clean
330
331 ntoskrnl_install:
332 make -C ntoskrnl install
333
334 ntoskrnl_dist:
335 make -C ntoskrnl dist
336
337 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_install ntoskrnl_dist
338
339 #
340 # Required DLLs
341 #
342
343 $(DLLS): %:
344 make -C lib/$*
345
346 $(DLLS:%=%_clean): %_clean:
347 make -C lib/$* clean
348
349 $(DLLS:%=%_install): %_install:
350 make -C lib/$* install
351
352 $(DLLS:%=%_dist): %_dist:
353 make -C lib/$* dist
354
355 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_dist)
356
357 #
358 # Kernel Subsystems
359 #
360
361 $(SUBSYS): %:
362 make -C subsys/$*
363
364 $(SUBSYS:%=%_clean): %_clean:
365 make -C subsys/$* clean
366
367 $(SUBSYS:%=%_install): %_install:
368 make -C subsys/$* install
369
370 $(SUBSYS:%=%_dist): %_dist:
371 make -C subsys/$* dist
372
373 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) \
374 $(SUBSYS:%=%_dist)
375
376 #
377 # Make an install floppy
378 #
379 make_install_dirs:
380 ./rmkdir $(FLOPPY_DIR)/dlls
381 ./rmkdir $(FLOPPY_DIR)/apps
382 ./rmkdir $(FLOPPY_DIR)/drivers
383 ./rmkdir $(FLOPPY_DIR)/subsys
384
385
386 .PHONY: make_install_dirs
387
388 autoexec_install: $(FLOPPY_DIR)/autoexec.bat
389
390 $(FLOPPY_DIR)/autoexec.bat: bootflop.bat
391 $(CP) bootflop.bat $(FLOPPY_DIR)/autoexec.bat
392
393 #
394 # Make a distribution saveset
395 #
396
397 clean_dist_dir:
398 ifeq ($(DOSCLI),yes)
399 - $(RM) $(DIST_DIR)\dlls\*.dll
400 - $(RM) $(DIST_DIR)\apps\*.exe
401 - $(RM) $(DIST_DIR)\drivers\*.sys
402 - $(RM) $(DIST_DIR)\subsys\*.exe
403 - $(RMDIR) $(DIST_DIR)\dlls
404 - $(RMDIR) $(DIST_DIR)\apps
405 - $(RMDIR) $(DIST_DIR)\drivers
406 - $(RMDIR) $(DIST_DIR)\subsys
407 - $(RMDIR) $(DIST_DIR)
408 else
409 $(RM) -r $(DIST_DIR)
410 endif
411
412 make_dist_dirs: ./rmkdir
413 ./rmkdir $(DIST_DIR)
414 ./rmkdir $(DIST_DIR)/dlls
415 ./rmkdir $(DIST_DIR)/apps
416 ./rmkdir $(DIST_DIR)/drivers
417 ./rmkdir $(DIST_DIR)/dlls
418 ./rmkdir $(DIST_DIR)/subsys
419
420 .PHONY: clean_dist_dir make_dist_dirs
421
422 #
423 #
424 #
425 etags:
426 find . -name "*.[ch]" -print | etags --language=c -
427
428 # EOF