Added multiboot support to ntoskrnl
[reactos.git] / reactos / ntoskrnl / Makefile
1 # $Id: Makefile,v 1.1 2000/10/07 13:41:50 dwelch Exp $
2 #
3 # ReactOS Operating System
4 #
5 PATH_TO_TOP = ..
6
7 TARGETNAME = ntoskrnl
8
9 OBJECTS_PATH = objects
10
11 ASFLAGS = -Iinclude
12 CFLAGS = -Iinclude -D__NTOSKRNL__ -DDBG -g -Wall -Werror
13
14 all: \
15 $(OBJECTS_PATH) \
16 $(TARGETNAME).nostrip.exe \
17 $(TARGETNAME).exe
18
19 # Hardware Abstraction Layer (Hal)
20 # Defines $(OBJECTS_HAL)
21 #
22 include hal/x86/sources
23
24 # System API (Nt/Zw)
25 OBJECTS_NT = \
26 nt/atom.o \
27 nt/channel.o \
28 nt/evtpair.o \
29 nt/mutant.o \
30 nt/misc.o \
31 nt/nt.o \
32 nt/ntevent.o \
33 nt/ntsem.o \
34 nt/nttimer.o \
35 nt/plugplay.o \
36 nt/profile.o \
37 nt/zw.o
38
39 # Run-Time Library (Rtl)
40 OBJECTS_RTL = \
41 rtl/bitmap.o \
42 rtl/ctype.o \
43 rtl/error.o \
44 rtl/interlck.o \
45 rtl/largeint.o \
46 rtl/mem.o \
47 rtl/memchr.o \
48 rtl/memcpy.o \
49 rtl/memmove.o \
50 rtl/memset.o \
51 rtl/nls.o \
52 rtl/qsort.o \
53 rtl/regio.o \
54 rtl/sprintf.o \
55 rtl/stdlib.o \
56 rtl/string.o \
57 rtl/swprintf.o \
58 rtl/time.o \
59 rtl/unicode.o \
60 rtl/wstring.o \
61 rtl/bitops.o \
62 rtl/memcmp.o
63
64 # Kernel (Ke)
65 # Note: head.o MUST be the first file!!!
66 OBJECTS_KE = \
67 ke/multiboot.o \
68 ke/apc.o \
69 ke/bug.o \
70 ke/catch.o \
71 ke/critical.o \
72 ke/dpc.o \
73 ke/error.o \
74 ke/event.o \
75 ke/gdt.o \
76 ke/idt.o \
77 ke/kernel.o \
78 ke/kqueue.o \
79 ke/ldt.o \
80 ke/main.o \
81 ke/mutex.o \
82 ke/process.o \
83 ke/sem.o \
84 ke/spinlock.o \
85 ke/timer.o \
86 ke/wait.o \
87 ke/kthread.o
88
89 OBJECTS_KE_I386 = \
90 ke/i386/exp.o \
91 ke/i386/irq.o \
92 ke/i386/irqhand.o \
93 ke/i386/thread.o \
94 ke/i386/usercall.o \
95 ke/i386/trap.o
96
97 # Memory Manager (Mm)
98 OBJECTS_MM = \
99 mm/aspace.o \
100 mm/cont.o \
101 mm/freelist.o \
102 mm/iospace.o \
103 mm/marea.o \
104 mm/mdl.o \
105 mm/mm.o \
106 mm/ncache.o \
107 mm/npool.o \
108 mm/pagfault.o \
109 mm/pagefile.o \
110 mm/paging.o \
111 mm/pool.o \
112 mm/ppool.o \
113 mm/section.o \
114 mm/virtual.o \
115 mm/pager.o \
116 mm/wset.o \
117 mm/mminit.o \
118 mm/kmap.o \
119 mm/mpw.o
120
121 OBJECTS_MM_I386 = \
122 mm/i386/memsafe.o \
123 mm/i386/page.o \
124 mm/i386/pfault.o
125
126 # I/O Subsystem (Io)
127 OBJECTS_IO = \
128 io/adapter.o \
129 io/buildirp.o \
130 io/cancel.o \
131 io/cleanup.o \
132 io/cntrller.o \
133 io/create.o \
134 io/device.o \
135 io/dir.o \
136 io/drvlck.o \
137 io/errlog.o \
138 io/error.o \
139 io/event.o \
140 io/file.o \
141 io/flush.o \
142 io/fs.o \
143 io/iocomp.o \
144 io/ioctrl.o \
145 io/iomgr.o \
146 io/irp.o \
147 io/lock.o \
148 io/mailslot.o \
149 io/mdl.o \
150 io/npipe.o \
151 io/page.o \
152 io/process.o \
153 io/queue.o \
154 io/resource.o \
155 io/rw.o \
156 io/share.o \
157 io/shutdown.o \
158 io/symlink.o \
159 io/timer.o \
160 io/vpb.o \
161 io/xhaldisp.o \
162 io/xhaldrv.o
163
164 # Object Manager (Ob)
165 OBJECTS_OB = \
166 ob/dirobj.o \
167 ob/handle.o \
168 ob/namespc.o \
169 ob/ntobj.o \
170 ob/object.o \
171 ob/security.o
172
173 # Process Manager (Ps)
174 OBJECTS_PS = \
175 ps/create.o \
176 ps/idle.o \
177 ps/kill.o \
178 ps/process.o \
179 ps/psmgr.o \
180 ps/thread.o \
181 ps/tinfo.o
182
183 # Executive Subsystem (Ex)
184 OBJECTS_EX = \
185 ex/callback.o \
186 ex/fmutex.o \
187 ex/init.o \
188 ex/interlck.o \
189 ex/list.o \
190 ex/locale.o \
191 ex/lookas.o \
192 ex/napi.o \
193 ex/power.o \
194 ex/resource.o \
195 ex/time.o \
196 ex/sysinfo.o \
197 ex/work.o \
198 ex/zone.o
199
200 # Installable File System Run-Time Library (FsRtl)
201 OBJECTS_FS = \
202 fs/dbcsname.o \
203 fs/filelock.o \
204 fs/mcb.o \
205 fs/mdl.o \
206 fs/name.o \
207 fs/notify.o \
208 fs/oplock.o \
209 fs/pool.o \
210 fs/tunnel.o \
211 fs/unc.o \
212 fs/util.o
213
214 # Security Subsystem
215 OBJECTS_SE = \
216 se/access.o \
217 se/acl.o \
218 se/luid.o \
219 se/priv.o \
220 se/sd.o \
221 se/semgr.o \
222 se/sid.o \
223 se/token.o
224
225 # Configuration Manager (Registry)
226 OBJECTS_CM = \
227 cm/registry.o
228
229 # Debugger Support (Dbg)
230 OBJECTS_DBG = \
231 dbg/brkpoint.o \
232 dbg/errinfo.o \
233 dbg/print.o
234
235 # Loader
236 OBJECTS_LDR = \
237 ldr/init.o \
238 ldr/loader.o \
239 ldr/resource.o \
240 ldr/rtl.o \
241 ldr/sysdll.o \
242 ldr/userldr.o
243
244 # Local Procedure Call (Lpc)
245 OBJECTS_LPC = \
246 lpc/close.o \
247 lpc/complete.o \
248 lpc/connect.o \
249 lpc/create.o \
250 lpc/listen.o \
251 lpc/port.o \
252 lpc/query.o \
253 lpc/queue.o \
254 lpc/receive.o \
255 lpc/reply.o \
256 lpc/send.o
257
258 # Nation Language Support Library (Nls)
259 OBJECTS_NLS = nls/nls.o
260
261 # Power Management (Po)
262 OBJECTS_PO = po/power.o
263
264 # Cache Manager (Cc)
265 OBJECTS_CC = \
266 cc/cacheman.o \
267 cc/view.o
268
269 # Kernel Debugger Support (Kd)
270 OBJECTS_KD = \
271 kd/kdebug.o \
272 kd/service.o
273
274 # Resources
275 OBJECTS_RESOURCE = \
276 $(TARGETNAME).coff
277
278 # IMPORTS/EXPORTS
279 IE_DATA = \
280 $(TARGETNAME).def \
281 $(TARGETNAME).edf
282
283 $(OBJECTS_PATH):
284 mkdir $(OBJECTS_PATH)
285
286 #
287 # Build subsystem intermediate objects
288 #
289 $(OBJECTS_PATH)/hal.o: $(OBJECTS_HAL)
290 $(LD) \
291 -r \
292 -o $(OBJECTS_PATH)/hal.o \
293 $(OBJECTS_HAL)
294
295 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
296 $(LD) \
297 -r \
298 -o $(OBJECTS_PATH)/io.o \
299 $(OBJECTS_IO)
300
301 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE) $(OBJECTS_KE_I386)
302 $(LD) \
303 -r \
304 -o $(OBJECTS_PATH)/ke.o \
305 $(OBJECTS_KE) \
306 $(OBJECTS_KE_I386)
307
308 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
309 $(LD) \
310 -r \
311 -o $(OBJECTS_PATH)/rtl.o \
312 $(OBJECTS_RTL)
313
314 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM) $(OBJECTS_MM_I386)
315 $(LD) \
316 -r \
317 -o $(OBJECTS_PATH)/mm.o \
318 $(OBJECTS_MM) \
319 $(OBJECTS_MM_I386)
320
321 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
322 $(LD) \
323 -r \
324 -o $(OBJECTS_PATH)/ob.o \
325 $(OBJECTS_OB)
326
327 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
328 $(LD) \
329 -r \
330 -o $(OBJECTS_PATH)/ps.o \
331 $(OBJECTS_PS)
332
333 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
334 $(LD) \
335 -r \
336 -o $(OBJECTS_PATH)/ex.o \
337 $(OBJECTS_EX)
338
339 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
340 $(LD) \
341 -r \
342 -o $(OBJECTS_PATH)/fs.o \
343 $(OBJECTS_FS)
344
345 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
346 $(LD) \
347 -r \
348 -o $(OBJECTS_PATH)/se.o \
349 $(OBJECTS_SE)
350
351 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
352 $(LD) \
353 -r \
354 -o $(OBJECTS_PATH)/cm.o \
355 $(OBJECTS_CM)
356
357 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
358 $(LD) \
359 -r \
360 -o $(OBJECTS_PATH)/dbg.o \
361 $(OBJECTS_DBG)
362
363 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
364 $(LD) \
365 -r \
366 -o $(OBJECTS_PATH)/ldr.o \
367 $(OBJECTS_LDR)
368
369 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
370 $(LD) \
371 -r \
372 -o $(OBJECTS_PATH)/lpc.o \
373 $(OBJECTS_LPC)
374
375 $(OBJECTS_PATH)/nls.o: $(OBJECTS_NLS)
376 $(LD) \
377 -r \
378 -o $(OBJECTS_PATH)/nls.o \
379 $(OBJECTS_NLS)
380
381 $(OBJECTS_PATH)/nt.o: $(OBJECTS_NT)
382 $(LD) \
383 -r \
384 -o $(OBJECTS_PATH)/nt.o \
385 $(OBJECTS_NT)
386
387 $(OBJECTS_PATH)/po.o: $(OBJECTS_PO)
388 $(LD) \
389 -r \
390 -o $(OBJECTS_PATH)/po.o \
391 $(OBJECTS_PO)
392
393 $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC)
394 $(LD) \
395 -r \
396 -o $(OBJECTS_PATH)/cc.o \
397 $(OBJECTS_CC)
398
399 $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD)
400 $(LD) \
401 -r \
402 -o $(OBJECTS_PATH)/kd.o \
403 $(OBJECTS_KD)
404
405 $(TARGETNAME).coff: $(TARGETNAME).rc ../include/reactos/resource.h
406
407
408 # Note: ke.o MUST be the first file!!!
409 OBJECTS = \
410 $(OBJECTS_PATH)/ke.o \
411 $(OBJECTS_PATH)/hal.o \
412 $(OBJECTS_PATH)/cc.o \
413 $(OBJECTS_PATH)/cm.o \
414 $(OBJECTS_PATH)/dbg.o \
415 $(OBJECTS_PATH)/ex.o \
416 $(OBJECTS_PATH)/lpc.o \
417 $(OBJECTS_PATH)/fs.o \
418 $(OBJECTS_PATH)/io.o \
419 $(OBJECTS_PATH)/kd.o \
420 $(OBJECTS_PATH)/ldr.o \
421 $(OBJECTS_PATH)/mm.o \
422 $(OBJECTS_PATH)/nls.o \
423 $(OBJECTS_PATH)/nt.o \
424 $(OBJECTS_PATH)/ob.o \
425 $(OBJECTS_PATH)/po.o \
426 $(OBJECTS_PATH)/ps.o \
427 $(OBJECTS_PATH)/rtl.o \
428 $(OBJECTS_PATH)/se.o \
429 $(OBJECTS_RESOURCE)
430
431
432 ifeq ($(DOSCLI),yes)
433 CLEAN_FILES = $(OBJECTS_PATH)\*.o cc\*.o cm\*.o dbg\*.o ex\*.o hal\x86\*.o io\*.o \
434 ke\*.o ldr\*.o mm\*.o nt\*.o ob\*.o ps\*.o rtl\*.o se\*.o \
435 ke\i386\*.o mm\i386\*.o fs\*.o po\*.o nls\*.o lpc\*.o \
436 kd\*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
437 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff
438 else
439 CLEAN_FILES = $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o ex/*.o hal/x86/*.o io/*.o \
440 ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o rtl/*.o se/*.o \
441 ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o lpc/*.o \
442 kd/*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
443 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff
444 endif
445
446
447 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(TARGETNAME).a $(IE_DATA)
448 $(CC) \
449 -Wl,-T,ntoskrnl.lnk \
450 -nostartfiles -nostdlib \
451 -mdll \
452 -o junk.tmp \
453 -Wl,--image-base,0xc0000000 \
454 -Wl,--file-alignment,0x1000 \
455 -Wl,--section-alignment,0x1000 \
456 -Wl,--base-file,base.tmp \
457 $(TARGETNAME).o -lgcc
458 - $(RM) junk.tmp
459 $(DLLTOOL) \
460 --dllname $(TARGETNAME).exe \
461 --base-file base.tmp \
462 --output-exp temp.exp \
463 --def $(TARGETNAME).edf \
464 --kill-at
465 - $(RM) base.tmp
466 $(CC) \
467 -nostartfiles -nostdlib \
468 -Wl,-T,ntoskrnl.lnk \
469 -mdll \
470 -o $(TARGETNAME).nostrip.exe \
471 -Wl,--image-base,0xc0000000 \
472 -Wl,--file-alignment,0x1000 \
473 -Wl,--section-alignment,0x1000 \
474 -Wl,temp.exp \
475 $(TARGETNAME).o -lgcc
476 - $(RM) temp.exp
477
478 $(TARGETNAME).exe: $(TARGETNAME).o $(TARGETNAME).a
479 $(STRIP) \
480 --strip-debug \
481 $(TARGETNAME).o
482 $(CC) -Wl,-T,ntoskrnl.lnk \
483 -nostartfiles -nostdlib \
484 -mdll \
485 -o junk.tmp \
486 -Wl,--image-base,0xc0000000 \
487 -Wl,--file-alignment,0x1000 \
488 -Wl,--section-alignment,0x1000 \
489 -Wl,--base-file,base.tmp \
490 $(TARGETNAME).o -lgcc
491 - $(RM) junk.tmp
492 $(DLLTOOL) \
493 --dllname $(TARGETNAME).exe \
494 --base-file base.tmp \
495 --output-exp temp.exp \
496 --def $(TARGETNAME).edf \
497 --kill-at
498 - $(RM) base.tmp
499 $(CC) -Wl,-T,ntoskrnl.lnk \
500 -nostartfiles -nostdlib \
501 -mdll \
502 -o $(TARGETNAME).exe \
503 -Wl,--image-base,0xc0000000 \
504 -Wl,--file-alignment,0x1000 \
505 -Wl,--section-alignment,0x1000 \
506 -Wl,temp.exp \
507 $(TARGETNAME).o -lgcc
508 - $(RM) temp.exp
509 $(NM) --numeric-sort $(TARGETNAME).exe > $(TARGETNAME).sym
510
511
512 $(TARGETNAME).o: $(OBJECTS)
513 $(LD) \
514 -r \
515 -o $(TARGETNAME).o \
516 $(OBJECTS)
517
518 $(TARGETNAME).a: $(TARGETNAME).def
519 $(DLLTOOL) \
520 --dllname $(TARGETNAME).exe \
521 --def $(TARGETNAME).def \
522 --output-lib $(TARGETNAME).a \
523 --kill-at
524
525 clean: $(CLEAN_FILES:%=%_clean)
526
527 $(CLEAN_FILES:%=%_clean): %_clean:
528 - $(RM) $*
529
530 .PHONY: clean $(CLEAN_FILES:%=%_clean)
531
532 install: $(FLOPPY_DIR)/$(TARGETNAME).exe
533
534 $(FLOPPY_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
535 $(CP) $(TARGETNAME).exe $(FLOPPY_DIR)/$(TARGETNAME).exe
536
537 .PHONY: dist
538
539 dist: ../$(DIST_DIR)/$(TARGETNAME).exe
540
541 ../$(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
542 $(CP) $(TARGETNAME).exe ../$(DIST_DIR)/$(TARGETNAME).exe
543
544 .PHONY: dist
545
546 ex/napi.o: ex/napi.c ../include/ntdll/napi.h
547
548 ke/main.o: ke/main.c ../include/reactos/buildno.h
549
550 include $(PATH_TO_TOP)/rules.mak
551
552 # EOF