1 # $Id: Makefile,v 1.140 2004/08/26 16:04:49 blight Exp $
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
28 ifeq ($(OPTIMIZED
), 1)
29 CFLAGS_OPT
:= -O2
-Wno-strict-aliasing
35 OBJECTS_KDBG
:= dbg
/kdb.o dbg
/kdb_serial.o dbg
/kdb_keyboard.o dbg
/rdebug.o \
36 dbg
/i386
/kdb_help.o dbg
/kdb_stabs.o dbg
/kdb_symbols.o dbg
/profile.o \
37 ..
/dk
/w32
/lib
/kjs.a dbg
/i386
/i386-dis.o
38 CFLAGS
+= -I..
/lib
/kjs
/include
47 ifeq ($(strip $(SDK_PATH_INC
)),)
48 ASFLAGS
+= -I.
/include
49 CFLAGS
+= -I.
/include -D__NTOSKRNL__
$(CFLAGS_DBG
) -Wall
-Werror
$(CFLAGS_OPT
)
51 ASFLAGS
+= -I.
/include -I
$(SDK_PATH_INC
)
52 CFLAGS
+= -I.
/include -I
$(SDK_PATH_INC
) -D__NTOSKRNL__
$(CFLAGS_DBG
) -Wall
-Werror
$(CFLAGS_OPT
)
55 # ASFLAGS += -D__USE_W32API -D_NTOSKRNL_
56 # CFLAGS += -D__USE_W32API -D_NTOSKRNL_
58 # require os code to explicitly request A/W version of structs/functions
59 CFLAGS
+= -D_DISABLE_TIDENTS
61 # no native setjmp/longjmp in the kernel
62 CFLAGS
+= -D_SEH_NO_NATIVE_NLG
64 CFLAGS
+= $(STD_CFLAGS
)
65 ASFLAGS
+= $(STD_ASFLAGS
)
66 RCFLAGS
+= $(STD_RCFLAGS
)
71 include $(PATH_TO_TOP
)/rules.mak
74 # Javascript extension for kdb
77 TARGETNAME
:= ntoskrnl
79 OBJECTS_PATH
= objects
81 all: $(OBJECTS_PATH
) \
82 bugcodes.rc
$(PATH_TO_TOP
)/include/reactos
/bugcodes.h \
83 $(TARGETNAME
).nostrip.exe \
89 # Architecture specific Makefile
90 # Defines $(OBJECTS_ARCH)
92 include Makefile.
$(ARCH
)
110 # Run-Time Library (Rtl)
128 OBJECTS_RTL
:= $(filter-out $(RTL_EXCLUDE_FILTER
), $(OBJECTS_RTL
))
154 # Memory Manager (Mm)
238 # Object Manager (Ob)
249 # Process Manager (Ps)
265 # Executive Subsystem (Ex)
288 # Installable File System Run-Time Library (FsRtl)
315 # Configuration Manager (Registry)
324 # Debugger Support (Dbg)
341 # Local Procedure Call (Lpc)
355 # Power Management (Po)
369 # Kernel Debugger Support (Kd)
381 DEP_OBJECTS
:= $(OBJECTS_NT
) $(OBJECTS_MM
) $(OBJECTS_ARCH
) \
382 $(OBJECTS_IO
) $(OBJECTS_KE
) $(OBJECTS_OB
) \
383 $(OBJECTS_PS
) $(OBJECTS_EX
) $(OBJECTS_CC
) $(OBJECTS_FS
) $(OBJECTS_SE
) \
384 $(OBJECTS_DBG
) $(OBJECTS_CM
) $(OBJECTS_LDR
) $(OBJECTS_LPC
) \
385 $(OBJECTS_PO
) $(OBJECTS_KD
) $(OBJECTS_RTL
)
387 TAG_OBJECTS
:= $(join $(dir $(DEP_OBJECTS
)),$(patsubst %.o
, .
%.TAG
, $(notdir $(DEP_OBJECTS
))))
390 # Include automatic dependancy tracking
392 DEP_EXCLUDE_FILTER
:= ex
/napi.
% nt
/zw.
%
393 GENERATED_HEADER_FILES
:= $(PATH_TO_TOP
)/include/reactos
/bugcodes.h
394 include $(PATH_TO_TOP
)/tools
/depend.mk
407 mkdir
$(OBJECTS_PATH
)
409 $(OBJECTS_RESOURCE
): $(TARGETNAME
).rc bugcodes.rc
$(PATH_TO_TOP
)/include/reactos
/resource.h
412 # Build subsystem intermediate objects
414 $(OBJECTS_PATH
)/arch.o
: $(OBJECTS_ARCH
)
415 $(LD
) -r
-o
$(OBJECTS_PATH
)/arch.o
$(OBJECTS_ARCH
)
417 $(OBJECTS_PATH
)/io.o
: $(OBJECTS_IO
)
420 -o
$(OBJECTS_PATH
)/io.o \
423 $(OBJECTS_PATH
)/ke.o
: $(OBJECTS_KE
)
426 -o
$(OBJECTS_PATH
)/ke.o \
429 $(OBJECTS_PATH
)/rtl.o
: $(OBJECTS_RTL
)
432 -o
$(OBJECTS_PATH
)/rtl.o \
435 $(OBJECTS_PATH
)/mm.o
: $(OBJECTS_MM
)
438 -o
$(OBJECTS_PATH
)/mm.o \
441 $(OBJECTS_PATH
)/ob.o
: $(OBJECTS_OB
)
444 -o
$(OBJECTS_PATH
)/ob.o \
447 $(OBJECTS_PATH
)/ps.o
: $(OBJECTS_PS
)
450 -o
$(OBJECTS_PATH
)/ps.o \
453 $(OBJECTS_PATH
)/ex.o
: $(OBJECTS_EX
)
456 -o
$(OBJECTS_PATH
)/ex.o \
459 $(OBJECTS_PATH
)/fs.o
: $(OBJECTS_FS
)
462 -o
$(OBJECTS_PATH
)/fs.o \
465 $(OBJECTS_PATH
)/se.o
: $(OBJECTS_SE
)
468 -o
$(OBJECTS_PATH
)/se.o \
471 $(OBJECTS_PATH
)/cm.o
: $(OBJECTS_CM
)
474 -o
$(OBJECTS_PATH
)/cm.o \
477 $(OBJECTS_PATH
)/dbg.o
: $(OBJECTS_DBG
)
480 -o
$(OBJECTS_PATH
)/dbg.o \
483 $(OBJECTS_PATH
)/ldr.o
: $(OBJECTS_LDR
)
486 -o
$(OBJECTS_PATH
)/ldr.o \
489 $(OBJECTS_PATH
)/lpc.o
: $(OBJECTS_LPC
)
492 -o
$(OBJECTS_PATH
)/lpc.o \
495 $(OBJECTS_PATH
)/nt.o
: $(OBJECTS_NT
)
498 -o
$(OBJECTS_PATH
)/nt.o \
501 $(OBJECTS_PATH
)/po.o
: $(OBJECTS_PO
)
504 -o
$(OBJECTS_PATH
)/po.o \
507 $(OBJECTS_PATH
)/cc.o
: $(OBJECTS_CC
)
510 -o
$(OBJECTS_PATH
)/cc.o \
513 $(OBJECTS_PATH
)/kd.o
: $(OBJECTS_KD
)
516 -o
$(OBJECTS_PATH
)/kd.o \
519 $(OBJECTS_PATH
)/inbv.o
: $(OBJECTS_INBV
)
522 -o
$(OBJECTS_PATH
)/inbv.o \
525 # Note: arch.o MUST be the first file!!!
527 $(OBJECTS_PATH
)/arch.o \
528 $(OBJECTS_PATH
)/ke.o \
529 $(OBJECTS_PATH
)/cc.o \
530 $(OBJECTS_PATH
)/cm.o \
531 $(OBJECTS_PATH
)/dbg.o \
532 $(OBJECTS_PATH
)/ex.o \
533 $(OBJECTS_PATH
)/lpc.o \
534 $(OBJECTS_PATH
)/fs.o \
535 $(OBJECTS_PATH
)/io.o \
536 $(OBJECTS_PATH
)/kd.o \
537 $(OBJECTS_PATH
)/ldr.o \
538 $(OBJECTS_PATH
)/mm.o \
539 $(OBJECTS_PATH
)/nt.o \
540 $(OBJECTS_PATH
)/ob.o \
541 $(OBJECTS_PATH
)/po.o \
542 $(OBJECTS_PATH
)/ps.o \
543 $(OBJECTS_PATH
)/rtl.o \
544 $(OBJECTS_PATH
)/se.o \
545 $(OBJECTS_PATH
)/inbv.o \
549 $(DDK_PATH_LIB
)/hal.a \
550 $(SDK_PATH_LIB
)/rtl.a \
551 $(SDK_PATH_LIB
)/string.a \
552 $(SDK_PATH_LIB
)/rosrtl.a \
553 $(SDK_PATH_LIB
)/pseh.a
555 NTOSKRNL_LD_FLAGS
:= \
556 -Wl
,--subsystem
,native \
557 -Wl
,--image-base
,0xc0000000 \
558 -Wl
,--file-alignment
,0x1000 \
559 -Wl
,--section-alignment
,0x1000 \
560 -Wl
,--entry
,_NtProcessStartup
562 $(TARGETNAME
).nostrip.exe
: $(TARGETNAME
).
all.o
$(IE_DATA
) $(NTOSKRNL_LIBS
)
564 -Wl
,-T
,ntoskrnl.lnk \
569 $(NTOSKRNL_LD_FLAGS
) \
570 -Wl
,--base-file
,base.tmp \
571 $(TARGETNAME
).
all.o
-lgcc \
575 --dllname
$(TARGETNAME
).exe \
576 --base-file base.tmp \
577 --output-exp temp.exp \
578 --def
$(TARGETNAME
).edf \
584 -Wl
,-T
,ntoskrnl.lnk \
586 -o
$(TARGETNAME
).nostrip.exe \
587 $(NTOSKRNL_LD_FLAGS
) \
589 $(TARGETNAME
).
all.o
-lgcc \
593 $(TARGETNAME
).exe
: $(TARGETNAME
).
all.o
$(LINKER_SCRIPT
) $(NTOSKRNL_LIBS
)
595 -Wl
,-T
,$(LINKER_SCRIPT
) \
600 $(NTOSKRNL_LD_FLAGS
) \
601 -Wl
,--base-file
,base.tmp \
602 $(TARGETNAME
).
all.o
-lgcc \
606 --dllname
$(TARGETNAME
).exe \
607 --base-file base.tmp \
608 --output-exp temp.exp \
609 --def
$(TARGETNAME
).edf \
613 -Wl
,-T
,$(LINKER_SCRIPT
) $(STRIP_FLAGS
)\
617 -o
$(TARGETNAME
).exe \
618 $(NTOSKRNL_LD_FLAGS
) \
620 $(TARGETNAME
).
all.o
-lgcc \
624 $(TARGETNAME
).dbg.o
: $(TARGETNAME
).
all.o
625 $(STRIP
) --strip-debug
-o
$(TARGETNAME
).dbg.o
$(TARGETNAME
).
all.o
627 $(TARGETNAME
).dbg
: $(TARGETNAME
).dbg.o
$(TARGETNAME
).a
$(TARGETNAME
).dbg.lnk
$(NTOSKRNL_LIBS
)
629 -Wl
,-T
,$(TARGETNAME
).dbg.lnk \
634 $(NTOSKRNL_LD_FLAGS
) \
635 -Wl
,--base-file
,base.tmp \
636 $(TARGETNAME
).dbg.o
-lgcc \
640 --dllname
$(TARGETNAME
).dbg \
641 --base-file base.tmp \
642 --output-exp temp.exp \
643 --def
$(TARGETNAME
).edf \
647 -Wl
,-T
,$(TARGETNAME
).dbg.lnk \
651 -o
$(TARGETNAME
).dbg \
652 $(NTOSKRNL_LD_FLAGS
) \
654 $(TARGETNAME
).dbg.o
-lgcc \
658 $(TARGETNAME
).sym
: $(TARGETNAME
).nostrip.exe
659 $(RSYM
) $(TARGETNAME
).nostrip.exe
$(TARGETNAME
).sym
662 etags
$(addprefix -i
, $(TAG_OBJECTS
))
664 $(TARGETNAME
).map
: $(TARGETNAME
).nostrip.exe
665 ifeq ($(FULL_MAP
),yes
)
666 $(OBJDUMP
) -d
-S
$(TARGETNAME
).nostrip.exe
> $(TARGETNAME
).map
668 $(NM
) --numeric-sort
$(TARGETNAME
).nostrip.exe
> $(TARGETNAME
).map
671 $(TARGETNAME
).
all.o
: $(OBJECTS
)
674 -o
$(TARGETNAME
).
all.o \
677 $(PATH_TO_TOP
)/include/reactos
/bugcodes.h bugcodes.rc
: ntoskrnl.mc
679 -H
$(PATH_TO_TOP
)/include/reactos
/bugcodes.h \
683 $(DDK_PATH_LIB
)/$(TARGETNAME
).a
: $(TARGETNAME
).def
685 --dllname
$(TARGETNAME
).exe \
686 --def
$(TARGETNAME
).def \
687 --output-lib
$(DDK_PATH_LIB
)/$(TARGETNAME
).a \
690 implib
: $(DDK_PATH_LIB
)/$(TARGETNAME
).a
696 - $(RM
) depend.d
$(MK_PCHNAME
) $(MK_PCHFAKE
) $(OBJECTS_PATH
)/*.o
cc/*.o cm
/*.o dbg
/*.o dbg
/i386
/*.o ex
/*.o \
697 ex
/i386
/*.o inbv
/*.o io
/*.o ke
/*.o ldr
/*.o mm
/*.o nt
/*.o ob
/*.o \
698 ps
/*.o ps
/i386
/*.o rtl
/*.o rtl
/i386
/*.o se
/*.o ke
/i386
/*.o \
699 mm
/i386
/*.o fs
/*.o po
/*.o lpc
/*.o kd
/*.o
$(TARGETNAME
).
all.o \
700 junk.tmp base.tmp temp.exp
$(TARGETNAME
).exe \
701 $(TARGETNAME
).nostrip.exe
$(TARGETNAME
).sym ntoskrnl.map \
702 $(TARGETNAME
).coff bugcodes.rc msg?????.bin
$(DEP_FILES
) \
703 $(TAG_OBJECTS
) $(PATH_TO_TOP
)/include/reactos
/bugcodes.h
708 ifneq ($(BOOTCD_INSTALL
),)
711 - $(CP
) $(TARGETNAME
).exe
$(INSTALL_DIR
)/$(TARGETNAME
).exe
713 else # BOOTCD_INSTALL
716 - $(CP
) $(TARGETNAME
).exe
$(INSTALL_DIR
)/system32
/$(TARGETNAME
).exe
717 - $(CP
) $(TARGETNAME
).sym
$(INSTALL_DIR
)/symbols
/$(TARGETNAME
).sym
719 endif # BOOTCD_INSTALL
725 - $(CP
) $(TARGETNAME
).exe
$(BOOTCD_DIR
)/reactos
/$(TARGETNAME
).exe
730 ex
/napi.o
: ex
/napi.c
$(PATH_TO_TOP
)/include/ntdll
/napi.h
732 ke
/main.o
: ke
/main.c
$(PATH_TO_TOP
)/include/reactos
/buildno.h
734 TARGET_PCH
= include/ntoskrnl.h
736 # Precompiled header support
737 # When using PCHs, use dependency tracking to keep the .gch files up-to-date.
740 ifeq ($(ROS_USE_PCH
),yes
)
741 MK_PCHNAME
= $(TARGET_PCH
).gch
745 # GCC generates wrong dependencies for header files.
746 MK_PCHFAKE
= $(TARGET_PCH
:.h
=.o
)
747 ifneq ($(MAKECMDGOALS
),clean)
749 - $(RTOUCH
) $(MK_PCHFAKE
)
751 $(MK_PCHNAME
): depend.d
752 - $(RTOUCH
) $(MK_PCHNAME
)
753 - $(PCH_CC
) $(CFLAGS
) $(TARGET_PCH
)
755 depend.d
: $(MK_PCHFAKE
) $(PATH_TO_TOP
)/include/reactos
/bugcodes.h
757 - $(PCH_CC
) $(CFLAGS
) $(TARGET_PCH
) -M
-MF depend.d
766 $(CC
) $(CFLAGS
) -c
$< -o
$@
767 %.o
: %.c
$(MK_PCHNAME
)
768 $(CC
) $(CFLAGS
) -c
$< -o
$@
770 $(AS
) $(ASFLAGS
) -c
$< -o
$@
772 $(AS
) $(ASFLAGS
) -c
$< -o
$@
774 $(NASM_CMD
) $(NFLAGS
) $< -o
$@
776 $(RC
) $(RCFLAGS
) $< -o
$@