#
# Accepted environment variables:
#
+# ROS_ARCH
+# This variable specifies the name of the architecture to build ReactOS for.
+# The variable defaults to i386.
+#
# ROS_PREFIX
# This variable specifies the prefix of the MinGW installation. On Windows
# a prefix is usually not needed, but on linux it is usually "mingw32". If
# Examples of output files include *.exe, *.dll, and *.sys. N.B. Don't
# put a path separator at the end. The variable defaults to .\output-i386.
#
+# ROS_CDOUTPUT
+# This variable controls the name of the ReactOS directory on cdrom.
+# The variable defaults to reactos.
+# Warning: setting this value may lead to a not bootable/installable cdrom.
+#
# ROS_TEMPORARY
# This variable controls where to put temporary files. Temporary files
# are (usually small) generated files that are needed to generate the
# output files) or no (to not build non-symbol-stripped versions of
# executable output files). The variable defaults to no.
#
+# ROS_LEAN_AND_MEAN
+# This variable controls if all binaries should be stripped out of useless
+# data added by GCC/LD as well as of RSYM symbol data. Output binary size
+# will go from 80 to 40MB, memory usage from 58 to 38MB and the install CD
+# from 18 to 13MB. The variable defaults to no.
+#
# ROS_RBUILDFLAGS
# Pass parameters to rbuild.
# -v Be verbose.
.PHONY: all
.PHONY: clean
+.PHONY: world
+.PHONY: universe
ifeq ($(ROS_AUTOMAKE),)
ROS_AUTOMAKE=makefile.auto
ifeq ($(findstring msys,$(shell sh --version 2>nul)),msys)
export OSTYPE = msys
HOST=mingw32-linux
+CFLAGS+=-fshort-wchar
+CPPFLAGS+=-fshort-wchar
else
HOST=mingw32-windows
endif
else
HOST=mingw32-linux
+CFLAGS+=-fshort-wchar
+CPPFLAGS+=-fshort-wchar
endif
endif
ECHO_REGTESTS=@echo $(QUOTE)[REGTESTS] $@$(QUOTE)
ECHO_TEST =@echo $(QUOTE)[TEST] $@$(QUOTE)
ECHO_GENDIB =@echo $(QUOTE)[GENDIB] $@$(QUOTE)
+ ECHO_STRIP =@echo $(QUOTE)[STRIP] $@$(QUOTE)
else
ECHO_CP =
ECHO_MKDIR =
ECHO_REGTESTS=
ECHO_TEST =
ECHO_GENDIB =
+ ECHO_STRIP =
endif
ar = $(Q)$(PREFIX)-ar
objcopy = $(Q)$(PREFIX)-objcopy
dlltool = $(Q)$(PREFIX)-dlltool
+ strip = $(Q)$(PREFIX)-strip
windres = $(Q)$(PREFIX)-windres
rm = $(Q)rm -f
cp = $(Q)cp
NUL = /dev/null
else # mingw32-windows
- ifeq ($(OSTYPE),msys)
- HOST=mingw32-linux
- export EXEPREFIX = ./
- export EXEPOSTFIX = .exe
- export SEP = /
- mkdir = -$(Q)mkdir -p
- gcc = $(Q)gcc
- gpp = $(Q)g++
- ld = $(Q)ld
- nm = $(Q)nm
- objdump = $(Q)objdump
- ar = $(Q)ar
- objcopy = $(Q)objcopy
- dlltool = $(Q)dlltool
- windres = $(Q)windres
- rm = $(Q)rm -f
- cp = $(Q)cp
- NUL = /dev/null
- else
- export EXEPREFIX =
- export EXEPOSTFIX = .exe
- ROS_EMPTY =
- export SEP = \$(ROS_EMPTY)
- mkdir = -$(Q)mkdir
- gcc = $(Q)gcc
- gpp = $(Q)g++
- ld = $(Q)ld
- nm = $(Q)nm
- objdump = $(Q)objdump
- ar = $(Q)ar
- objcopy = $(Q)objcopy
- dlltool = $(Q)dlltool
- windres = $(Q)windres
- rm = $(Q)del /f /q
- cp = $(Q)copy /y
- NUL = NUL
- endif
+ ifeq ($(OSTYPE),msys)
+ HOST=mingw32-linux
+ export EXEPREFIX = ./
+ export EXEPOSTFIX = .exe
+ export SEP = /
+ mkdir = -$(Q)mkdir -p
+ rm = $(Q)rm -f
+ cp = $(Q)cp
+ NUL = /dev/null
+ else
+ export EXEPREFIX =
+ export EXEPOSTFIX = .exe
+ ROS_EMPTY =
+ export SEP = \$(ROS_EMPTY)
+ mkdir = -$(Q)mkdir
+ rm = $(Q)del /f /q
+ cp = $(Q)copy /y
+ NUL = NUL
+ endif
+ ifeq ($(ROS_PREFIX),)
+ gcc = $(Q)gcc
+ gpp = $(Q)g++
+ ld = $(Q)ld
+ nm = $(Q)nm
+ objdump = $(Q)objdump
+ ar = $(Q)ar
+ objcopy = $(Q)objcopy
+ dlltool = $(Q)dlltool
+ strip = $(Q)strip
+ windres = $(Q)windres
+ else
+ gcc = $(Q)$(ROS_PREFIX)-gcc
+ gpp = $(Q)$(ROS_PREFIX)-g++
+ ld = $(Q)$(ROS_PREFIX)-ld
+ nm = $(Q)$(ROS_PREFIX)-nm
+ objdump = $(Q)$(ROS_PREFIX)-objdump
+ ar = $(Q)$(ROS_PREFIX)-ar
+ objcopy = $(Q)$(ROS_PREFIX)-objcopy
+ dlltool = $(Q)$(ROS_PREFIX)-dlltool
+ strip = $(Q)$(ROS_PREFIX)-strip
+ windres = $(Q)$(ROS_PREFIX)-windres
+ endif
+endif
+
+ifneq ($(ROS_ARCH),)
+ ARCH := $(ROS_ARCH)
+else
+ ARCH := i386
endif
ifneq ($(ROS_INTERMEDIATE),)
INTERMEDIATE := $(ROS_INTERMEDIATE)
else
- INTERMEDIATE := obj-i386
+ ifneq ($(ROS_CDOUTPUT),)
+ INTERMEDIATE := obj-$(ROS_CDOUTPUT)
+ else
+ INTERMEDIATE := obj-$(ARCH)
+ endif
endif
INTERMEDIATE_ := $(INTERMEDIATE)$(SEP)
ifneq ($(ROS_OUTPUT),)
OUTPUT := $(ROS_OUTPUT)
else
- OUTPUT := output-i386
+ ifneq ($(ROS_CDOUTPUT),)
+ OUTPUT := output-$(ROS_CDOUTPUT)
+ else
+ OUTPUT := output-$(ARCH)
+ endif
endif
OUTPUT_ := $(OUTPUT)$(SEP)
+ifneq ($(ROS_CDOUTPUT),)
+ CDOUTPUT := $(ROS_CDOUTPUT)
+else
+ CDOUTPUT := reactos
+endif
+CDOUTPUT_ := $(CDOUTPUT)$(SEP)
+
ifneq ($(ROS_TEMPORARY),)
TEMPORARY := $(ROS_TEMPORARY)
else
ifneq ($(ROS_INSTALL),)
INSTALL := $(ROS_INSTALL)
else
- INSTALL := reactos
+ ifneq ($(ROS_CDOUTPUT),)
+ INSTALL := reactos.$(ROS_CDOUTPUT)
+ else
+ INSTALL := reactos
+ endif
endif
INSTALL_ := $(INSTALL)$(SEP)
NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc
-KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc
-BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h
-BUGCODES_H = include$(SEP)reactos$(SEP)bugcodes.h
-BUGCODES_RC = ntoskrnl$(SEP)bugcodes.rc
-ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h
-ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc
+KERNEL32_MC = dll$(SEP)win32$(SEP)kernel32$(SEP)kernel32.mc
+BUILDNO_H = $(INTERMEDIATE_)include$(SEP)reactos$(SEP)buildno.h
+BUGCODES_H = $(INTERMEDIATE_)include$(SEP)reactos$(SEP)bugcodes.h
+BUGCODES_RC = $(INTERMEDIATE_)ntoskrnl$(SEP)bugcodes.rc
+ERRCODES_H = $(INTERMEDIATE_)include$(SEP)reactos$(SEP)errcodes.h
+ERRCODES_RC = $(INTERMEDIATE_)dll$(SEP)win32$(SEP)kernel32$(SEP)errcodes.rc
+
include lib/lib.mak
include tools/tools.mak
$(BUGCODES_RC) \
$(ERRCODES_H) \
$(ERRCODES_RC) \
- $(NCI_SERVICE_FILES) \
- $(GENDIB_DIB_FILES)
+ $(GENDIB_DIB_FILES) \
+ $(NCI_SERVICE_FILES)
$(ROS_AUTOMAKE): $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
+ ${mkdir} $(INTERMEDIATE_)media$(SEP)inf 2>$(NUL)
+ $(ECHO_RBUILD)
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -rReactOS-$(ARCH).rbuild mingw
+
+world: all bootcd livecd
+
+universe:
+ $(MAKE) KDBG=1 DBG=1 \
+ ROS_AUTOMAKE=makefile-$(ARCH)-kd.auto \
+ ROS_INSTALL=reactos-$(ARCH)-kd \
+ ROS_INTERMEDIATE=obj-$(ARCH)-kd \
+ ROS_OUTPUT=output-$(ARCH)-kd \
+ world
+ $(MAKE) KDBG=0 DBG=1 \
+ ROS_AUTOMAKE=makefile-$(ARCH)-d.auto \
+ ROS_INSTALL=reactos-$(ARCH)-d \
+ ROS_INTERMEDIATE=obj-$(ARCH)-d \
+ ROS_OUTPUT=output-$(ARCH)-d \
+ world
+ $(MAKE) KDBG=0 DBG=0 \
+ ROS_AUTOMAKE=makefile-$(ARCH)-r.auto \
+ ROS_INSTALL=reactos-$(ARCH)-r \
+ ROS_INTERMEDIATE=obj-$(ARCH)-r \
+ ROS_OUTPUT=output-$(ARCH)-r \
+ world
+
+sysregtest:
+ -mkdir $(OUTPUT_)cd$(SEP)reactos
+ $(cp) boot$(SEP)bootdata$(SEP)unattend.inf.sample boot$(SEP)bootdata$(SEP)unattend.inf
+ $(cp) boot$(SEP)bootdata$(SEP)unattend.inf.sample $(OUTPUT_)cd$(SEP)reactos$(SEP)unattend.inf
+ $(cp) boot$(SEP)bootdata$(SEP)bootcdregtest$(SEP)testboot.bat.sample boot$(SEP)bootdata$(SEP)bootcdregtest$(SEP)testboot.bat
+ $(MAKE) dbgprint
+ $(MAKE) bootcdregtest
+ $(MAKE) sysreg
+ $(OUTPUT_)tools$(SEP)sysreg$(SEP)sysreg$(EXEPOSTFIX) tools$(SEP)sysreg$(SEP)txtmode.cfg rosboot
+ $(OUTPUT_)tools$(SEP)sysreg$(SEP)sysreg$(EXEPOSTFIX) tools$(SEP)sysreg$(SEP)secstage.cfg rosboot
+ $(OUTPUT_)tools$(SEP)sysreg$(SEP)sysreg$(EXEPOSTFIX) tools$(SEP)sysreg$(SEP)runonce.cfg rosboot
+
+sysregtest_clean:
+ $(rm) boot$(SEP)bootdata$(SEP)unattend.inf
+ $(rm) boot$(SEP)bootdata$(SEP)bootcdregtest$(SEP)testboot.bat
+ $(rm) $(OUTPUT_)cd$(SEP)reactos$(SEP)unattend.inf
+
+regtest:
+ $(cp) boot$(SEP)bootdata$(SEP)unattend.inf.sample $(OUTPUT_)cd$(SEP)reactos$(SEP)unattend.inf
+ $(MAKE) bootcdregtest
+ $(rm) $(OUTPUT_)cd$(SEP)reactos$(SEP)unattend.inf
+
+.PHONY: cb
+cb: $(RBUILD_TARGET)
+ $(ECHO_RBUILD)
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) cb
+
+.PHONY: msbuild
+msbuild: $(RBUILD_TARGET)
+ $(ECHO_RBUILD)
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) msbuild
+
+.PHONY: msbuild_clean
+msbuild_clean: $(RBUILD_TARGET)
+ $(ECHO_RBUILD)
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c msbuild
+
+.PHONY: depmap
+depmap: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) mingw
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) depmap
.PHONY: msvc
msvc: $(RBUILD_TARGET)
$(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) msvc
$(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
+ ${mkdir} $(INTERMEDIATE_)include$(SEP)reactos 2>$(NUL)
+ ${mkdir} $(INTERMEDIATE_)ntoskrnl 2>$(NUL)
$(ECHO_WMC)
$(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
$(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(KERNEL32_MC)
+ ${mkdir} $(INTERMEDIATE_)include$(SEP)reactos 2>$(NUL)
+ ${mkdir} $(INTERMEDIATE_)dll$(SEP)win32$(SEP)kernel32 2>$(NUL)
$(ECHO_WMC)
$(Q)$(WMC_TARGET) -i -U -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
.PHONY: msvc6
msvc6: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs6.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs6.00 -voversionconfiguration msvc
.PHONY: msvc7
msvc7: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -voversionconfiguration msvc
.PHONY: msvc71
msvc71: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -voversionconfiguration msvc
.PHONY: msvc8
msvc8: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -voversionconfiguration msvc
.PHONY: msvc6_clean
msvc6_clean: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs6.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc
.PHONY: msvc7_clean
msvc7_clean: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc
.PHONY: msvc71_clean
msvc71_clean: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.10 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc
.PHONY: msvc8_clean
msvc8_clean: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs8.00 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs8.00 -voversionconfiguration msvc
.PHONY: msvc_clean
msvc_clean: $(RBUILD_TARGET)
.PHONY: msvc_clean_all
msvc_clean_all: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs6.00 msvc
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.00 msvc
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.10 msvc
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs8.10 msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -c -vs8.10 -voversionconfiguration msvc
.PHONY: msvc7_install_debug
msvc7_install_debug: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcdebug msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcdebug -voversionconfiguration msvc
.PHONY: msvc7_install_release
msvc7_install_release: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcrelease msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcrelease -voversionconfiguration msvc
.PHONY: msvc7_install_speed
msvc7_install_speed: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcspeed msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.00 -vcspeed -voversionconfiguration msvc
.PHONY: msvc71_install_debug
msvc71_install_debug: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcdebug msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcdebug -voversionconfiguration msvc
.PHONY: msvc71_install_release
msvc71_install_release: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcrelease msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcrelease -voversionconfiguration msvc
.PHONY: msvc71_install_speed
msvc71_install_speed: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcspeed msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs7.10 -vcspeed -voversionconfiguration msvc
.PHONY: msvc8_install_debug
msvc8_install_debug: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcdebug msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcdebug -voversionconfiguration msvc
.PHONY: msvc8_install_release
msvc8_install_release: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcrelease msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcrelease -voversionconfiguration msvc
.PHONY: msvc8_install_speed
msvc8_install_speed: $(RBUILD_TARGET)
$(ECHO_RBUILD)
- $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcspeed msvc
+ $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) -vs8.00 -vcspeed -voversionconfiguration msvc
.PHONY: makefile_auto_clean
makefile_auto_clean:
.PHONY: depends
depends:
@-$(rm) makefile.auto
- @$(MAKE) $(filter-out depends, $(MAKECMDGOALS))
\ No newline at end of file
+ @$(MAKE) $(filter-out depends, $(MAKECMDGOALS))