KD System Rewrite:
[reactos.git] / reactos / rules.mak
index 6d976dc..f6ffdf5 100644 (file)
-#
-# Important
-#
-.EXPORT_ALL_VARIABLES:
+# Default to half-verbose mode
+ifeq ($(VERBOSE),no)
+  Q = @
+  HALFVERBOSEECHO = @:
+  # Do not print "Entering directory ..."
+  export MAKEFLAGS += --no-print-directory
+  # Be silent
+  export MAKEFLAGS += --silent
+else
+ifeq ($(VERBOSE),yes)
+  Q =
+  HALFVERBOSEECHO = @:
+else
+  Q = @
+  # the following is a hack to get the target name for wine dlls
+  # it's disabled because it produces warnings about overriden rules for author.c
+  #ifeq ($(TARGET_TYPE),winedll)
+  #  export TOOLS_PATH = $(PATH_TO_TOP)/tools
+  #  -include Makefile.ros
+  #endif
+  ifeq ($(TARGET_NAME),)
+    HALFVERBOSEECHO = @echo
+  else
+    HALFVERBOSEECHO = @echo $(TARGET_NAME):
+  endif
+  # Do not print "Entering directory ..."
+  export MAKEFLAGS += --no-print-directory
+  # Be silent
+  export MAKEFLAGS += --silent
+endif
+endif
 
-#HOST = mingw32-windows
+export MAKE := @$(MAKE)
 
-# uncomment if you use bochs and it displays only 30 rows
-# BOCHS_30ROWS = yes
+ifeq ($(VERBOSE),no)
+endif
 
-ifeq ($(HOST),mingw32-linux)
-TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
+# detect Windows host environment
+ifeq ($(HOST),)
+ifeq ($(word 1,$(shell gcc -dumpmachine)),mingw32)
+export HOST=mingw32-windows
+else
+export HOST=mingw32-linux
+endif
+endif
+
+# Default to building map files which includes source and asm code
+# Other options are: yes
+ifeq ($(BUILD_MAP),)
+export BUILD_MAP = full
+endif
+
+# Default to dumping .sym files out of .nostrip files
+ifeq ($(BUILD_SYM),)
+export BUILD_SYM = yes
+endif
+
+# Default to minimal dependencies, making components not
+# depend on all import libraries
+ifeq ($(MINIMALDEPENDENCIES),)
+export MINIMALDEPENDENCIES = yes
+endif
+
+# Default to no PCH support
+ifeq ($(ROS_USE_PCH),)
+export ROS_USE_PCH = no
 endif
 
+# uncomment if you use bochs and it displays only 30 rows
+# BOCHS_30ROWS = yes
+
 #
 # Choose various options
 #
 ifeq ($(HOST),mingw32-linux)
-NASM_FORMAT = win32
-PREFIX = i586-mingw32-
-EXE_POSTFIX = 
-EXE_PREFIX = ./
-#CP = cp
-CP = $(PATH_TO_TOP)/rcopy
-DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
-NASM_CMD = nasm
-#KM_SPECS = $(TOPDIR)/specs
-FLOPPY_DIR = /a
-# DIST_DIR should be relative from the top of the tree
-DIST_DIR = dist
+export NASM_FORMAT = win32
+export PREFIX = mingw32-
+export EXE_POSTFIX :=
+export EXE_PREFIX := ./
+export DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
+#
+# Do not change NASM_CMD to NASM because older versions of 
+# nasm doesn't like an environment variable NASM
+#
+export NASM_CMD = nasm
+export DOSCLI =
+export FLOPPY_DIR = /mnt/floppy
+export SEP := /
+export PIPE :=
 endif
 
 ifeq ($(HOST),mingw32-windows)
-NASM_FORMAT = win32
-PREFIX = 
-EXE_POSTFIX = .exe
-#CP = copy /B
-CP = rcopy
-DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
-NASM_CMD = nasm
-RM = del
-RMDIR = rmdir
-#KM_SPECS = specs
-DOSCLI = yes
-FLOPPY_DIR = A:
-# DIST_DIR should be relative from the top of the tree
-DIST_DIR = dist
+export NASM_FORMAT = win32
+export PREFIX =
+export EXE_PREFIX :=
+export EXE_POSTFIX := .exe
+export DLLTOOL = $(Q)$(PREFIX)dlltool --as=$(PREFIX)as
+#
+# Do not change NASM_CMD to NASM because older versions of 
+# nasm doesn't like an environment variable NASM
+#
+export NASM_CMD = $(Q)nasmw
+export DOSCLI = yes
+export FLOPPY_DIR = A:
+export SEP := \$(EMPTY_VAR)
+export PIPE := -pipe
 endif
 
