3 # ReactOS Operating System
7 # Path to the directory containing the root makefile
12 # Include details of the host OS configuration
14 include $(PATH_TO_TOP)/config
20 LINKER_SCRIPT := ntoskrnl.lnk
24 LINKER_SCRIPT := ntoskrnl.lnk
29 OBJECTS_KDBG := dbg/kdb.o dbg/kdb_keyboard.o dbg/rdebug.o \
30 dbg/i386/kdb_help.o dbg/kdb_stabs.o dbg/profile.o
35 ifeq ($(strip $(SDK_PATH_INC)),)
36 ASFLAGS += -I./include
37 CFLAGS += -I./include -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
39 ASFLAGS += -I./include -I$(SDK_PATH_INC)
40 CFLAGS += -I./include -I$(SDK_PATH_INC) -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
46 include $(PATH_TO_TOP)/rules.mak
49 TARGETNAME := ntoskrnl
51 OBJECTS_PATH = objects
56 $(TARGETNAME).nostrip.exe \
62 # Architecture specific Makefile
63 # Defines $(OBJECTS_ARCH)
65 include Makefile.$(ARCH)
82 # Run-Time Library (Rtl)
114 OBJECTS_RTL := $(filter-out $(RTL_EXCLUDE_FILTER), $(OBJECTS_RTL))
137 # Memory Manager (Mm)
211 # Object Manager (Ob)
220 # Process Manager (Ps)
235 # Executive Subsystem (Ex)
255 # Installable File System Run-Time Library (FsRtl)
281 # Configuration Manager (Registry)
290 # Debugger Support (Dbg)
307 # Local Procedure Call (Lpc)
321 # Nation Language Support Library (Nls)
322 OBJECTS_NLS = nls/nls.o
324 # Power Management (Po)
325 OBJECTS_PO = po/power.o
335 # Kernel Debugger Support (Kd)
343 DEP_OBJECTS := $(OBJECTS_NT) $(OBJECTS_MM) $(OBJECTS_ARCH) \
344 $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
345 $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
346 $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
347 $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
349 TAG_OBJECTS := $(join $(dir $(DEP_OBJECTS)),$(patsubst %.o, .%.TAG, $(notdir $(DEP_OBJECTS))))
352 # Include automatic dependancy tracking
354 DEP_EXCLUDE_FILTER := ex/napi.% nt/zw.%
355 include $(PATH_TO_TOP)/tools/depend.mk
368 mkdir $(OBJECTS_PATH)
370 $(OBJECTS_RESOURCE): $(TARGETNAME).rc bugcodes.rc $(PATH_TO_TOP)/include/reactos/resource.h
373 # Build subsystem intermediate objects
375 $(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
376 $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
378 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
381 -o $(OBJECTS_PATH)/io.o \
384 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
387 -o $(OBJECTS_PATH)/ke.o \
390 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
393 -o $(OBJECTS_PATH)/rtl.o \
396 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
399 -o $(OBJECTS_PATH)/mm.o \
402 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
405 -o $(OBJECTS_PATH)/ob.o \
408 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
411 -o $(OBJECTS_PATH)/ps.o \
414 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
417 -o $(OBJECTS_PATH)/ex.o \
420 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
423 -o $(OBJECTS_PATH)/fs.o \
426 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
429 -o $(OBJECTS_PATH)/se.o \
432 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
435 -o $(OBJECTS_PATH)/cm.o \
438 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
441 -o $(OBJECTS_PATH)/dbg.o \
444 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
447 -o $(OBJECTS_PATH)/ldr.o \
450 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
453 -o $(OBJECTS_PATH)/lpc.o \
456 $(OBJECTS_PATH)/nls.o: $(OBJECTS_NLS)
459 -o $(OBJECTS_PATH)/nls.o \
462 $(OBJECTS_PATH)/nt.o: $(OBJECTS_NT)
465 -o $(OBJECTS_PATH)/nt.o \
468 $(OBJECTS_PATH)/po.o: $(OBJECTS_PO)
471 -o $(OBJECTS_PATH)/po.o \
474 $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC)
477 -o $(OBJECTS_PATH)/cc.o \
480 $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD)
483 -o $(OBJECTS_PATH)/kd.o \
486 # Note: arch.o MUST be the first file!!!
488 $(OBJECTS_PATH)/arch.o \
489 $(OBJECTS_PATH)/ke.o \
490 $(OBJECTS_PATH)/cc.o \
491 $(OBJECTS_PATH)/cm.o \
492 $(OBJECTS_PATH)/dbg.o \
493 $(OBJECTS_PATH)/ex.o \
494 $(OBJECTS_PATH)/lpc.o \
495 $(OBJECTS_PATH)/fs.o \
496 $(OBJECTS_PATH)/io.o \
497 $(OBJECTS_PATH)/kd.o \
498 $(OBJECTS_PATH)/ldr.o \
499 $(OBJECTS_PATH)/mm.o \
500 $(OBJECTS_PATH)/nls.o \
501 $(OBJECTS_PATH)/nt.o \
502 $(OBJECTS_PATH)/ob.o \
503 $(OBJECTS_PATH)/po.o \
504 $(OBJECTS_PATH)/ps.o \
505 $(OBJECTS_PATH)/rtl.o \
506 $(OBJECTS_PATH)/se.o \
510 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(IE_DATA)
512 -Wl,-T,ntoskrnl.lnk \
517 -Wl,--subsystem,native \
518 -Wl,--image-base,0xc0000000 \
519 -Wl,--file-alignment,0x1000 \
520 -Wl,--section-alignment,0x1000 \
521 -Wl,--base-file,base.tmp \
522 $(TARGETNAME).o -lgcc \
523 $(DDK_PATH_LIB)/hal.a
526 --dllname $(TARGETNAME).exe \
527 --base-file base.tmp \
528 --output-exp temp.exp \
529 --def $(TARGETNAME).edf \
535 -Wl,-T,ntoskrnl.lnk \
537 -o $(TARGETNAME).nostrip.exe \
538 -Wl,--subsystem,native \
539 -Wl,--image-base,0xc0000000 \
540 -Wl,--file-alignment,0x1000 \
541 -Wl,--section-alignment,0x1000 \
543 $(TARGETNAME).o -lgcc \
544 $(DDK_PATH_LIB)/hal.a
547 $(TARGETNAME).exe: $(TARGETNAME).o $(LINKER_SCRIPT) $(DDK_PATH_LIB)/hal.a
549 -Wl,-T,$(LINKER_SCRIPT) \
554 -Wl,--subsystem,native \
555 -Wl,--image-base,0xc0000000 \
556 -Wl,--file-alignment,0x1000 \
557 -Wl,--section-alignment,0x1000 \
558 -Wl,--base-file,base.tmp \
559 $(TARGETNAME).o -lgcc \
560 $(DDK_PATH_LIB)/hal.a
563 --dllname $(TARGETNAME).exe \
564 --base-file base.tmp \
565 --output-exp temp.exp \
566 --def $(TARGETNAME).edf \
570 -Wl,-T,$(LINKER_SCRIPT) $(STRIP_FLAGS)\
574 -o $(TARGETNAME).exe \
575 -Wl,--subsystem,native \
576 -Wl,--image-base,0xc0000000 \
577 -Wl,--file-alignment,0x1000 \
578 -Wl,--section-alignment,0x1000 \
580 $(TARGETNAME).o -lgcc \
581 $(DDK_PATH_LIB)/hal.a
584 $(TARGETNAME).dbg.o: $(TARGETNAME).o
585 $(STRIP) --strip-debug -o $(TARGETNAME).dbg.o $(TARGETNAME).o
587 $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk
589 -Wl,-T,$(TARGETNAME).dbg.lnk \
594 -Wl,--subsystem,native \
595 -Wl,--image-base,0xc0000000 \
596 -Wl,--file-alignment,0x1000 \
597 -Wl,--section-alignment,0x1000 \
598 -Wl,--base-file,base.tmp \
599 $(TARGETNAME).dbg.o -lgcc \
600 $(DDK_PATH_LIB)/hal.a
603 --dllname $(TARGETNAME).dbg \
604 --base-file base.tmp \
605 --output-exp temp.exp \
606 --def $(TARGETNAME).edf \
610 -Wl,-T,$(TARGETNAME).dbg.lnk \
614 -o $(TARGETNAME).dbg \
615 -Wl,--subsystem,native \
616 -Wl,--image-base,0xc0000000 \
617 -Wl,--file-alignment,0x1000 \
618 -Wl,--section-alignment,0x1000 \
620 $(TARGETNAME).dbg.o -lgcc \
621 $(DDK_PATH_LIB)/hal.a
624 $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
625 $(RSYM) $(TARGETNAME).nostrip.exe $(TARGETNAME).sym
628 etags $(addprefix -i , $(TAG_OBJECTS))
630 ntoskrnl.map: $(TARGETNAME).nostrip.exe
631 $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > ntoskrnl.map
633 $(TARGETNAME).o: $(OBJECTS)
639 bugcodes.rc: ntoskrnl.mc
641 -H $(PATH_TO_TOP)/include/reactos/bugcodes.h \
645 $(DDK_PATH_LIB)/$(TARGETNAME).a: $(TARGETNAME).def
647 --dllname $(TARGETNAME).exe \
648 --def $(TARGETNAME).def \
649 --output-lib $(DDK_PATH_LIB)/$(TARGETNAME).a \
652 implib: $(DDK_PATH_LIB)/$(TARGETNAME).a
655 - $(RM) $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o \
656 ex/i386/*.o io/*.o ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o \
657 rtl/*.o rtl/i386/*.o se/*.o ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o \
658 lpc/*.o kd/*.o $(TARGETNAME).o junk.tmp base.tmp temp.exp \
659 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym ntoskrnl.map \
660 $(TARGETNAME).coff bugcodes.rc msg?????.bin $(DEP_FILES) \
666 install: all $(INSTALL_DIR)/system32/$(TARGETNAME).exe $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
668 $(INSTALL_DIR)/system32/$(TARGETNAME).exe: $(TARGETNAME).exe
669 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/system32/$(TARGETNAME).exe
671 $(INSTALL_DIR)/symbols/$(TARGETNAME).sym: $(TARGETNAME).sym
672 $(CP) $(TARGETNAME).sym $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
676 dist: $(DIST_DIR)/$(TARGETNAME).exe
678 $(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
679 $(CP) $(TARGETNAME).exe $(DIST_DIR)/$(TARGETNAME).exe
683 ex/napi.o: ex/napi.c $(PATH_TO_TOP)/include/ntdll/napi.h
685 ke/main.o: ke/main.c $(PATH_TO_TOP)/include/reactos/buildno.h
688 $(CC) $(CFLAGS) -c $< -o $@
690 $(CC) $(CFLAGS) -c $< -o $@
692 $(AS) $(ASFLAGS) -c $< -o $@
694 $(AS) $(ASFLAGS) -c $< -o $@
696 $(NASM_CMD) $(NFLAGS) $< -o $@
698 $(RC) $(RCINC) $< -o $@