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
43 # ASFLAGS += -D__USE_W32API -D_NTOSKRNL_
44 # CFLAGS += -D__USE_W32API -D_NTOSKRNL_
46 # require os code to explicitly request A/W version of structs/functions
47 CFLAGS += -D_DISABLE_TIDENTS
52 include $(PATH_TO_TOP)/rules.mak
55 TARGETNAME := ntoskrnl
57 OBJECTS_PATH = objects
62 $(TARGETNAME).nostrip.exe \
68 # Architecture specific Makefile
69 # Defines $(OBJECTS_ARCH)
71 include Makefile.$(ARCH)
88 # Run-Time Library (Rtl)
114 OBJECTS_RTL := $(filter-out $(RTL_EXCLUDE_FILTER), $(OBJECTS_RTL))
137 # Memory Manager (Mm)
212 # Object Manager (Ob)
222 # Process Manager (Ps)
237 # Executive Subsystem (Ex)
257 # Installable File System Run-Time Library (FsRtl)
284 # Configuration Manager (Registry)
293 # Debugger Support (Dbg)
310 # Local Procedure Call (Lpc)
324 # Power Management (Po)
325 OBJECTS_PO = po/power.o
335 # Kernel Debugger Support (Kd)
347 DEP_OBJECTS := $(OBJECTS_NT) $(OBJECTS_MM) $(OBJECTS_ARCH) \
348 $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
349 $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
350 $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
351 $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
353 TAG_OBJECTS := $(join $(dir $(DEP_OBJECTS)),$(patsubst %.o, .%.TAG, $(notdir $(DEP_OBJECTS))))
356 # Include automatic dependancy tracking
358 DEP_EXCLUDE_FILTER := ex/napi.% nt/zw.%
359 include $(PATH_TO_TOP)/tools/depend.mk
372 mkdir $(OBJECTS_PATH)
374 $(OBJECTS_RESOURCE): $(TARGETNAME).rc bugcodes.rc $(PATH_TO_TOP)/include/reactos/resource.h
377 # Build subsystem intermediate objects
379 $(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
380 $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
382 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
385 -o $(OBJECTS_PATH)/io.o \
388 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
391 -o $(OBJECTS_PATH)/ke.o \
394 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
397 -o $(OBJECTS_PATH)/rtl.o \
400 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
403 -o $(OBJECTS_PATH)/mm.o \
406 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
409 -o $(OBJECTS_PATH)/ob.o \
412 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
415 -o $(OBJECTS_PATH)/ps.o \
418 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
421 -o $(OBJECTS_PATH)/ex.o \
424 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
427 -o $(OBJECTS_PATH)/fs.o \
430 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
433 -o $(OBJECTS_PATH)/se.o \
436 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
439 -o $(OBJECTS_PATH)/cm.o \
442 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
445 -o $(OBJECTS_PATH)/dbg.o \
448 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
451 -o $(OBJECTS_PATH)/ldr.o \
454 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
457 -o $(OBJECTS_PATH)/lpc.o \
460 $(OBJECTS_PATH)/nt.o: $(OBJECTS_NT)
463 -o $(OBJECTS_PATH)/nt.o \
466 $(OBJECTS_PATH)/po.o: $(OBJECTS_PO)
469 -o $(OBJECTS_PATH)/po.o \
472 $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC)
475 -o $(OBJECTS_PATH)/cc.o \
478 $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD)
481 -o $(OBJECTS_PATH)/kd.o \
484 $(OBJECTS_PATH)/inbv.o: $(OBJECTS_INBV)
487 -o $(OBJECTS_PATH)/inbv.o \
490 # Note: arch.o MUST be the first file!!!
492 $(OBJECTS_PATH)/arch.o \
493 $(OBJECTS_PATH)/ke.o \
494 $(OBJECTS_PATH)/cc.o \
495 $(OBJECTS_PATH)/cm.o \
496 $(OBJECTS_PATH)/dbg.o \
497 $(OBJECTS_PATH)/ex.o \
498 $(OBJECTS_PATH)/lpc.o \
499 $(OBJECTS_PATH)/fs.o \
500 $(OBJECTS_PATH)/io.o \
501 $(OBJECTS_PATH)/kd.o \
502 $(OBJECTS_PATH)/ldr.o \
503 $(OBJECTS_PATH)/mm.o \
504 $(OBJECTS_PATH)/nt.o \
505 $(OBJECTS_PATH)/ob.o \
506 $(OBJECTS_PATH)/po.o \
507 $(OBJECTS_PATH)/ps.o \
508 $(OBJECTS_PATH)/rtl.o \
509 $(OBJECTS_PATH)/se.o \
510 $(OBJECTS_PATH)/inbv.o \
514 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(IE_DATA) $(SDK_PATH_LIB)/string.a $(SDK_PATH_LIB)/rosrtl.a
516 -Wl,-T,ntoskrnl.lnk \
521 -Wl,--subsystem,native \
522 -Wl,--image-base,0xc0000000 \
523 -Wl,--file-alignment,0x1000 \
524 -Wl,--section-alignment,0x1000 \
525 -Wl,--entry,_NtProcessStartup \
526 -Wl,--base-file,base.tmp \
527 $(TARGETNAME).o -lgcc \
528 $(SDK_PATH_LIB)/string.a \
529 $(SDK_PATH_LIB)/rosrtl.a \
530 $(DDK_PATH_LIB)/hal.a
533 --dllname $(TARGETNAME).exe \
534 --base-file base.tmp \
535 --output-exp temp.exp \
536 --def $(TARGETNAME).edf \
542 -Wl,-T,ntoskrnl.lnk \
544 -o $(TARGETNAME).nostrip.exe \
545 -Wl,--subsystem,native \
546 -Wl,--image-base,0xc0000000 \
547 -Wl,--file-alignment,0x1000 \
548 -Wl,--section-alignment,0x1000 \
549 -Wl,--entry,_NtProcessStartup \
551 $(TARGETNAME).o -lgcc \
552 $(SDK_PATH_LIB)/string.a \
553 $(SDK_PATH_LIB)/rosrtl.a \
554 $(DDK_PATH_LIB)/hal.a
557 $(TARGETNAME).exe: $(TARGETNAME).o $(LINKER_SCRIPT) $(DDK_PATH_LIB)/hal.a $(SDK_PATH_LIB)/string.a $(SDK_PATH_LIB)/rosrtl.a
559 -Wl,-T,$(LINKER_SCRIPT) \
564 -Wl,--subsystem,native \
565 -Wl,--image-base,0xc0000000 \
566 -Wl,--file-alignment,0x1000 \
567 -Wl,--section-alignment,0x1000 \
568 -Wl,--entry,_NtProcessStartup \
569 -Wl,--base-file,base.tmp \
570 $(TARGETNAME).o -lgcc \
571 $(SDK_PATH_LIB)/string.a \
572 $(SDK_PATH_LIB)/rosrtl.a \
573 $(DDK_PATH_LIB)/hal.a
576 --dllname $(TARGETNAME).exe \
577 --base-file base.tmp \
578 --output-exp temp.exp \
579 --def $(TARGETNAME).edf \
583 -Wl,-T,$(LINKER_SCRIPT) $(STRIP_FLAGS)\
587 -o $(TARGETNAME).exe \
588 -Wl,--subsystem,native \
589 -Wl,--image-base,0xc0000000 \
590 -Wl,--file-alignment,0x1000 \
591 -Wl,--section-alignment,0x1000 \
592 -Wl,--entry,_NtProcessStartup \
594 $(TARGETNAME).o -lgcc \
595 $(SDK_PATH_LIB)/string.a \
596 $(SDK_PATH_LIB)/rosrtl.a \
597 $(DDK_PATH_LIB)/hal.a
600 $(TARGETNAME).dbg.o: $(TARGETNAME).o
601 $(STRIP) --strip-debug -o $(TARGETNAME).dbg.o $(TARGETNAME).o
603 $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk $(DDK_PATH_LIB)/hal.a $(SDK_PATH_LIB)/string.a $(SDK_PATH_LIB)/rosrtl.a
605 -Wl,-T,$(TARGETNAME).dbg.lnk \
610 -Wl,--subsystem,native \
611 -Wl,--image-base,0xc0000000 \
612 -Wl,--file-alignment,0x1000 \
613 -Wl,--section-alignment,0x1000 \
614 -Wl,--entry,_NtProcessStartup \
615 -Wl,--base-file,base.tmp \
616 $(TARGETNAME).dbg.o -lgcc \
617 $(SDK_PATH_LIB)/string.a \
618 $(SDK_PATH_LIB)/rosrtl.a \
619 $(DDK_PATH_LIB)/hal.a
622 --dllname $(TARGETNAME).dbg \
623 --base-file base.tmp \
624 --output-exp temp.exp \
625 --def $(TARGETNAME).edf \
629 -Wl,-T,$(TARGETNAME).dbg.lnk \
633 -o $(TARGETNAME).dbg \
634 -Wl,--subsystem,native \
635 -Wl,--image-base,0xc0000000 \
636 -Wl,--file-alignment,0x1000 \
637 -Wl,--section-alignment,0x1000 \
638 -Wl,--entry,_NtProcessStartup \
640 $(TARGETNAME).dbg.o -lgcc \
641 $(SDK_PATH_LIB)/string.a \
642 $(SDK_PATH_LIB)/rosrtl.a \
643 $(DDK_PATH_LIB)/hal.a
646 $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
647 $(RSYM) $(TARGETNAME).nostrip.exe $(TARGETNAME).sym
650 etags $(addprefix -i , $(TAG_OBJECTS))
652 ntoskrnl.map: $(TARGETNAME).nostrip.exe
653 $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > ntoskrnl.map
655 $(TARGETNAME).o: $(OBJECTS)
661 bugcodes.rc: ntoskrnl.mc
663 -H $(PATH_TO_TOP)/include/reactos/bugcodes.h \
667 $(DDK_PATH_LIB)/$(TARGETNAME).a: $(TARGETNAME).def
669 --dllname $(TARGETNAME).exe \
670 --def $(TARGETNAME).def \
671 --output-lib $(DDK_PATH_LIB)/$(TARGETNAME).a \
674 implib: $(DDK_PATH_LIB)/$(TARGETNAME).a
677 - $(RM) $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o \
678 ex/i386/*.o inbv/*.o io/*.o ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o \
679 rtl/*.o rtl/i386/*.o se/*.o ke/i386/*.o mm/i386/*.o fs/*.o po/*.o \
680 lpc/*.o kd/*.o $(TARGETNAME).o junk.tmp base.tmp temp.exp \
681 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym ntoskrnl.map \
682 $(TARGETNAME).coff bugcodes.rc msg?????.bin $(DEP_FILES) \
688 ifneq ($(BOOTCD_INSTALL),)
690 install: all $(INSTALL_DIR)/$(TARGETNAME).exe
692 $(INSTALL_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
693 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/$(TARGETNAME).exe
695 else # BOOTCD_INSTALL
697 install: all $(INSTALL_DIR)/system32/$(TARGETNAME).exe $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
699 $(INSTALL_DIR)/system32/$(TARGETNAME).exe: $(TARGETNAME).exe
700 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/system32/$(TARGETNAME).exe
702 $(INSTALL_DIR)/symbols/$(TARGETNAME).sym: $(TARGETNAME).sym
703 $(CP) $(TARGETNAME).sym $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
705 endif # BOOTCD_INSTALL
710 dist: $(DIST_DIR)/$(TARGETNAME).exe
712 $(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
713 $(CP) $(TARGETNAME).exe $(DIST_DIR)/$(TARGETNAME).exe
717 bootcd: all $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe
719 $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe: $(TARGETNAME).exe
720 $(CP) $(TARGETNAME).exe $(BOOTCD_DIR)/reactos/$(TARGETNAME).exe
725 ex/napi.o: ex/napi.c $(PATH_TO_TOP)/include/ntdll/napi.h
727 ke/main.o: ke/main.c $(PATH_TO_TOP)/include/reactos/buildno.h
730 $(CC) $(CFLAGS) -c $< -o $@
732 $(CC) $(CFLAGS) -c $< -o $@
734 $(AS) $(ASFLAGS) -c $< -o $@
736 $(AS) $(ASFLAGS) -c $< -o $@
738 $(NASM_CMD) $(NFLAGS) $< -o $@
740 $(RC) $(RCINC) $< -o $@