diff --git a/reactos/subsys/directory.xml b/reactos/subsys/directory.xml
index 22dcfb81519..2f292c6f166 100644
--- a/reactos/subsys/directory.xml
+++ b/reactos/subsys/directory.xml
@@ -1,6 +1,9 @@
+
+
+
diff --git a/reactos/subsys/ntvdm/ntvdm.xml b/reactos/subsys/ntvdm/ntvdm.xml
new file mode 100644
index 00000000000..e9497526af1
--- /dev/null
+++ b/reactos/subsys/ntvdm/ntvdm.xml
@@ -0,0 +1,12 @@
+
+ .
+
+
+ ntdll
+ kernel32
+ user32
+ gdi32
+ advapi32
+ ntvdm.c
+ ntvdm.rc
+
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
index 1eef9eb0545..8923afd446e 100644
--- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
+++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
@@ -1720,6 +1720,58 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module
}
+static MingwWin32CUIModuleHandler win32cui_handler;
+
+MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ()
+ : MingwModuleHandler ( Win32CUI )
+{
+}
+
+void
+MingwWin32CUIModuleHandler::Process ( const Module& module )
+{
+ GeneratePreconditionDependencies ( module );
+ GenerateWin32CUIModuleTarget ( module );
+ GenerateInvocations ( module );
+}
+
+void
+MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module )
+{
+ static string ros_junk ( "$(ROS_TEMPORARY)" );
+ string target ( FixupTargetFilename ( module.GetPath () ) );
+ string workingDirectory = GetWorkingDirectory ( );
+ string objectFilenames = GetObjectFilenames ( module );
+ string importLibraryDependencies = GetImportLibraryDependencies ( module );
+
+ GenerateImportLibraryTargetIfNeeded ( module );
+
+ if ( module.files.size () > 0 )
+ {
+ GenerateMacrosAndTargetsTarget ( module );
+
+ fprintf ( fMakefile, "%s: %s %s\n",
+ target.c_str (),
+ objectFilenames.c_str (),
+ importLibraryDependencies.c_str () );
+
+ string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,0x00400000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
+ module.entrypoint.c_str () );
+ GenerateLinkerCommand ( module,
+ "${gcc}",
+ linkerParameters,
+ objectFilenames );
+ }
+ else
+ {
+ fprintf ( fMakefile, ".PHONY: %s\n\n",
+ target.c_str ());
+ fprintf ( fMakefile, "%s:\n\n",
+ target.c_str ());
+ }
+}
+
+
static MingwWin32GUIModuleHandler win32gui_handler;
MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ()
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h
index 88b220b178c..85fd4421831 100644
--- a/reactos/tools/rbuild/backend/mingw/modulehandler.h
+++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h
@@ -243,6 +243,16 @@ private:
};
+class MingwWin32CUIModuleHandler : public MingwModuleHandler
+{
+public:
+ MingwWin32CUIModuleHandler ();
+ virtual void Process ( const Module& module );
+private:
+ void GenerateWin32CUIModuleTarget ( const Module& module );
+};
+
+
class MingwWin32GUIModuleHandler : public MingwModuleHandler
{
public:
diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp
index e2d975f985f..d2f07cbf479 100644
--- a/reactos/tools/rbuild/module.cpp
+++ b/reactos/tools/rbuild/module.cpp
@@ -275,6 +275,8 @@ Module::GetModuleType ( const string& location, const XMLAttribute& attribute )
return NativeCUI;
if ( attribute.value == "win32dll" )
return Win32DLL;
+ if ( attribute.value == "win32cui" )
+ return Win32CUI;
if ( attribute.value == "win32gui" )
return Win32GUI;
if ( attribute.value == "bootloader" )
@@ -301,6 +303,7 @@ Module::GetDefaultModuleExtension () const
return ".o";
case Kernel:
case NativeCUI:
+ case Win32CUI:
case Win32GUI:
return ".exe";
case KernelModeDLL:
@@ -326,8 +329,6 @@ Module::GetDefaultModuleEntrypoint () const
{
case Kernel:
return "_NtProcessStartup";
- case Win32GUI:
- return "_WinMainCRTStartup";
case KernelModeDLL:
return "_DriverEntry@8";
case NativeDLL:
@@ -336,6 +337,10 @@ Module::GetDefaultModuleEntrypoint () const
return "_NtProcessStartup@4";
case Win32DLL:
return "_DllMain@12";
+ case Win32CUI:
+ return "_mainCRTStartup";
+ case Win32GUI:
+ return "_WinMainCRTStartup";
case KernelModeDriver:
return "_DriverEntry@8";
case BuildTool:
diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h
index f8e7db0d312..19e587bb566 100644
--- a/reactos/tools/rbuild/rbuild.h
+++ b/reactos/tools/rbuild/rbuild.h
@@ -93,6 +93,7 @@ enum ModuleType
NativeDLL,
NativeCUI,
Win32DLL,
+ Win32CUI,
Win32GUI,
BootLoader,
BootSector,