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