* Invoke cabman when building a CD * Entrypoint attribute on <module> to override default entrypoint * Use entrypoint _DrvEnableDriver@12 for display drivers Modified: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml Modified: branches/xmlbuildsystem/reactos/drivers/video/displays/framebuf/framebuf .xml Modified: branches/xmlbuildsystem/reactos/drivers/video/displays/vga/vgaddi.xml Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h _____
Modified: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml 2005-01-22 17:38:31 UTC (rev 13216) @@ -1,11 +1,4 @@
-<!--<module name="bootsector" type="bootsector"> - <include base="bootsector">freeldr/include</include> - <compilerflag>-nostdlib</compilerflag> - <compilerflag>-nostdinc</compilerflag> - <compilerflag>-ffreestanding</compilerflag> - <compilerflag>-no-builtin</compilerflag> - <compilerflag>-no-inline</compilerflag> - <compilerflag>-no-zero-initialized-in-bss</compilerflag> +<module name="bootsector" type="bootsector"> <directory name="bootsect"> <file>dosmbr.asm</file> <file>ext2.asm</file> @@ -15,7 +8,7 @@ <file>win2k.asm</file> <file>wxpfat16.asm</file> </directory> -</module>--> +</module> <directory name="freeldr"> <xi:include href="freeldr/freeldr_startup.xml" /> <xi:include href="freeldr/freeldr_base64k.xml" /> _____
Modified: branches/xmlbuildsystem/reactos/drivers/video/displays/framebuf/framebuf .xml --- branches/xmlbuildsystem/reactos/drivers/video/displays/framebuf/framebuf .xml 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/drivers/video/displays/framebuf/framebuf .xml 2005-01-22 17:38:31 UTC (rev 13216) @@ -1,4 +1,4 @@
-<module name="framebuf" type="kernelmodedriver"> +<module name="framebuf" type="kernelmodedll" entrypoint="_DrvEnableDriver@12"> <importlibrary definition="framebuf.def" /> <include base="framebuf">.</include> <define name="__USE_W32API" /> _____
Modified: branches/xmlbuildsystem/reactos/drivers/video/displays/vga/vgaddi.xml --- branches/xmlbuildsystem/reactos/drivers/video/displays/vga/vgaddi.xml 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/drivers/video/displays/vga/vgaddi.xml 2005-01-22 17:38:31 UTC (rev 13216) @@ -1,4 +1,4 @@
-<module name="vgaddi" type="kernelmodedriver"> +<module name="vgaddi" type="kernelmodedll" entrypoint="_DrvEnableDriver@12"> <importlibrary definition="vgaddi.def" /> <include base="vgaddi">.</include> <define name="__USE_W32API" /> _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-01-22 17:38:31 UTC (rev 13216) @@ -193,6 +193,8 @@
fprintf ( fMakefile, "NUL=NUL\n" ); fprintf ( fMakefile, "winebuild = tools" SSEP "winebuild" SSEP "winebuild\n" ); fprintf ( fMakefile, "bin2res = tools" SSEP "bin2res" SSEP "bin2res\n" ); + fprintf ( fMakefile, "cabman = tools" SSEP "cabman" SSEP "cabman\n" ); + fprintf ( fMakefile, "cdmake = tools" SSEP "cdmake" SSEP "cdmake\n" ); fprintf ( fMakefile, "\n" ); GenerateGlobalCFlagsAndProperties ( "=", @@ -213,6 +215,8 @@ { if ( module.type == ObjectLibrary ) return false; + if ( module.type == BootSector ) + return false; if ( module.type == Iso ) return false; return true; _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-01-22 17:38:31 UTC (rev 13216) @@ -960,7 +960,8 @@
const string& cc, const string& cppc, const string& ar, - const string* cflags ) const + const string* cflags, + const string* nasmflags ) const { string cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ()); string nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ()); @@ -982,7 +983,15 @@ cflagsMacro.c_str (), cflags->c_str () ); } - + + if ( nasmflags != NULL ) + { + fprintf ( fMakefile, + "%s += %s\n\n", + nasmflagsMacro.c_str (), + nasmflags->c_str () ); + } + // generate phony target for module name fprintf ( fMakefile, ".PHONY: %s\n", module.name.c_str () ); @@ -1021,21 +1030,33 @@ void MingwModuleHandler::GenerateMacrosAndTargetsHost ( const Module& module ) const { - GenerateMacrosAndTargets ( module, "${host_gcc}", "${host_gpp}", "${host_ar}", NULL ); + GenerateMacrosAndTargets ( module, + "${host_gcc}", + "${host_gpp}", + "${host_ar}", + NULL, + NULL ); }
void MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module ) const { GenerateMacrosAndTargetsTarget ( module, + NULL, NULL ); }
void MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module, - const string* clags ) const + const string* cflags, + const string* nasmflags ) const { - GenerateMacrosAndTargets ( module, "${gcc}", "${gpp}", "${ar}", clags ); + GenerateMacrosAndTargets ( module, + "${gcc}", + "${gpp}", + "${ar}", + cflags, + nasmflags ); }
string @@ -1306,8 +1327,9 @@ string base_tmp = ros_junk + module.name + ".base.tmp"; string junk_tmp = ros_junk + module.name + ".junk.tmp"; string temp_exp = ros_junk + module.name + ".temp.exp"; - string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,_NtProcessStartup -Wl,--image-base,0xC0000000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", - module.GetBasePath ().c_str () ); + string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,0xC0000000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", + module.GetBasePath ().c_str (), + module.entrypoint.c_str () );
GenerateMacrosAndTargetsTarget ( module );
@@ -1429,7 +1451,8 @@ archiveFilename.c_str (), importLibraryDependencies.c_str () );
- string linkerParameters ( "-Wl,--subsystem,native -Wl,--entry,_DriverEntry@8 -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll" ); + string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", + module.entrypoint.c_str () ); GenerateLinkerCommand ( module, "${gcc}", linkerParameters, @@ -1476,7 +1499,8 @@ { string* cflags = new string ( "-D__NTDRIVER__" ); GenerateMacrosAndTargetsTarget ( module, - cflags ); + cflags, + NULL ); delete cflags;
fprintf ( fMakefile, "%s: %s %s\n", @@ -1484,7 +1508,8 @@ archiveFilename.c_str (), importLibraryDependencies.c_str () );
- string linkerParameters ( "-Wl,--subsystem,native -Wl,--entry,_DriverEntry@8 -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll" ); + string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", + module.entrypoint.c_str () ); GenerateLinkerCommand ( module, "${gcc}", linkerParameters, @@ -1546,7 +1571,8 @@ archiveFilename.c_str (), importLibraryDependencies.c_str () );
- string linkerParameters ( "-Wl,--subsystem,native -Wl,--entry,_DllMainCRTStartup@12 -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll" ); + string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll", + module.entrypoint.c_str () ); GenerateLinkerCommand ( module, "${gcc}", linkerParameters, @@ -1618,7 +1644,8 @@ objectFilenames.c_str (), linkingDependencies.c_str () );
- string linkerParameters ( "-Wl,--subsystem,console -Wl,--entry,_DllMain@12 -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll" ); + string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll", + module.entrypoint.c_str () ); GenerateLinkerCommand ( module, "${gcc}", linkerParameters, @@ -1669,7 +1696,8 @@ objectFilenames.c_str (), importLibraryDependencies.c_str () );
- string linkerParameters ( "-Wl,--subsystem,windows -Wl,--entry,_WinMainCRTStartup -Wl,--image-base,0x00400000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000" ); + string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,0x00400000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000", + module.entrypoint.c_str () ); GenerateLinkerCommand ( module, "${gcc}", linkerParameters, @@ -1734,6 +1762,40 @@ }
+static MingwBootSectorModuleHandler bootsectormodule_handler; + +MingwBootSectorModuleHandler::MingwBootSectorModuleHandler () + : MingwModuleHandler ( BootSector ) +{ +} + +void +MingwBootSectorModuleHandler::Process ( const Module& module ) +{ + GeneratePreconditionDependencies ( module ); + GenerateBootSectorModuleTarget ( module ); + GenerateInvocations ( module ); +} + +void +MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ( const Module& module ) +{ + string objectsMacro = GetObjectsMacro ( module ); + + string* nasmflags = new string ( "-f bin" ); + GenerateMacrosAndTargetsTarget ( module, + NULL, + nasmflags); + + fprintf ( fMakefile, ".PHONY: %s\n\n", + module.name.c_str ()); + fprintf ( fMakefile, + "%s: %s\n", + module.name.c_str (), + objectsMacro.c_str () ); +} + + static MingwIsoModuleHandler isomodule_handler;
MingwIsoModuleHandler::MingwIsoModuleHandler () @@ -1752,10 +1814,28 @@ void MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module ) { - string target ( FixupTargetFilename ( module.GetPath ()) ); + string isoboot = "$(ROS_INTERMEDIATE)" + FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" );
- fprintf ( fMakefile, "%s: all\n", - target.c_str () ); + fprintf ( fMakefile, ".PHONY: %s\n\n", + module.name.c_str ()); fprintf ( fMakefile, - "\t\n" ); + "%s: all %s\n", + module.name.c_str (), + isoboot.c_str () ); + fprintf ( fMakefile, + "\t${cabman} /C %s /L $(ROS_INTERMEDIATE)%s /I\n", + FixupTargetFilename ( "bootdata/packages/reactos.dff" ).c_str (), + FixupTargetFilename ( "bootcd/reactos" ).c_str () ); + fprintf ( fMakefile, + "\t${cabman} /C %s /RC $(ROS_INTERMEDIATE)%s /L $(BOOTCD_DIR)reactos /N\n", + FixupTargetFilename ( "bootdata/packages/reactos.dff" ).c_str (), + FixupTargetFilename ( "bootcd/reactos/reactos.inf" ).c_str () ); + fprintf ( fMakefile, + "\t- ${rm} $(ROS_INTERMEDIATE)%s\n", + FixupTargetFilename ( "bootcd/reactos/reactos.inf" ).c_str () ); + fprintf ( fMakefile, + "\t${cdmake} -v -m -b %s $(ROS_INTERMEDIATE)bootcd REACTOS ReactOS.iso\n", + isoboot.c_str () ); + fprintf ( fMakefile, + "\n" ); } _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-01-22 17:38:31 UTC (rev 13216) @@ -42,7 +42,8 @@
void GenerateMacrosAndTargetsHost ( const Module& module ) const; void GenerateMacrosAndTargetsTarget ( const Module& module ) const; void GenerateMacrosAndTargetsTarget ( const Module& module, - const std::string* clags ) const; + const std::string* cflags, + const std::string* nasmflags ) const; std::string GetInvocationDependencies ( const Module& module ) const; std::string GetInvocationParameters ( const Invoke& invoke ) const; void GenerateInvocations ( const Module& module ) const; @@ -141,7 +142,8 @@ const std::string& cc, const std::string& cppc, const std::string& ar, - const std::string* clags ) const; + const std::string* clags, + const std::string* nasmflags ) const; std::string GetPreconditionDependenciesName ( const Module& module ) const; std::string GetSpecObjectDependencies ( const std::string& filename ) const; }; @@ -248,6 +250,16 @@ };
+class MingwBootSectorModuleHandler : public MingwModuleHandler +{ +public: + MingwBootSectorModuleHandler (); + virtual void Process ( const Module& module ); +private: + void GenerateBootSectorModuleTarget ( const Module& module ); +}; + + class MingwIsoModuleHandler : public MingwModuleHandler { public: _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-22 17:38:31 UTC (rev 13216) @@ -61,10 +61,16 @@
type = GetModuleType ( node.location, *att );
att = moduleNode.GetAttribute ( "extension", false ); - if (att != NULL) + if ( att != NULL ) extension = att->value; else extension = GetDefaultModuleExtension (); + + att = moduleNode.GetAttribute ( "entrypoint", false ); + if ( att != NULL ) + entrypoint = att->value; + else + entrypoint = GetDefaultModuleEntrypoint (); }
Module::~Module () @@ -265,6 +271,8 @@ return Win32GUI; if ( attribute.value == "bootloader" ) return BootLoader; + if ( attribute.value == "bootsector" ) + return BootSector; if ( attribute.value == "iso" ) return Iso; throw InvalidAttributeValueException ( location, @@ -293,6 +301,8 @@ case KernelModeDriver: case BootLoader: return ".sys"; + case BootSector: + return ".o"; case Iso: return ".iso"; } @@ -300,6 +310,35 @@ __LINE__ ); }
+string +Module::GetDefaultModuleEntrypoint () const +{ + switch (type) + { + case Kernel: + return "_NtProcessStartup"; + case Win32GUI: + return "_WinMainCRTStartup"; + case KernelModeDLL: + return "_DriverEntry@8"; + case NativeDLL: + return "_DllMainCRTStartup@12"; + case Win32DLL: + return "_DllMain@12"; + case KernelModeDriver: + return "_DriverEntry@8"; + case BuildTool: + case StaticLibrary: + case ObjectLibrary: + case BootLoader: + case BootSector: + case Iso: + return ""; + } + throw InvalidOperationException ( __FILE__, + __LINE__ ); +} + bool Module::HasImportLibrary () const { _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h --- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-22 15:48:00 UTC (rev 13215) +++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-22 17:38:31 UTC (rev 13216) @@ -80,6 +80,7 @@
Win32DLL, Win32GUI, BootLoader, + BootSector, Iso };
@@ -91,6 +92,7 @@ const XMLElement& node; std::string name; std::string extension; + std::string entrypoint; std::string path; ModuleType type; ImportLibrary* importLibrary; @@ -123,6 +125,7 @@ void ProcessXML(); private: std::string GetDefaultModuleExtension () const; + std::string GetDefaultModuleEntrypoint () const; void ProcessXMLSubElement ( const XMLElement& e, const std::string& path, If* pIf = NULL );