Added networking code from Casper Hornstrup
[reactos.git] / reactos / Makefile
1 #
2 # Global makefile
3 #
4
5 #
6 # Select your host
7 #
8 #HOST = mingw32-linux
9 #HOST = djgpp-msdos
10 #HOST = mingw32-windows
11
12 include rules.mak
13
14 #
15 # Required to run the system
16 #
17 COMPONENTS = iface_native iface_additional ntoskrnl
18 DLLS = ntdll kernel32 crtdll advapi32 fmifs gdi32
19 #DLLS = mingw32
20 SUBSYS = smss win32k csrss
21
22 #
23 # Select the server(s) you want to build
24 #
25 SERVERS = win32
26 # SERVERS = posix linux os2
27
28 #
29 # Select the loader(s) you want to build
30 #
31 LOADERS = dos
32 # LOADERS = boot
33
34 #
35 # Select the device drivers and filesystems you want
36 #
37 DEVICE_DRIVERS = vga blue ide keyboard null parallel serial vidport
38 # DEVICE_DRIVERS = beep event floppy ide_test mouse sound test test1
39
40 FS_DRIVERS = vfat
41 # FS_DRIVERS = minix ext2 template
42
43 # ndis tdi tcpip tditest
44 NET_DRIVERS = ndis tcpip tditest
45
46 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(FS_DRIVERS) $(NET_DRIVERS)
47
48 APPS = args hello shell test cat bench apc shm lpc thread event file gditest \
49 pteb consume
50
51 # objdir
52
53 all: buildno $(COMPONENTS) $(DLLS) $(SUBSYS) $(LOADERS) $(KERNEL_SERVICES) $(APPS)
54
55 .PHONY: all
56
57 clean: buildno_clean $(COMPONENTS:%=%_clean) $(DLLS:%=%_clean) $(LOADERS:%=%_clean) \
58 $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) $(APPS:%=%_clean)
59
60 .PHONY: clean
61
62 floppy: make_floppy_dirs autoexec_floppy $(COMPONENTS:%=%_floppy) \
63 $(DLLS:%=%_floppy) $(LOADERS:%=%_floppy) \
64 $(KERNEL_SERVICES:%=%_floppy) $(SUBSYS:%=%_floppy) \
65 $(APPS:%=%_floppy)
66
67 dist: clean_dist_dir make_dist_dirs $(COMPONENTS:%=%_dist) $(DLLS:%=%_dist) \
68 $(LOADERS:%=%_dist) $(KERNEL_SERVICES:%=%_dist) $(SUBSYS:%=%_dist) \
69 $(APPS:%=%_dist)
70
71 #
72 # Build number generator
73 #
74 buildno: include/reactos/version.h
75 make -C apps/buildno
76
77 buildno_clean:
78 make -C apps/buildno clean
79
80 buildno_floppy:
81
82 buildno_dist:
83
84 .PHONY: buildno buildno_clean buildno_floppy buildno_dist
85
86 #
87 # Applications
88 #
89 $(APPS): %:
90 make -C apps/$*
91
92 $(APPS:%=%_clean): %_clean:
93 make -C apps/$* clean
94
95 $(APPS:%=%_floppy): %_floppy:
96 make -C apps/$* floppy
97
98 $(APPS:%=%_dist): %_dist:
99 make -C apps/$* dist
100
101 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_floppy) $(APPS:%=%_dist)
102
103 #
104 # Interfaces
105 #
106 iface_native:
107 make -C iface/native
108
109 iface_native_clean:
110 make -C iface/native clean
111
112 iface_native_floppy:
113
114 iface_native_dist:
115
116 iface_additional:
117 make -C iface/addsys
118
119 iface_additional_clean:
120 make -C iface/addsys clean
121
122 iface_additional_floppy:
123
124 iface_additional_dist:
125
126 .PHONY: iface_native iface_native_clean iface_native_floppy \
127 iface_native_dist \
128 iface_additional iface_additional_clean iface_additional_floppy \
129 iface_additional_dist \
130
131 #
132 # Device driver rules
133 #
134 $(DEVICE_DRIVERS): %:
135 make -C services/dd/$*
136
137 $(DEVICE_DRIVERS:%=%_clean): %_clean:
138 make -C services/dd/$* clean
139
140 $(DEVICE_DRIVERS:%=%_floppy): %_floppy:
141 make -C services/dd/$* floppy
142
143 $(DEVICE_DRIVERS:%=%_dist): %_dist:
144 make -C services/dd/$* dist
145
146 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
147 $(DEVICE_DRIVERS:%=%_floppy) $(DEVICE_DRIVERS:%=%_dist)
148
149 $(FS_DRIVERS): %:
150 make -C services/fs/$*
151
152 $(FS_DRIVERS:%=%_clean): %_clean:
153 make -C services/fs/$* clean
154
155 $(FS_DRIVERS:%=%_floppy): %_floppy:
156 make -C services/fs/$* floppy
157
158 $(FS_DRIVERS:%=%_dist): %_dist:
159 make -C services/fs/$* dist
160
161 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_floppy) \
162 $(FS_DRIVERS:%=%_dist)
163
164 $(NET_DRIVERS): %:
165 make -C services/net/$*
166
167 $(NET_DRIVERS:%=%_clean): %_clean:
168 make -C services/net/$* clean
169
170 .PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_clean)
171
172
173 #
174 # Kernel loaders
175 #
176
177 $(LOADERS): %:
178 make -C loaders/$*
179
180 $(LOADERS:%=%_clean): %_clean:
181 make -C loaders/$* clean
182
183 $(LOADERS:%=%_floppy): %_floppy:
184 make -C loaders/$* floppy
185
186 $(LOADERS:%=%_dist): %_dist:
187 make -C loaders/$* dist
188
189 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_floppy) \
190 $(LOADERS:%=%_dist)
191
192 #
193 # Required system components
194 #
195
196 ntoskrnl:
197 make -C ntoskrnl
198
199 ntoskrnl_clean:
200 make -C ntoskrnl clean
201
202 ntoskrnl_floppy:
203 make -C ntoskrnl floppy
204
205 ntoskrnl_dist:
206 make -C ntoskrnl dist
207
208 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_floppy ntoskrnl_dist
209
210 #
211 # Required DLLs
212 #
213
214 $(DLLS): %:
215 make -C lib/$*
216
217 $(DLLS:%=%_clean): %_clean:
218 make -C lib/$* clean
219
220 $(DLLS:%=%_floppy): %_floppy:
221 make -C lib/$* floppy
222
223 $(DLLS:%=%_dist): %_dist:
224 make -C lib/$* dist
225
226 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_floppy) $(DLLS:%=%_dist)
227
228 #
229 # Kernel Subsystems
230 #
231 $(SUBSYS): %:
232 make -C subsys/$*
233
234 $(SUBSYS:%=%_clean): %_clean:
235 make -C subsys/$* clean
236
237 $(SUBSYS:%=%_floppy): %_floppy:
238 make -C subsys/$* floppy
239
240 $(SUBSYS:%=%_dist): %_dist:
241 make -C subsys/$* dist
242
243 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_floppy) \
244 $(SUBSYS:%=%_dist)
245
246 #
247 # Make an install floppy
248 #
249
250 install: all
251 ./install.sh /mnt/hda1
252 ./install.sh /mnt/hda4
253 ./install.bochs
254
255 make_floppy_dirs:
256 ifeq ($(DOSCLI),yes)
257 mkdir $(FLOPPY_DIR)\dlls
258 mkdir $(FLOPPY_DIR)\apps
259 mkdir $(FLOPPY_DIR)\drivers
260 mkdir $(FLOPPY_DIR)\subsys
261 else
262 mkdir $(FLOPPY_DIR)/dlls $(FLOPPY_DIR)/apps $(FLOPPY_DIR)/drivers
263 mkdir $(FLOPPY_DIR)/subsys
264 endif
265
266 .PHONY: make_floppy_dirs
267
268 autoexec_floppy: $(FLOPPY_DIR)/autoexec.bat
269
270 $(FLOPPY_DIR)/autoexec.bat: bootflop.bat
271 ifeq ($(DOSCLI),yes)
272 $(CP) bootflop.bat $(FLOPPY_DIR)\autoexec.bat
273 else
274 $(CP) bootflop.bat $(FLOPPY_DIR)/autoexec.bat
275 endif
276
277 #
278 # Make a distribution saveset
279 #
280
281 clean_dist_dir:
282 ifeq ($(DOSCLI),yes)
283 - $(RM) $(DIST_DIR)\dlls\*.dll
284 - $(RM) $(DIST_DIR)\apps\*.exe
285 - $(RM) $(DIST_DIR)\drivers\*.sys
286 - $(RM) $(DIST_DIR)\subsys\*.exe
287 - $(RMDIR) $(DIST_DIR)\dlls
288 - $(RMDIR) $(DIST_DIR)\apps
289 - $(RMDIR) $(DIST_DIR)\drivers
290 - $(RMDIR) $(DIST_DIR)\subsys
291 - $(RMDIR) $(DIST_DIR)
292 else
293 $(RM) -r $(DIST_DIR)
294 endif
295
296 make_dist_dirs:
297 ifeq ($(DOSCLI),yes)
298 mkdir $(DIST_DIR)
299 mkdir $(DIST_DIR)\dlls
300 mkdir $(DIST_DIR)\apps
301 mkdir $(DIST_DIR)\drivers
302 mkdir $(DIST_DIR)\dlls
303 mkdir $(DIST_DIR)\subsys
304 else
305 mkdir $(DIST_DIR) $(DIST_DIR)/dlls $(DIST_DIR)/apps $(DIST_DIR)/drivers
306 mkdir $(DIST_DIR)/subsys
307 endif
308
309 .PHONY: clean_dist_dir make_dist_dirs
310
311 #
312 #
313 #
314 etags:
315 find . -name "*.[ch]" -print | etags --language=c -