From 75df7c5bcade1040a9e77b1b95e61015b9432dee Mon Sep 17 00:00:00 2001 From: Casper Hornstrup Date: Sat, 5 Feb 2005 19:16:14 +0000 Subject: [PATCH] * Build ntvdm * Add win32cui module type support svn path=/branches/xmlbuildsystem/; revision=13426 --- reactos/subsys/directory.xml | 3 ++ reactos/subsys/ntvdm/ntvdm.xml | 12 +++++ .../rbuild/backend/mingw/modulehandler.cpp | 52 +++++++++++++++++++ .../rbuild/backend/mingw/modulehandler.h | 10 ++++ reactos/tools/rbuild/module.cpp | 9 +++- reactos/tools/rbuild/rbuild.h | 1 + 6 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 reactos/subsys/ntvdm/ntvdm.xml 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,