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
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)
113 OBJECTS_RTL := $(filter-out $(RTL_EXCLUDE_FILTER), $(OBJECTS_RTL))
136 # Memory Manager (Mm)
210 # Object Manager (Ob)
219 # Process Manager (Ps)
234 # Executive Subsystem (Ex)
254 # Installable File System Run-Time Library (FsRtl)
280 # Configuration Manager (Registry)
289 # Debugger Support (Dbg)
306 # Local Procedure Call (Lpc)
320 # Nation Language Support Library (Nls)
321 OBJECTS_NLS = nls/nls.o
323 # Power Management (Po)
324 OBJECTS_PO = po/power.o
334 # Kernel Debugger Support (Kd)
339 kd/gdbstub.o kd/mda.o
341 DEP_OBJECTS := $(OBJECTS_NT) $(OBJECTS_MM) $(OBJECTS_ARCH) \
342 $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
343 $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
344 $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
345 $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
347 TAG_OBJECTS := $(join $(dir $(DEP_OBJECTS)),$(patsubst %.o, .%.TAG, $(notdir $(DEP_OBJECTS))))
350 # Include automatic dependancy tracking
352 DEP_EXCLUDE_FILTER := ex/napi.% nt/zw.%
353 include $(PATH_TO_TOP)/tools/depend.mk
366 mkdir $(OBJECTS_PATH)
368 $(OBJECTS_RESOURCE): $(TARGETNAME).rc bugcodes.rc $(PATH_TO_TOP)/include/reactos/resource.h
371 # Build subsystem intermediate objects
373 $(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
374 $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
376 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
379 -o $(OBJECTS_PATH)/io.o \
382 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
385 -o $(OBJECTS_PATH)/ke.o \
388 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
391 -o $(OBJECTS_PATH)/rtl.o \
394 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
397 -o $(OBJECTS_PATH)/mm.o \
400 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
403 -o $(OBJECTS_PATH)/ob.o \
406 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
409 -o $(OBJECTS_PATH)/ps.o \
412 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
415 -o $(OBJECTS_PATH)/ex.o \
418 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
421 -o $(OBJECTS_PATH)/fs.o \
424 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
427 -o $(OBJECTS_PATH)/se.o \
430 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
433 -o $(OBJECTS_PATH)/cm.o \
436 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
439 -o $(OBJECTS_PATH)/dbg.o \
442 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
445 -o $(OBJECTS_PATH)/ldr.o \
448 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
451 -o $(OBJECTS_PATH)/lpc.o \
454 $(OBJECTS_PATH)/nls.o: $(OBJECTS_NLS)
457 -o $(OBJECTS_PATH)/nls.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 # Note: arch.o MUST be the first file!!!
486 $(OBJECTS_PATH)/arch.o \
487 $(OBJECTS_PATH)/ke.o \
488 $(OBJECTS_PATH)/cc.o \
489 $(OBJECTS_PATH)/cm.o \
490 $(OBJECTS_PATH)/dbg.o \
491 $(OBJECTS_PATH)/ex.o \
492 $(OBJECTS_PATH)/lpc.o \
493 $(OBJECTS_PATH)/fs.o \
494 $(OBJECTS_PATH)/io.o \
495 $(OBJECTS_PATH)/kd.o \
496 $(OBJECTS_PATH)/ldr.o \
497 $(OBJECTS_PATH)/mm.o \
498 $(OBJECTS_PATH)/nls.o \
499 $(OBJECTS_PATH)/nt.o \
500 $(OBJECTS_PATH)/ob.o \
501 $(OBJECTS_PATH)/po.o \
502 $(OBJECTS_PATH)/ps.o \
503 $(OBJECTS_PATH)/rtl.o \
504 $(OBJECTS_PATH)/se.o \
508 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(IE_DATA)
510 -Wl,-T,ntoskrnl.lnk \
515 -Wl,--subsystem,native \
516 -Wl,--image-base,0xc0000000 \
517 -Wl,--file-alignment,0x1000 \
518 -Wl,--section-alignment,0x1000 \
519 -Wl,--base-file,base.tmp \
520 $(TARGETNAME).o -lgcc \
521 $(DDK_PATH_LIB)/hal.a
524 --dllname $(TARGETNAME).exe \
525 --base-file base.tmp \
526 --output-exp temp.exp \
527 --def $(TARGETNAME).edf \
533 -Wl,-T,ntoskrnl.lnk \
535 -o $(TARGETNAME).nostrip.exe \
536 -Wl,--subsystem,native \
537 -Wl,--image-base,0xc0000000 \
538 -Wl,--file-alignment,0x1000 \
539 -Wl,--section-alignment,0x1000 \
541 $(TARGETNAME).o -lgcc \
542 $(DDK_PATH_LIB)/hal.a
545 $(TARGETNAME).exe: $(TARGETNAME).o $(LINKER_SCRIPT) $(DDK_PATH_LIB)/hal.a
547 -Wl,-T,$(LINKER_SCRIPT) \
552 -Wl,--subsystem,native \
553 -Wl,--image-base,0xc0000000 \
554 -Wl,--file-alignment,0x1000 \
555 -Wl,--section-alignment,0x1000 \
556 -Wl,--base-file,base.tmp \
557 $(TARGETNAME).o -lgcc \
558 $(DDK_PATH_LIB)/hal.a
561 --dllname $(TARGETNAME).exe \
562 --base-file base.tmp \
563 --output-exp temp.exp \
564 --def $(TARGETNAME).edf \
568 -Wl,-T,$(LINKER_SCRIPT) $(STRIP_FLAGS)\
572 -o $(TARGETNAME).exe \
573 -Wl,--subsystem,native \
574 -Wl,--image-base,0xc0000000 \
575 -Wl,--file-alignment,0x1000 \
576 -Wl,--section-alignment,0x1000 \
578 $(TARGETNAME).o -lgcc \
579 $(DDK_PATH_LIB)/hal.a
582 $(TARGETNAME).dbg.o: $(TARGETNAME).o
583 $(STRIP) --strip-debug -o $(TARGETNAME).dbg.o $(TARGETNAME).o
585 $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk
587 -Wl,-T,$(TARGETNAME).dbg.lnk \
592 -Wl,--subsystem,native \
593 -Wl,--image-base,0xc0000000 \
594 -Wl,--file-alignment,0x1000 \
595 -Wl,--section-alignment,0x1000 \
596 -Wl,--base-file,base.tmp \
597 $(TARGETNAME).dbg.o -lgcc \
598 $(DDK_PATH_LIB)/hal.a
601 --dllname $(TARGETNAME).dbg \
602 --base-file base.tmp \
603 --output-exp temp.exp \
604 --def $(TARGETNAME).edf \
608 -Wl,-T,$(TARGETNAME).dbg.lnk \
612 -o $(TARGETNAME).dbg \
613 -Wl,--subsystem,native \
614 -Wl,--image-base,0xc0000000 \
615 -Wl,--file-alignment,0x1000 \
616 -Wl,--section-alignment,0x1000 \
618 $(TARGETNAME).dbg.o -lgcc \
619 $(DDK_PATH_LIB)/hal.a
622 $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
623 $(RSYM) $(TARGETNAME).nostrip.exe $(TARGETNAME).sym
626 etags $(addprefix -i , $(TAG_OBJECTS))
628 ntoskrnl.map: $(TARGETNAME).nostrip.exe
629 $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > ntoskrnl.map
631 $(TARGETNAME).o: $(OBJECTS)
637 bugcodes.rc: ntoskrnl.mc
639 -H $(PATH_TO_TOP)/include/reactos/bugcodes.h \
643 $(DDK_PATH_LIB)/$(TARGETNAME).a: $(TARGETNAME).def
645 --dllname $(TARGETNAME).exe \
646 --def $(TARGETNAME).def \
647 --output-lib $(DDK_PATH_LIB)/$(TARGETNAME).a \
650 implib: $(DDK_PATH_LIB)/$(TARGETNAME).a
653 - $(RM) $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o \
654 ex/i386/*.o io/*.o ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o \
655 rtl/*.o se/*.o ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o \
656 lpc/*.o kd/*.o $(TARGETNAME).o junk.tmp base.tmp temp.exp \
657 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym ntoskrnl.map \
658 $(TARGETNAME).coff bugcodes.rc msg?????.bin $(DEP_FILES) \
664 install: all $(INSTALL_DIR)/system32/$(TARGETNAME).exe $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
666 $(INSTALL_DIR)/system32/$(TARGETNAME).exe: $(TARGETNAME).exe
667 $(CP) $(TARGETNAME).exe $(INSTALL_DIR)/system32/$(TARGETNAME).exe
669 $(INSTALL_DIR)/symbols/$(TARGETNAME).sym: $(TARGETNAME).sym
670 $(CP) $(TARGETNAME).sym $(INSTALL_DIR)/symbols/$(TARGETNAME).sym
674 dist: $(DIST_DIR)/$(TARGETNAME).exe
676 $(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
677 $(CP) $(TARGETNAME).exe $(DIST_DIR)/$(TARGETNAME).exe
681 ex/napi.o: ex/napi.c $(PATH_TO_TOP)/include/ntdll/napi.h
683 ke/main.o: ke/main.c $(PATH_TO_TOP)/include/reactos/buildno.h
686 $(CC) $(CFLAGS) -c $< -o $@
688 $(CC) $(CFLAGS) -c $< -o $@
690 $(AS) $(ASFLAGS) -c $< -o $@
692 $(AS) $(ASFLAGS) -c $< -o $@
694 $(NASM_CMD) $(NFLAGS) $< -o $@
696 $(RC) $(RCINC) $< -o $@