-CC = $(PREFIX)gcc
-HOST_CC = gcc
-HOST_NM = nm
-CFLAGS := $(CFLAGS) -I$(PATH_TO_TOP)/include -pipe
-CXXFLAGS = $(CFLAGS)
-NFLAGS = -i$(PATH_TO_TOP)/include/ -f$(NASM_FORMAT) -d$(NASM_FORMAT)
-LD = $(PREFIX)ld
-NM = $(PREFIX)nm
-OBJCOPY = $(PREFIX)objcopy
-STRIP = $(PREFIX)strip
-ASFLAGS := $(ASFLAGS) -I$(PATH_TO_TOP)/include -D__ASM__
-AS = $(PREFIX)gcc -c -x assembler-with-cpp 
-CPP = $(PREFIX)cpp
-AR = $(PREFIX)ar
-RC = $(PREFIX)windres
-RCINC = --include-dir $(PATH_TO_TOP)/include
-OBJCOPY = $(PREFIX)objcopy
-
-%.o: %.cc
-       $(CC) $(CFLAGS) -c $< -o $@
-%.o: %.c
-       $(CC) $(CFLAGS) -c $< -o $@
-%.o: %.S
-       $(AS) $(ASFLAGS) -c $< -o $@
-%.o: %.s
-       $(AS) $(ASFLAGS) -c $< -o $@    
-%.o: %.asm
-       $(NASM_CMD) $(NFLAGS) $< -o $@
-%.coff: %.rc
-       $(RC) $(RCINC) $< $@
-
-%.sys: %.o
-       $(CC) \
-               -nostartfiles -nostdlib -e _DriverEntry@8\
-               -mdll \
-               -o junk.tmp \
-               -Wl,--defsym,_end=end \
-               -Wl,--defsym,_edata=__data_end__ \
-               -Wl,--defsym,_etext=etext \
-               -Wl,--base-file,base.tmp $^
-       - $(RM) junk.tmp
-       $(DLLTOOL) \
-               --dllname $@ \
-               --base-file base.tmp \
-               --output-exp temp.exp \
-               --kill-at
-       - $(RM) base.tmp
-       $(CC) \
-               --verbose \
-               -Wl,--image-base,0x10000 \
-               -Wl,-e,_DriverEntry@8 \
-               -Wl,temp.exp \
-               -nostartfiles -nostdlib -e _DriverEntry@8 \
-               -mdll \
-               -o $@.unstripped \
-               $^
-       - $(RM) temp.exp
-       $(STRIP) --strip-debug $<
-       $(CC) \
-               -nostartfiles -nostdlib -e _DriverEntry@8 \
-               -mdll \
-               -o junk.tmp \
-               -Wl,--defsym,_end=end \
-               -Wl,--defsym,_edata=__data_end__ \
-               -Wl,--defsym,_etext=etext \
-               -Wl,--base-file,base.tmp $^
-       - $(RM) junk.tmp
-       $(DLLTOOL) \
-               --dllname $@ \
-               --base-file base.tmp \
-               --output-exp temp.exp \
-               --kill-at
-       - $(RM) base.tmp
-       $(CC) \
-               --verbose \
-               -Wl,--image-base,0x10000 \
-               -Wl,-e,_DriverEntry@8 \
-               -Wl,temp.exp \
-               -nostartfiles -nostdlib -e _DriverEntry@8 \
-               -mdll \
-               -o $@ \
-               $^
-       - $(RM) temp.exp
-
-RULES_MAK_INCLUDED = 1
-
-
-
-
+# TOPDIR is used by make bootcd but not defined anywhere.  Usurp pointed out
+# that it has the same meaning as PATH_TO_TOP.
+export TOPDIR = $(PATH_TO_TOP)
 
+# Directory to build a bootable CD image in
+export BOOTCD_DIR=$(TOPDIR)/../bootcd/disk
+export LIVECD_DIR=$(TOPDIR)/../livecd/disk
 
