# bootpgm = Boot program
# miniport = Kernel mode driver that does not link with ntoskrnl.exe or hal.dll
# gdi_driver = Kernel mode graphics driver that link with win32k.sys
+# subsystem = Kernel subsystem
+# kmdll = Kernel mode DLL
# $TARGET_APPTYPE = Application type (windows,native,console)
# $TARGET_NAME = Base name of output file and .rc, .def, and .edf files
# $TARGET_OBJECTS = Object files that compose the module
# $TARGET_HEADERS = Header files that the object files depend on (optional)
# $TARGET_DEFNAME = Base name of .def and .edf files (optional)
# $TARGET_BASENAME = Base name of output file (overrides $TARGET_NAME if it exists) (optional)
-# $TARGET_EXTENSION = Extesion of the output file (optional)
+# $TARGET_EXTENSION = Extension of the output file (optional)
# $TARGET_DDKLIBS = DDK libraries that are to be imported by the module (optional)
# $TARGET_SDKLIBS = SDK libraries that are to be imported by the module (optional)
# $TARGET_LIBS = Other libraries that are to be imported by the module (optional)
# $TARGET_LIBPATH = Destination path for import libraries (optional)
# $TARGET_INSTALLDIR = Destination path when installed (optional)
# $TARGET_PCH = Filename of header to use to generate a PCH if supported by the compiler (optional)
+# $TARGET_BOOTSTRAP = Wether this file is needed to bootstrap the installation (no,yes) (optional)
+# $TARGET_BOOTSTRAP_NAME = Name on the installation medium (optional)
# $WINE_MODE = Compile using WINE headers (no,yes) (optional)
# $WINE_RC = Name of .rc file for WINE modules (optional)
TARGET_PATH := .
endif
+ifeq ($(ARCH),i386)
+ MK_ARCH_ID := _M_IX86
+endif
+
+ifeq ($(ARCH),alpha)
+ MK_ARCH_ID := _M_ALPHA
+endif
+
+ifeq ($(ARCH),mips)
+ MK_ARCH_ID := _M_MIPS
+endif
+
+ifeq ($(ARCH),powerpc)
+ MK_ARCH_ID := _M_PPC
+endif
+
+# unknown architecture
+ifeq ($(MK_ARCH_ID),)
+ MK_ARCH_ID := _M_UNKNOWN
+endif
ifeq ($(TARGET_TYPE),program)
MK_MODE := user
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := bin
+ MK_BOOTCDDIR := system32
MK_DISTDIR := apps
ifeq ($(WINE_RC),)
MK_RES_BASE := $(TARGET_NAME)
MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := bin
+ MK_BOOTCDDIR := system32
MK_DISTDIR := apps
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32
+ MK_BOOTCDDIR := system32
MK_DISTDIR := dlls
ifeq ($(WINE_RC),)
MK_RES_BASE := $(TARGET_NAME)
endif
ifeq ($(TARGET_TYPE),library)
+ TARGET_NORC := yes
MK_MODE := static
MK_EXETYPE :=
MK_DEFEXT := .a
MK_IMPLIBONLY := no
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT :=
- MK_INSTALLDIR := system32
- MK_DISTDIR := # FIXME
+ MK_INSTALLDIR := # none
+ MK_BOOTCDDIR := system32
+ MK_DISTDIR := # none
MK_RES_BASE :=
endif
MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := $(DDK_PATH_INC)
+ MK_BOOTCDDIR := .
MK_DISTDIR := # FIXME
MK_RES_BASE :=
endif
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32/drivers
+ MK_BOOTCDDIR := .
MK_DISTDIR := drivers
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32/drivers
+ MK_BOOTCDDIR := .
MK_DISTDIR := drivers
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32
+ MK_BOOTCDDIR := .
MK_DISTDIR := dlls
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32
+ MK_BOOTCDDIR := system32
MK_DISTDIR := # FIXME
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBDEFPATH :=
MK_IMPLIB_EXT := .a
MK_INSTALLDIR := system32/drivers
+ MK_BOOTCDDIR := .
MK_DISTDIR := drivers
MK_RES_BASE := $(TARGET_NAME)
endif
MK_IMPLIBONLY := no
MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
MK_IMPLIB_EXT := .a
- MK_INSTALLDIR := system32/drivers
- MK_DISTDIR := drivers
+ MK_INSTALLDIR := system32
+ MK_BOOTCDDIR := .
+ MK_DISTDIR := dlls
MK_RES_BASE := $(TARGET_NAME)
endif
endif
endif
+ifeq ($(TARGET_TYPE),subsystem)
+ MK_MODE := kernel
+ MK_EXETYPE := dll
+ MK_DEFEXT := .sys
+ MK_DEFENTRY := _DriverEntry@8
+ MK_DDKLIBS := ntoskrnl.a hal.a
+ MK_SDKLIBS :=
+ MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+ MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+ MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
+ MK_IMPLIB := yes
+ MK_IMPLIBONLY := no
+ MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
+ MK_IMPLIB_EXT := .a
+ MK_INSTALLDIR := system32
+ MK_DISTDIR := drivers
+ MK_RES_BASE := $(TARGET_NAME)
+endif
+
+ifeq ($(TARGET_TYPE),kmdll)
+ MK_MODE := kernel
+ MK_EXETYPE := dll
+ MK_DEFEXT := .dll
+ MK_DEFENTRY := 0x0
+ MK_DDKLIBS := ntoskrnl.a hal.a
+ MK_SDKLIBS :=
+ MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+ MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
+ MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
+ MK_IMPLIB := yes
+ MK_IMPLIBONLY := no
+ MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
+ MK_IMPLIB_EXT := .a
+ MK_INSTALLDIR := system32
+ MK_DISTDIR := drivers
+ MK_RES_BASE := $(TARGET_NAME)
+endif
+
MK_RESOURCE := $(MK_RES_BASE).coff
endif
+ifneq ($(BOOTCD_INSTALL),)
+ MK_INSTALLDIR := .
+endif
+
+
ifeq ($(TARGET_LIBPATH),)
MK_IMPLIBPATH := $(MK_IMPLIBDEFPATH)
else
endif
+ifneq ($(TARGET_LIBS),)
+ MK_LIBS := $(TARGET_LIBS) $(MK_LIBS)
+endif
+
+
ifeq ($(TARGET_BASE),)
TARGET_BASE := $(MK_DEFBASE)
endif
include $(PATH_TO_TOP)/config
+TARGET_ASFLAGS += -march=$(ARCH) -D$(MK_ARCH_ID)
TARGET_CFLAGS += $(MK_CFLAGS)
-TARGET_CFLAGS += -pipe -march=$(ARCH)
+TARGET_CFLAGS += -pipe -march=$(ARCH) -D$(MK_ARCH_ID)
ifeq ($(DBG),1)
TARGET_ASFLAGS += -g
TARGET_CFLAGS += -g
endif
TARGET_CPPFLAGS += $(MK_CPPFLAGS)
-TARGET_CPPFLAGS += -pipe -march=$(ARCH)
+TARGET_CPPFLAGS += -pipe -march=$(ARCH) -D$(MK_ARCH_ID)
TARGET_RCFLAGS += $(MK_RCFLAGS)
MK_GCCLIBS := $(addprefix -l, $(TARGET_GCCLIBS))
-MK_FULLNAME := $(MK_BASENAME)$(MK_EXT)
+ifeq ($(MK_MODE),static)
+ MK_FULLNAME := $(SDK_PATH_LIB)/$(MK_BASENAME)$(MK_EXT)
+else
+ MK_FULLNAME := $(MK_BASENAME)$(MK_EXT)
+endif
+
MK_IMPLIB_FULLNAME := $(MK_BASENAME)$(MK_IMPLIB_EXT)
MK_NOSTRIPNAME := $(MK_BASENAME).nostrip$(MK_EXT)
$(MK_FULLNAME): $(TARGET_OBJECTS)
$(AR) -r $(MK_FULLNAME) $(TARGET_OBJECTS)
+# Static libraries dont have a nostrip version
+$(MK_NOSTRIPNAME):
+ -
+
+.phony: $(MK_NOSTRIPNAME)
+
endif # MK_MODE
endif # MK_IMPLIBONLY
$(TARGET_OBJECTS): $(TARGET_HEADERS)
endif
-# install and dist rules
+# install, dist and bootcd rules
ifeq ($(MK_IMPLIBONLY),yes)
dist:
+bootcd:
+
else # MK_IMPLIBONLY
+# Don't install static libraries
+ifeq ($(MK_MODE),static)
+
+install:
+ -
+
+else # MK_MODE
+
install: $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
+endif # MK_MODE
+
+
+ifeq ($(INSTALL_SYMBOLS),no)
+
+$(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME):
+ $(CP) $(MK_FULLNAME) $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
+
+else # INSTALL_SYMBOLS
+
+# Don't install static libraries
+ifeq ($(MK_MODE),static)
+
+install:
+ -
+
+else # MK_MODE
+
$(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME): $(MK_FULLNAME) $(MK_BASENAME).sym
$(CP) $(MK_FULLNAME) $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
$(CP) $(MK_BASENAME).sym $(INSTALL_DIR)/symbols/$(MK_BASENAME).sym
+endif # MK_MODE
+
+endif # INSTALL_SYMBOLS
dist: $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME)
$(CP) $(MK_FULLNAME) $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME)
$(CP) $(MK_BASENAME).sym $(DIST_DIR)/symbols/$(MK_BASENAME).sym
+# Bootstrap files for the bootable CD
+ifeq ($(TARGET_BOOTSTRAP),yes)
+
+ifneq ($(TARGET_BOOTSTRAP_NAME),)
+MK_BOOTSTRAP_NAME := $(TARGET_BOOTSTRAP_NAME)
+else # TARGET_BOOTSTRAP_NAME
+MK_BOOTSTRAP_NAME := $(MK_FULLNAME)
+endif # TARGET_BOOTSTRAP_NAME
+
+bootcd: $(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME)
+
+$(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME):
+ $(CP) $(MK_FULLNAME) $(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME)
+
+else # TARGET_BOOTSTRAP
+
+bootcd:
+
+endif # TARGET_BOOTSTRAP
+
endif # MK_IMPLIBONLY
-.phony: all depends implib clean install dist depends
+.phony: all depends implib clean install dist bootcd depends
# Precompiled header support