34c071a0d8f17e0a24d8a11bb91cc76901f2b8ae
[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 = blue ide keyboard null parallel serial vidport vga/display vga/miniport
38 # DEVICE_DRIVERS = beep event floppy ide_test mouse sound test test1
39 FS_DRIVERS = vfat
40 # FS_DRIVERS = minix ext2 template
41 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(FS_DRIVERS)
42
43 APPS = args hello shell test cat bench apc shm lpc thread event file gditest
44
45 all: buildno $(COMPONENTS) $(DLLS) $(SUBSYS) $(LOADERS) $(KERNEL_SERVICES) $(APPS)
46
47 .PHONY: all
48
49 clean: buildno_clean $(COMPONENTS:%=%_clean) $(DLLS:%=%_clean) $(LOADERS:%=%_clean) \
50 $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) $(APPS:%=%_clean)
51
52 .PHONY: clean
53
54 floppy: make_floppy_dirs autoexec_floppy $(COMPONENTS:%=%_floppy) \
55 $(DLLS:%=%_floppy) $(LOADERS:%=%_floppy) \
56 $(KERNEL_SERVICES:%=%_floppy) $(SUBSYS:%=%_floppy) \
57 $(APPS:%=%_floppy)
58
59 dist: clean_dist_dir make_dist_dirs $(COMPONENTS:%=%_dist) $(DLLS:%=%_dist) \
60 $(LOADERS:%=%_dist) $(KERNEL_SERVICES:%=%_dist) $(SUBSYS:%=%_dist) \
61 $(APPS:%=%_dist)
62
63 #
64 # Build number generator
65 #
66 buildno: include/reactos/version.h
67 make -C apps/buildno
68
69 buildno_clean:
70 make -C apps/buildno clean
71
72 buildno_floppy:
73
74 buildno_dist:
75
76 .PHONY: buildno buildno_clean buildno_floppy buildno_dist
77
78 #
79 # Applications
80 #
81 $(APPS): %:
82 make -C apps/$*
83
84 $(APPS:%=%_clean): %_clean:
85 make -C apps/$* clean
86
87 $(APPS:%=%_floppy): %_floppy:
88 make -C apps/$* floppy
89
90 $(APPS:%=%_dist): %_dist:
91 make -C apps/$* dist
92
93 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_floppy) $(APPS:%=%_dist)
94
95 #
96 # Interfaces
97 #
98 iface_native:
99 make -C iface/native
100
101 iface_native_clean:
102 make -C iface/native clean
103
104 iface_native_floppy:
105
106 iface_native_dist:
107
108 iface_additional:
109 make -C iface/addsys
110
111 iface_additional_clean:
112 make -C iface/addsys clean
113
114 iface_additional_floppy:
115
116 iface_additional_dist:
117
118 .PHONY: iface_native iface_native_clean iface_native_floppy \
119 iface_native_dist \
120 iface_additional iface_additional_clean iface_additional_floppy \
121 iface_additional_dist \
122
123 #
124 # Device driver rules
125 #
126 $(DEVICE_DRIVERS): %:
127 make -C services/dd/$*
128
129 $(DEVICE_DRIVERS:%=%_clean): %_clean:
130 make -C services/dd/$* clean
131
132 $(DEVICE_DRIVERS:%=%_floppy): %_floppy:
133 make -C services/dd/$* floppy
134
135 $(DEVICE_DRIVERS:%=%_dist): %_dist:
136 make -C services/dd/$* dist
137
138 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
139 $(DEVICE_DRIVERS:%=%_floppy) $(DEVICE_DRIVERS:%=%_dist)
140
141 $(FS_DRIVERS): %:
142 make -C services/fs/$*
143
144 $(FS_DRIVERS:%=%_clean): %_clean:
145 make -C services/fs/$* clean
146
147 $(FS_DRIVERS:%=%_floppy): %_floppy:
148 make -C services/fs/$* floppy
149
150 $(FS_DRIVERS:%=%_dist): %_dist:
151 make -C services/fs/$* dist
152
153 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_floppy) \
154 $(FS_DRIVERS:%=%_dist)
155
156 #
157 # Kernel loaders
158 #
159
160 $(LOADERS): %:
161 make -C loaders/$*
162
163 $(LOADERS:%=%_clean): %_clean:
164 make -C loaders/$* clean
165
166 $(LOADERS:%=%_floppy): %_floppy:
167 make -C loaders/$* floppy
168
169 $(LOADERS:%=%_dist): %_dist:
170 make -C loaders/$* dist
171
172 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_floppy) \
173 $(LOADERS:%=%_dist)
174
175 #
176 # Required system components
177 #
178
179 ntoskrnl:
180 make -C ntoskrnl
181
182 ntoskrnl_clean:
183 make -C ntoskrnl clean
184
185 ntoskrnl_floppy:
186 make -C ntoskrnl floppy
187
188 ntoskrnl_dist:
189 make -C ntoskrnl dist
190
191 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_floppy ntoskrnl_dist
192
193 #
194 # Required DLLs
195 #
196
197 $(DLLS): %:
198 make -C lib/$*
199
200 $(DLLS:%=%_clean): %_clean:
201 make -C lib/$* clean
202
203 $(DLLS:%=%_floppy): %_floppy:
204 make -C lib/$* floppy
205
206 $(DLLS:%=%_dist): %_dist:
207 make -C lib/$* dist
208
209 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_floppy) $(DLLS:%=%_dist)
210
211 #
212 # Kernel Subsystems
213 #
214 $(SUBSYS): %:
215 make -C subsys/$*
216
217 $(SUBSYS:%=%_clean): %_clean:
218 make -C subsys/$* clean
219
220 $(SUBSYS:%=%_floppy): %_floppy:
221 make -C subsys/$* floppy
222
223 $(SUBSYS:%=%_dist): %_dist:
224 make -C subsys/$* dist
225
226 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_floppy) \
227 $(SUBSYS:%=%_dist)
228
229 #
230 # Make an install floppy
231 #
232
233 install: all
234 ./install.sh /mnt/hda1
235
236 make_floppy_dirs:
237 ifeq ($(DOSCLI),yes)
238 mkdir $(FLOPPY_DIR)\dlls
239 mkdir $(FLOPPY_DIR)\apps
240 mkdir $(FLOPPY_DIR)\drivers
241 mkdir $(FLOPPY_DIR)\subsys
242 else
243 mkdir $(FLOPPY_DIR)/dlls $(FLOPPY_DIR)/apps $(FLOPPY_DIR)/drivers
244 mkdir $(FLOPPY_DIR)/subsys
245 endif
246
247 .PHONY: make_floppy_dirs
248
249 autoexec_floppy: $(FLOPPY_DIR)/autoexec.bat
250
251 $(FLOPPY_DIR)/autoexec.bat: bootflop.bat
252 ifeq ($(DOSCLI),yes)
253 $(CP) bootflop.bat $(FLOPPY_DIR)\autoexec.bat
254 else
255 $(CP) bootflop.bat $(FLOPPY_DIR)/autoexec.bat
256 endif
257
258 #
259 # Make a distribution saveset
260 #
261
262 clean_dist_dir:
263 ifeq ($(DOSCLI),yes)
264 - $(RM) $(DIST_DIR)\dlls\*.dll
265 - $(RM) $(DIST_DIR)\apps\*.exe
266 - $(RM) $(DIST_DIR)\drivers\*.sys
267 - $(RM) $(DIST_DIR)\subsys\*.exe
268 - $(RMDIR) $(DIST_DIR)\dlls
269 - $(RMDIR) $(DIST_DIR)\apps
270 - $(RMDIR) $(DIST_DIR)\drivers
271 - $(RMDIR) $(DIST_DIR)\subsys
272 - $(RMDIR) $(DIST_DIR)
273 else
274 $(RM) -r $(DIST_DIR)
275 endif
276
277 make_dist_dirs:
278 ifeq ($(DOSCLI),yes)
279 mkdir $(DIST_DIR)
280 mkdir $(DIST_DIR)\dlls
281 mkdir $(DIST_DIR)\apps
282 mkdir $(DIST_DIR)\drivers
283 mkdir $(DIST_DIR)\dlls
284 mkdir $(DIST_DIR)\subsys
285 else
286 mkdir $(DIST_DIR) $(DIST_DIR)/dlls $(DIST_DIR)/apps $(DIST_DIR)/drivers
287 mkdir $(DIST_DIR)/subsys
288 endif
289
290 .PHONY: clean_dist_dir make_dist_dirs
291