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)
221 # Process Manager (Ps)
236 # Executive Subsystem (Ex)
256 # Installable File System Run-Time Library (FsRtl)
282 # Configuration Manager (Registry)
291 # Debugger Support (Dbg)
308 # Local Procedure Call (Lpc)
322 # Nation Language Support Library (Nls)
323 OBJECTS_NLS = nls/nls.o
325 # Power Management (Po)
326 OBJECTS_PO = po/power.o
336 # Kernel Debugger Support (Kd)
344 DEP_OBJECTS := $(OBJECTS_NT) $(OBJECTS_MM) $(OBJECTS_ARCH) \
345 $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
346 $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
347 $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
348 $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
350 TAG_OBJECTS := $(join $(dir $(DEP_OBJECTS)),$(patsubst %.o, .%.TAG, $(notdir $(DEP_OBJECTS))))
353 # Include automatic dependancy tracking
355 DEP_EXCLUDE_FILTER := ex/napi.% nt/zw.%
356 include $(PATH_TO_TOP)/tools/depend.mk
369 mkdir $(OBJECTS_PATH)
371 $(OBJECTS_RESOURCE): $(TARGETNAME).rc bugcodes.rc $(PATH_TO_TOP)/include/reactos/resource.h
374 # Build subsystem intermediate objects
376 $(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
377 $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
379 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
382 -o $(OBJECTS_PATH)/io.o \
385 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
388 -o $(OBJECTS_PATH)/ke.o \
391 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
394 -o $(OBJECTS_PATH)/rtl.o \
397 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
400 -o $(OBJECTS_PATH)/mm.o \
403 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
406 -o $(OBJECTS_PATH)/ob.o \
409 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
412 -o $(OBJECTS_PATH)/ps.o \
415 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
418 -o $(OBJECTS_PATH)/ex.o \
421 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
424 -o $(OBJECTS_PATH)/fs.o \
427 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
430 -o $(OBJECTS_PATH)/se.o \
433 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
436 -o $(OBJECTS_PATH)/cm.o \
439 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
442 -o $(OBJECTS_PATH)/dbg.o \
445 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
448 -o $(OBJECTS_PATH)/ldr.o \
451 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
454 -o $(OBJECTS_PATH)/lpc.o \
457 $(OBJECTS_PATH)/nls.o: $(OBJECTS_NLS)
460 -o $(OBJECTS_PATH)/nls.o \
463 $(OBJECTS_PATH)/nt.o: $(OBJECTS_NT)
466 -o $(OBJECTS_PATH)/nt.o \
469 $(OBJECTS_PATH)/po.o: $(OBJECTS_PO)
472 -o $(OBJECTS_PATH)/po.o \
475 $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC)
478 -o $(OBJECTS_PATH)/cc.o \
481 $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD)
484 -o $(OBJECTS_PATH)/kd.o \
487 # Note: arch.o MUST be the first file!!!
489 $(OBJECTS_PATH)/arch.o \
490 $(OBJECTS_PATH)/ke.o \
491 $(OBJECTS_PATH)/cc.o \
492 $(OBJECTS_PATH)/cm.o \
493 $(OBJECTS_PATH)/dbg.o \
494 $(OBJECTS_PATH)/ex.o \
495 $(OBJECTS_PATH)/lpc.o \
496 $(OBJECTS_PATH)/fs.o \
497 $(OBJECTS_PATH)/io.o \
498 $(OBJECTS_PATH)/kd.o \
499 $(OBJECTS_PATH)/ldr.o \
500 $(OBJECTS_PATH)/mm.o \
501 $(OBJECTS_PATH)/nls.o \
502 $(OBJECTS_PATH)/nt.o \
503 $(OBJECTS_PATH)/ob.o \
504 $(OBJECTS_PATH)/po.o \
505 $(OBJECTS_PATH)/ps.o \
506 $(OBJECTS_PATH)/rtl.o \
507 $(OBJECTS_PATH)/se.o \
511 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(IE_DATA)
513 -Wl,-T,ntoskrnl.lnk \
518 -Wl,--subsystem,native \
519 -Wl,--image-base,0xc0000000 \
520 -Wl,--file-alignment,0x1000 \
521 -Wl,--section-alignment,0x1000 \
522 -Wl,--entry,_NtProcessStartup \
523 -Wl,--base-file,base.tmp \
524 $(TARGETNAME).o -lgcc \
525 $(DDK_PATH_LIB)/hal.a
528 --dllname $(TARGETNAME).exe \
529 --base-file base.tmp \
530 --output-exp temp.exp \
531 --def $(TARGETNAME).edf \
537 -Wl,-T,ntoskrnl.lnk \
539 -o $(TARGETNAME).nostrip.exe \
540 -Wl,--subsystem,native \
541 -Wl,--image-base,0xc0000000 \
542 -Wl,--file-alignment,0x1000 \
543 -Wl,--section-alignment,0x1000 \
544 -Wl,--entry,_NtProcessStartup \
546 $(TARGETNAME).o -lgcc \
547 $(DDK_PATH_LIB)/hal.a
550 $(TARGETNAME).exe: $(TARGETNAME).o $(LINKER_SCRIPT) $(DDK_PATH_LIB)/hal.a
552 -Wl,-T,$(LINKER_SCRIPT) \
557 -Wl,--subsystem,native \
558 -Wl,--image-base,0xc0000000 \
559 -Wl,--file-alignment,0x1000 \
560 -Wl,--section-alignment,0x1000 \
561 -Wl,--entry,_NtProcessStartup \
562 -Wl,--base-file,base.tmp \
563 $(TARGETNAME).o -lgcc \
564 $(DDK_PATH_LIB)/hal.a
567 --dllname $(TARGETNAME).exe \
568 --base-file base.tmp \
569 --output-exp temp.exp \
570 --def $(TARGETNAME).edf \
574 -Wl,-T,$(LINKER_SCRIPT) $(STRIP_FLAGS)\
578 -o $(TARGETNAME).exe \
579 -Wl,--subsystem,native \
580 -Wl,--image-base,0xc0000000 \
581 -Wl,--file-alignment,0x1000 \
582 -Wl,--section-alignment,0x1000 \
583 -Wl,--entry,_NtProcessStartup \
585 $(TARGETNAME).o -lgcc \
586 $(DDK_PATH_LIB)/hal.a
589 $(TARGETNAME).dbg.o: $(TARGETNAME).o
590 $(STRIP) --strip-debug -o $(TARGETNAME).dbg.o $(TARGETNAME).o
592 $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk
594 -Wl,-T,$(TARGETNAME).dbg.lnk \
599 -Wl,--subsystem,native \
600 -Wl,--image-base,0xc0000000 \
601 -Wl,--file-alignment,0x1000 \
602 -Wl,--section-alignment,0x1000 \
603 -Wl,--entry,_NtProcessStartup \
604 -Wl,--base-file,base.tmp \
605 $(TARGETNAME).dbg.o -lgcc \
606 $(DDK_PATH_LIB)/hal.a
609 --dllname $(TARGETNAME).dbg \
610 --base-file base.tmp \
611 --output-exp temp.exp \
612 --def $(TARGETNAME).edf \
616 -Wl,-T,$(TARGETNAME).dbg.lnk \
620 -o $(TARGETNAME).dbg \
621 -Wl,--subsystem,native \
622 -Wl,--image-base,0xc0000000 \
623 -Wl,--file-alignment,0x1000 \
624 -Wl,--section-alignment,0x1000 \
625 -Wl,--entry,_NtProcessStartup \
627 $(TARGETNAME).dbg.o -lgcc \
628 $(DDK_PATH_LIB)/hal.a
631 $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
632 $(RSYM) $(TARGETNAME).nostrip.exe $(TARGETNAME).sym
635 etags $(addprefix -i , $(TAG_OBJECTS))
637 ntoskrnl.map: $(TARGETNAME).nostrip.exe
638 $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > ntoskrnl.map
640 $(TARGETNAME).o: $(OBJECTS)
646 bugcodes.rc: ntoskrnl.mc
648 -H $(PATH_TO_TOP)/include/reactos/bugcodes.h \
652 $(DDK_PATH_LIB)/$(TARGETNAME).a: $(TARGETNAME).def
654 --dllname $(TARGETNAME).exe \
655 --def $(TARGETNAME).def \
656 --output-lib $(DDK_PATH_LIB)/$(TARGETNAME).a \
659 implib: $(DDK_PATH_LIB)/$(TARGETNAME).a
662 - $(RM) $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o \
663 ex/i386/*.o io/*.o ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o \
664 rtl/*.o rtl/i386/*.o se/*.o ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o \
665 lpc/*.o kd/*.o $(TARGETNAME).o junk.tmp base.tmp temp.exp \
666 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym ntoskrnl.map \
667 $(TARGETNAME).coff bugcodes.rc msg?????.bin $(DEP_FILES) \
673 ifneq ($(BOOTCD_INSTALL),)
675 install: all $(INSTALL_DIR)/$(TARGETNAME).exe
677 $(INSTALL_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
678 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/$(TARGETNAME).exe
680 else # BOOTCD_INSTALL
682 install: all $(INSTALL_DIR)/system32/$(TARGETNAME).exe $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
684 $(INSTALL_DIR)/system32/$(TARGETNAME).exe: $(TARGETNAME).exe
685 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/system32/$(TARGETNAME).exe
687 $(INSTALL_DIR)/symbols/$(TARGETNAME).sym: $(TARGETNAME).sym
688 $(CP) $(TARGETNAME).sym $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
690 endif # BOOTCD_INSTALL
695 dist: $(DIST_DIR)/$(TARGETNAME).exe
697 $(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
698 $(CP) $(TARGETNAME).exe $(DIST_DIR)/$(TARGETNAME).exe
702 bootcd: all $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe
704 $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe: $(TARGETNAME).exe
705 $(CP) $(TARGETNAME).exe $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe
710 ex/napi.o: ex/napi.c $(PATH_TO_TOP)/include/ntdll/napi.h
712 ke/main.o: ke/main.c $(PATH_TO_TOP)/include/reactos/buildno.h
715 $(CC) $(CFLAGS) -c $< -o $@
717 $(CC) $(CFLAGS) -c $< -o $@
719 $(AS) $(ASFLAGS) -c $< -o $@
721 $(AS) $(ASFLAGS) -c $< -o $@
723 $(NASM_CMD) $(NFLAGS) $< -o $@
725 $(RC) $(RCINC) $< -o $@