+ifeq ($(LIVECD_INSTALL),yes)
+export INSTALL_DIR=$(LIVECD_DIR)/reactos
+else
+# Use environment var ROS_INSTALL to override default install dir
+ifeq ($(ROS_INSTALL),)
+ifeq ($(HOST),mingw32-windows)
+export INSTALL_DIR = C:/reactos
+else
+export INSTALL_DIR = $(PATH_TO_TOP)/reactos
+endif
+else
+export INSTALL_DIR = $(ROS_INSTALL)
+endif
+endif
 
 
+export CC = $(Q)$(PREFIX)gcc
+export CXX = $(Q)$(PREFIX)g++
+export HOST_CC = $(Q)gcc
+export HOST_CXX = $(Q)g++
+export HOST_AR = $(Q)ar
+export HOST_NM = $(Q)nm
+export LD = $(Q)$(PREFIX)ld
+export NM = $(Q)$(PREFIX)nm
+export OBJCOPY = $(Q)$(PREFIX)objcopy
+export STRIP = $(Q)$(PREFIX)strip
+export AS = $(Q)$(PREFIX)gcc -c -x assembler-with-cpp
+export CPP = $(Q)$(PREFIX)cpp
+export AR = $(Q)$(PREFIX)ar
+export RC = $(Q)$(PREFIX)windres
+export WRC = $(Q)$(WINE_TOP)/tools/wrc/wrc
+export OBJCOPY = $(Q)$(PREFIX)objcopy
+export OBJDUMP =$(Q)$(PREFIX)objdump
+export TOOLS_PATH = $(PATH_TO_TOP)/tools
+export W32API_PATH = $(PATH_TO_TOP)/w32api
+export CP = $(Q)$(TOOLS_PATH)/rcopy
+export RM = $(Q)$(TOOLS_PATH)/rdel
+export RLINE = $(Q)$(TOOLS_PATH)/rline
+export RMDIR = $(Q)$(TOOLS_PATH)/rrmdir
+export RMKDIR = $(Q)$(TOOLS_PATH)/rmkdir
+export RSYM = $(Q)$(TOOLS_PATH)/rsym
+export RTOUCH = $(Q)$(TOOLS_PATH)/rtouch
+export REGTESTS = $(Q)$(TOOLS_PATH)/regtests
+export MC = $(Q)$(TOOLS_PATH)/wmc/wmc
+export CABMAN = $(Q)$(TOOLS_PATH)/cabman/cabman
+export WINEBUILD = $(Q)$(TOOLS_PATH)/winebuild/winebuild
+export WINE2ROS = $(Q)$(TOOLS_PATH)/wine2ros/wine2ros
+export MKHIVE = $(Q)$(TOOLS_PATH)/mkhive/mkhive
+export CDMAKE = $(Q)$(TOOLS_PATH)/cdmake/cdmake
+export BIN2RES = $(Q)$(TOOLS_PATH)/bin2res/bin2res
+export XSLTPROC = $(Q)xsltproc
+export MS2PS = $(Q)$(TOOLS_PATH)/ms2ps/ms2ps
+export WRC = $(Q)$(TOOLS_PATH)/wrc/wrc
+export WIDL = $(Q)$(TOOLS_PATH)/widl/widl
+
+export STD_CFLAGS = -I$(PATH_TO_TOP)/include -I$(W32API_PATH)/include -pipe -march=$(OARCH) -D_M_IX86
+export STD_CPPFLAGS = $(STD_CFLAGS)
+# Check for 3GB 
+ifeq ($(3GB), 1)
+export STD_ASFLAGS = -I$(PATH_TO_TOP)/include -I$(W32API_PATH)/include -D__ASM__ -D_M_IX86 -D__3GB__
+else
+export STD_ASFLAGS = -I$(PATH_TO_TOP)/include -I$(W32API_PATH)/include -D__ASM__ -D_M_IX86
+endif
+export STD_RCFLAGS = --include-dir $(PATH_TO_TOP)/include --include-dir $(W32API_PATH)/include
+export STD_NFLAGS = -f win32
+
+# Developer Kits
+export DK_PATH=$(PATH_TO_TOP)/dk
+# Native and kernel mode
+export DDK_PATH=$(DK_PATH)/nkm
+export DDK_PATH_LIB=$(DDK_PATH)/lib
+export DDK_PATH_INC=$(PATH_TO_TOP)/include
+# Win32
+export SDK_PATH=$(DK_PATH)/w32
+export SDK_PATH_LIB=$(SDK_PATH)/lib
+export SDK_PATH_INC=$(PATH_TO_TOP)/include
+# POSIX+
+export XDK_PATH=$(DK_PATH)/psx
+export XDK_PATH_LIB=$(XDK_PATH)/lib
+export XDK_PATH_INC=$(XDK_PATH)/include
+
+# Wine Integration
+export WINE_PATH=$(PATH_TO_TOP)/../wine
+export WINE_PATH_LIB=$(WINE_PATH)/lib
+export WINE_PATH_INC=$(WINE_PATH)/include
+
+# Posix+ Integration
+export POSIX_PATH=$(PATH_TO_TOP)/../posix
+export POSIX_PATH_LIB=$(POSIX_PATH)/lib
+export POSIX_PATH_INC=$(POSIX_PATH)/include
+
+# OS/2 Integration
+export OS2_PATH=$(PATH_TO_TOP)/../os2
+export OS2_PATH_LIB=$(OS2_PATH)/lib
+export OS2_PATH_INC=$(OS2_PATH)/include
+
+# Other systems integration
+export REGTESTS_PATH=$(PATH_TO_TOP)/regtests
+export REGTESTS_PATH_INC=$(PATH_TO_TOP)/regtests/shared