Improved scheduling code
[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 ntoskrnl
18 DLLS = ntdll kernel32 crtdll fmifs gdi32 psxdll
19 #DLLS = advapi32 mingw32 user32
20 SUBSYS = smss win32k
21 #SUBSYS = csrss
22
23 #
24 # Select the server(s) you want to build
25 #
26 SERVERS = win32
27 # SERVERS = posix linux os2
28
29 #
30 # Select the loader(s) you want to build
31 #
32 LOADERS = dos
33 # LOADERS = boot
34
35 #
36 # Select the device drivers and filesystems you want
37 #
38 DEVICE_DRIVERS = blue ide keyboard null parallel serial
39 # DEVICE_DRIVERS = beep event floppy ide_test mouse sound test test1
40 FS_DRIVERS = vfat
41 # FS_DRIVERS = minix ext2 template
42 KERNEL_SERVICES = $(DEVICE_DRIVERS) $(FS_DRIVERS)
43
44 APPS = args hello shell test cat bench
45 # APPS = cmd
46
47 all: $(COMPONENTS) $(DLLS) $(SUBSYS) $(LOADERS) $(KERNEL_SERVICES) $(APPS)
48 .PHONY: all
49
50 clean: $(COMPONENTS:%=%_clean) $(DLLS:%=%_clean) $(LOADERS:%=%_clean) \
51 $(KERNEL_SERVICES:%=%_clean) $(SUBSYS:%=%_clean) $(APPS:%=%_clean)
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 # Applications
65 #
66 $(APPS): %:
67 make -C apps/$*
68
69 $(APPS:%=%_clean): %_clean:
70 make -C apps/$* clean
71
72 $(APPS:%=%_floppy): %_floppy:
73 make -C apps/$* floppy
74
75 $(APPS:%=%_dist): %_dist:
76 make -C apps/$* dist
77
78 .PHONY: $(APPS) $(APPS:%=%_clean) $(APPS:%=%_floppy) $(APPS:%=%_dist)
79
80 #
81 # Interfaces
82 #
83 iface_native:
84 make -C iface/native
85
86 iface_native_clean:
87 make -C iface/native clean
88
89 iface_native_floppy:
90
91 iface_native_dist:
92
93 .PHONY: iface_native iface_native_clean iface_native_floppy \
94 iface_native_dist
95
96 #
97 # Device driver rules
98 #
99 $(DEVICE_DRIVERS): %:
100 make -C services/dd/$*
101
102 $(DEVICE_DRIVERS:%=%_clean): %_clean:
103 make -C services/dd/$* clean
104
105 $(DEVICE_DRIVERS:%=%_floppy): %_floppy:
106 make -C services/dd/$* floppy
107
108 $(DEVICE_DRIVERS:%=%_dist): %_dist:
109 make -C services/dd/$* dist
110
111 .PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_clean) \
112 $(DEVICE_DRIVERS:%=%_floppy) $(DEVICE_DRIVERS:%=%_dist)
113
114 $(FS_DRIVERS): %:
115 make -C services/fs/$*
116
117 $(FS_DRIVERS:%=%_clean): %_clean:
118 make -C services/fs/$* clean
119
120 $(FS_DRIVERS:%=%_floppy): %_floppy:
121 make -C services/fs/$* floppy
122
123 $(FS_DRIVERS:%=%_dist): %_dist:
124 make -C services/fs/$* dist
125
126 .PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_floppy) \
127 $(FS_DRIVERS:%=%_dist)
128
129 #
130 # Kernel loaders
131 #
132
133 $(LOADERS): %:
134 make -C loaders/$*
135
136 $(LOADERS:%=%_clean): %_clean:
137 make -C loaders/$* clean
138
139 $(LOADERS:%=%_floppy): %_floppy:
140 make -C loaders/$* floppy
141
142 $(LOADERS:%=%_dist): %_dist:
143 make -C loaders/$* dist
144
145 .PHONY: $(LOADERS) $(LOADERS:%=%_clean) $(LOADERS:%=%_floppy) \
146 $(LOADERS:%=%_dist)
147
148 #
149 # Required system components
150 #
151
152 ntoskrnl:
153 make -C ntoskrnl
154
155 ntoskrnl_clean:
156 make -C ntoskrnl clean
157
158 ntoskrnl_floppy:
159 make -C ntoskrnl floppy
160
161 ntoskrnl_dist:
162 make -C ntoskrnl dist
163
164 .PHONY: ntoskrnl ntoskrnl_clean ntoskrnl_floppy ntoskrnl_dist
165
166 #
167 # Required DLLs
168 #
169
170 $(DLLS): %:
171 make -C lib/$*
172
173 $(DLLS:%=%_clean): %_clean:
174 make -C lib/$* clean
175
176 $(DLLS:%=%_floppy): %_floppy:
177 make -C lib/$* floppy
178
179 $(DLLS:%=%_dist): %_dist:
180 make -C lib/$* dist
181
182 .PHONY: $(DLLS) $(DLLS:%=%_clean) $(DLLS:%=%_floppy) $(DLLS:%=%_dist)
183
184 #
185 # Kernel Subsystems
186 #
187 $(SUBSYS): %:
188 make -C subsys/$*
189
190 $(SUBSYS:%=%_clean): %_clean:
191 make -C subsys/$* clean
192
193 $(SUBSYS:%=%_floppy): %_floppy:
194 make -C subsys/$* floppy
195
196 $(SUBSYS:%=%_dist): %_dist:
197 make -C subsys/$* dist
198
199 .PHONY: $(SUBSYS) $(SUBSYS:%=%_clean) $(SUBSYS:%=%_floppy) \
200 $(SUBSYS:%=%_dist)
201
202 #
203 # Make an install floppy
204 #
205
206 install: all
207 ./install.sh /mnt/hda1
208
209 make_floppy_dirs:
210 ifeq ($(DOSCLI),yes)
211 mkdir $(FLOPPY_DIR)\dlls
212 mkdir $(FLOPPY_DIR)\apps
213 mkdir $(FLOPPY_DIR)\drivers
214 mkdir $(FLOPPY_DIR)\subsys
215 else
216 mkdir $(FLOPPY_DIR)/dlls $(FLOPPY_DIR)/apps $(FLOPPY_DIR)/drivers
217 mkdir $(FLOPPY_DIR)/subsys
218 endif
219
220 .PHONY: make_floppy_dirs
221
222 autoexec_floppy: $(FLOPPY_DIR)/autoexec.bat
223
224 $(FLOPPY_DIR)/autoexec.bat: bootflop.bat
225 ifeq ($(DOSCLI),yes)
226 $(CP) bootflop.bat $(FLOPPY_DIR)\autoexec.bat
227 else
228 $(CP) bootflop.bat $(FLOPPY_DIR)/autoexec.bat
229 endif
230
231 #
232 # Make a distribution saveset
233 #
234
235 clean_dist_dir:
236 ifeq ($(DOSCLI),yes)
237 $(RM) $(DIST_DIR)\dlls\*.*
238 $(RM) $(DIST_DIR)\apps\*.*
239 $(RM) $(DIST_DIR)\drivers\*.*
240 $(RM) $(DIST_DIR)\subsys\*.*
241 $(RMDIR) $(DIST_DIR)\dlls
242 $(RMDIR) $(DIST_DIR)\apps
243 $(RMDIR) $(DIST_DIR)\drivers
244 $(RMDIR) $(DIST_DIR)\subsys
245 $(RMDIR) $(DIST_DIR)
246 else
247 $(RM) -r $(DIST_DIR)
248 endif
249
250 make_dist_dirs:
251 ifeq ($(DOSCLI),yes)
252 mkdir $(DIST_DIR)
253 mkdir $(DIST_DIR)\dlls
254 mkdir $(DIST_DIR)\apps
255 mkdir $(DIST_DIR)\drivers
256 mkdir $(DIST_DIR)\dlls
257 mkdir $(DIST_DIR)\subsys
258 else
259 mkdir $(DIST_DIR) $(DIST_DIR)/dlls $(DIST_DIR)/apps $(DIST_DIR)/drivers
260 mkdir $(DIST_DIR)/subsys
261 endif
262
263 .PHONY: clean_dist_dir make_dist_dirs
264