-# $Id: Makefile,v 1.7 2001/01/19 15:09:01 dwelch Exp $
+# $Id: Makefile,v 1.32 2001/04/10 22:13:22 dwelch Exp $
#
# ReactOS Operating System
#
-PATH_TO_TOP = ..
-TARGETNAME = ntoskrnl
+#
+# Path to the directory containing the root makefile
+#
+PATH_TO_TOP := ..
+
+#
+# Include details of the kernel configuration
+#
+include config
+
+#
+#
+#
+CONFIG :=
+
+ifeq ($(DBG), 1)
+CFLAGS_DBG := -g
+CONFIG += DBG
+else
+CFLAGS_DBG :=
+endif
+
+ifeq ($(KDBG), 1)
+OBJECTS_KDBG := dbg/kdb.o dbg/kdb_keyboard.o dbg/i386/kdb_help.o
+CONFIG += KDBG
+else
+OBJECTS_KDBG :=
+endif
+
+ifeq ($(MP), 1)
+CONFIG += MP
+else
+CONFIG += UP
+endif
+
+TARGETNAME := ntoskrnl
OBJECTS_PATH = objects
ASFLAGS = -Iinclude
-CFLAGS = -Iinclude -D__NTOSKRNL__ -DDBG -g -Wall -Werror
+CFLAGS = -Iinclude -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
+
+include $(PATH_TO_TOP)/rules.mak
-all: \
+all: $(EXE_PREFIX)depends$(EXE_POSTFIX) \
$(OBJECTS_PATH) \
$(TARGETNAME).nostrip.exe \
- $(TARGETNAME).exe
+ $(TARGETNAME).exe \
+ $(TARGETNAME).sym
+$(EXE_PREFIX)depends$(EXE_POSTFIX): depends.c
+ $(HOST_CC) -o depends$(EXE_POSTFIX) depends.c
+
+#
# Hardware Abstraction Layer (Hal)
# Defines $(OBJECTS_HAL)
#
include hal/x86/sources
+#
+# Architecture specific Makefile
+# Defines $(OBJECTS_ARCH)
+#
+include Makefile.$(ARCH)
+
# System API (Nt/Zw)
OBJECTS_NT = \
nt/atom.o \
nt/profile.o \
nt/zw.o \
nt/vdm.o
-
+
# Run-Time Library (Rtl)
OBJECTS_RTL = \
rtl/bitmap.o \
# Kernel (Ke)
# Note: head.o MUST be the first file!!!
OBJECTS_KE = \
- ke/multiboot.o \
ke/apc.o \
ke/bug.o \
ke/catch.o \
ke/dpc.o \
ke/error.o \
ke/event.o \
- ke/gdt.o \
- ke/idt.o \
- ke/kernel.o \
ke/kqueue.o \
- ke/ldt.o \
ke/main.o \
ke/mutex.o \
ke/process.o \
ke/wait.o \
ke/kthread.o
-OBJECTS_KE_I386 = \
- ke/i386/exp.o \
- ke/i386/irq.o \
- ke/i386/irqhand.o \
- ke/i386/thread.o \
- ke/i386/usercall.o \
- ke/i386/trap.o \
- ke/i386/bthread.o \
- ke/i386/syscall.o \
- ke/i386/tskswitch.o \
- ke/i386/v86m.o \
- ke/i386/v86m_sup.o \
- ke/i386/bios.o
-
# Memory Manager (Mm)
OBJECTS_MM = \
mm/aspace.o \
mm/wset.o \
mm/mminit.o \
mm/kmap.o \
- mm/mpw.o
-
-OBJECTS_MM_I386 = \
- mm/i386/memsafe.o \
- mm/i386/page.o \
- mm/i386/pfault.o
+ mm/mpw.o \
+ mm/pageop.o
# I/O Subsystem (Io)
OBJECTS_IO = \
# Debugger Support (Dbg)
OBJECTS_DBG = \
- dbg/brkpoint.o \
+ dbg/dbgctrl.o \
dbg/errinfo.o \
- dbg/print.o
+ dbg/print.o \
+ dbg/user.o \
+ $(OBJECTS_KDBG)
# Loader
OBJECTS_LDR = \
# Kernel Debugger Support (Kd)
OBJECTS_KD = \
kd/kdebug.o \
- kd/service.o
+ kd/service.o \
+ kd/dlog.o
+
+C_OBJECTS := $(OBJECTS_NT) $(OBJECTS_HAL) $(OBJECTS_MM) $(OBJECTS_ARCH) \
+ $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
+ $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
+ $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
+ $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
+
+D_FILES := $(filter-out ex/napi.%, $(filter-out nt/zw.%, $(C_OBJECTS:.o=.d)))
+D1_FILES := $(join $(dir $(D_FILES)), $(addprefix ., $(notdir $(D_FILES))))
# Resources
OBJECTS_RESOURCE = \
-o $(OBJECTS_PATH)/hal.o \
$(OBJECTS_HAL)
+$(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
+ $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
+
$(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
$(LD) \
-r \
-o $(OBJECTS_PATH)/io.o \
$(OBJECTS_IO)
-$(OBJECTS_PATH)/ke.o: $(OBJECTS_KE) $(OBJECTS_KE_I386)
+$(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
$(LD) \
-r \
-o $(OBJECTS_PATH)/ke.o \
- $(OBJECTS_KE) \
- $(OBJECTS_KE_I386)
+ $(OBJECTS_KE)
$(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
$(LD) \
-o $(OBJECTS_PATH)/rtl.o \
$(OBJECTS_RTL)
-$(OBJECTS_PATH)/mm.o: $(OBJECTS_MM) $(OBJECTS_MM_I386)
+$(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
$(LD) \
-r \
-o $(OBJECTS_PATH)/mm.o \
- $(OBJECTS_MM) \
- $(OBJECTS_MM_I386)
+ $(OBJECTS_MM)
$(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
$(LD) \
# Note: ke.o MUST be the first file!!!
-OBJECTS = \
+OBJECTS := \
+ $(OBJECTS_PATH)/arch.o \
$(OBJECTS_PATH)/ke.o \
$(OBJECTS_PATH)/hal.o \
$(OBJECTS_PATH)/cc.o \
ke\*.o ldr\*.o mm\*.o nt\*.o ob\*.o ps\*.o rtl\*.o se\*.o \
ke\i386\*.o mm\i386\*.o fs\*.o po\*.o nls\*.o lpc\*.o \
kd\*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
- $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff
+ $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff $(D1_FILES)
else
CLEAN_FILES = $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o ex/*.o hal/x86/*.o io/*.o \
ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o rtl/*.o se/*.o \
ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o lpc/*.o \
kd/*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
- $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff
+ $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff $(D1_FILES)
endif
- $(RM) temp.exp
$(TARGETNAME).exe: $(TARGETNAME).o $(TARGETNAME).a
- $(STRIP) \
- --strip-debug \
- $(TARGETNAME).o
$(CC) \
-Wl,-T,ntoskrnl.lnk \
-nostartfiles -nostdlib \
--kill-at
- $(RM) base.tmp
$(CC) \
- -Wl,-T,ntoskrnl.lnk \
+ -Wl,-T,ntoskrnl.lnk -Wl,-s\
-nostartfiles -nostdlib \
-mdll \
-o $(TARGETNAME).exe \
-Wl,temp.exp \
$(TARGETNAME).o -lgcc
- $(RM) temp.exp
- $(NM) --numeric-sort $(TARGETNAME).exe > $(TARGETNAME).sym
+$(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
+ $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > $(TARGETNAME).sym
$(TARGETNAME).o: $(OBJECTS)
$(LD) \
ke/main.o: ke/main.c ../include/reactos/buildno.h
-include $(PATH_TO_TOP)/rules.mak
+mkconfig$(EXE_SUFFIX): mkconfig.c
+ $(HOST_CC) -g -o mkconfig$(EXE_SUFFIX) mkconfig.c
+
+include/internal/config.h: config mkconfig$(EXE_SUFFIX)
+ $(EXE_PREFIX)mkconfig$(EXE_SUFFIX) include/internal/config.h$(CONFIG)
+
+ifneq ($(MAKECMDGOALS),clean)
+include $(D1_FILES)
+endif
+
+.%.d: %.c $(EXE_PREFIX)depends$(EXE_POSTFIX)
+ $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
+
+.%.d: %.s
+ $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
+
+.%.d: %.S
+ $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
+
+
# EOF