* Build freeldr * Add BootLoader and ObjectLibrary module types * Add <compilerflag> tag Modified: branches/xmlbuildsystem/reactos/ReactOS.xml Added: branches/xmlbuildsystem/reactos/boot/boot.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base64k.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_main.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_startup.xml Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.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 Added: branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/makefile Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h _____
Modified: branches/xmlbuildsystem/reactos/ReactOS.xml --- branches/xmlbuildsystem/reactos/ReactOS.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/ReactOS.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -21,6 +21,9 @@
<include>w32api/include</include> <include>w32api/include/ddk</include>
+ <directory name="boot"> + <xi:include href="boot/boot.xml" /> + </directory> <directory name="drivers"> <xi:include href="drivers/directory.xml" /> </directory> _____
Added: branches/xmlbuildsystem/reactos/boot/boot.xml --- branches/xmlbuildsystem/reactos/boot/boot.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/boot.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,3 @@
+<directory name="freeldr"> + <xi:include href="freeldr/freeldr.xml" /> +</directory> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,6 @@
+<module name="freeldr" type="bootloader"> + <library>freeldr_startup</library> + <library>freeldr_base64k</library> + <library>freeldr_base</library> + <library>freeldr_main</library> +</module> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,107 @@
+<module name="freeldr_base" type="objectlibrary"> + <include base="freeldr_base">include</include> + <compilerflag>-nostdlib</compilerflag> + <compilerflag>-nostdinc</compilerflag> + <compilerflag>-ffreestanding</compilerflag> + <compilerflag>-fno-builtin</compilerflag> + <compilerflag>-fno-inline</compilerflag> + <compilerflag>-fno-zero-initialized-in-bss</compilerflag> + <compilerflag>-Os</compilerflag> + <directory name="arch"> + <if property="ARCH" value="i386"> + <directory name="i386"> + <file>_alloca.S</file> + <file>archmach.c</file> + <file>hardware.c</file> + <file>hwacpi.c</file> + <file>hwapm.c</file> + <file>hwcpu.c</file> + <file>hwpci.c</file> + <file>i386disk.c</file> + <file>i386rtl.c</file> + <file>i386vid.c</file> + <file>machpc.c</file> + <file>machxbox.c</file> + <file>pccons.c</file> + <file>pcdisk.c</file> + <file>pcmem.c</file> + <file>pcrtc.c</file> + <file>pcvideo.c</file> + <file>portio.c</file> + <file>xboxcons.c</file> + <file>xboxdisk.c</file> + <file>xboxfont.c</file> + <file>xboxhw.c</file> + <file>xboxmem.c</file> + <file>xboxrtc.c</file> + <file>xboxvideo.c</file> + </directory> + </if> + </directory> + <directory name="cache"> + <file>blocklist.c</file> + <file>cache.c</file> + </directory> + <directory name="comm"> + <file>rs232.c</file> + </directory> + <directory name="disk"> + <file>disk.c</file> + <file>partition.c</file> + </directory> + <directory name="fs"> + <file>ext2.c</file> + <file>fat.c</file> + <file>fs.c</file> + <file>fsrec.c</file> + <file>iso.c</file> + <file>ntfs.c</file> + </directory> + <directory name="inifile"> + <file>ini_init.c</file> + <file>inifile.c</file> + <file>parse.c</file> + </directory> + <directory name="math"> + <file>libgcc2.c</file> + </directory> + <directory name="mm"> + <file>meminit.c</file> + <file>mm.c</file> + </directory> + <directory name="reactos"> + <file>arcname.c</file> + <file>binhive.c</file> + <file>reactos.c</file> + <file>registry.c</file> + </directory> + <directory name="rtl"> + <file>list.c</file> + <file>memcmp.c</file> + <file>memcpy.c</file> + <file>memmove.c</file> + <file>memset.c</file> + <file>print.c</file> + <file>stdlib.c</file> + <file>string.c</file> + </directory> + <directory name="ui"> + <file>gui.c</file> + <file>tui.c</file> + <file>tuimenu.c</file> + <file>ui.c</file> + </directory> + <directory name="video"> + <file>bank.c</file> + <file>fade.c</file> + <file>palette.c</file> + <file>pixel.c</file> + <file>video.c</file> + </directory> + <file>freeldr.c</file> + <file>debug.c</file> + <file>multiboot.c</file> + <file>version.c</file> + <file>cmdline.c</file> + <file>machine.c</file> +</module> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base64k.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base64k.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_base64k.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,25 @@
+<module name="freeldr_base64k" type="objectlibrary"> + <include base="freeldr_base64k">include</include> + <compilerflag>-nostdlib</compilerflag> + <compilerflag>-nostdinc</compilerflag> + <compilerflag>-ffreestanding</compilerflag> + <compilerflag>-fno-builtin</compilerflag> + <compilerflag>-fno-inline</compilerflag> + <compilerflag>-fno-zero-initialized-in-bss</compilerflag> + <compilerflag>-Os</compilerflag> + <directory name="arch"> + <if property="ARCH" value="i386"> + <directory name="i386"> + <file>boot.S</file> + <file>drvmap.S</file> + <file>i386cpu.S</file> + <file>i386idt.S</file> + <file>i386pnp.S</file> + <file>i386trap.S</file> + <file>int386.S</file> + <file>linux.S</file> + <file>mb.S</file> + </directory> + </if> + </directory> +</module> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_main.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_main.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_main.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,20 @@
+<module name="freeldr_main" type="objectlibrary"> + <include base="freeldr_main">include</include> + <compilerflag>-nostdlib</compilerflag> + <compilerflag>-nostdinc</compilerflag> + <compilerflag>-ffreestanding</compilerflag> + <compilerflag>-fno-builtin</compilerflag> + <compilerflag>-fno-inline</compilerflag> + <compilerflag>-fno-zero-initialized-in-bss</compilerflag> + <compilerflag>-Os</compilerflag> + <directory name="inffile"> + <file>inffile.c</file> + </directory> + <file>bootmgr.c</file> + <file>drivemap.c</file> + <file>miscboot.c</file> + <file>options.c</file> + <file>linuxboot.c</file> + <file>oslist.c</file> + <file>custom.c</file> +</module> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_startup.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_startup.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr/freeldr_startup.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,17 @@
+<module name="freeldr_startup" type="objectlibrary"> + <include base="freeldr_startup">include</include> + <compilerflag>-nostdlib</compilerflag> + <compilerflag>-nostdinc</compilerflag> + <compilerflag>-ffreestanding</compilerflag> + <compilerflag>-fno-builtin</compilerflag> + <compilerflag>-fno-inline</compilerflag> + <compilerflag>-fno-zero-initialized-in-bss</compilerflag> + <directory name="arch"> + <if property="ARCH" value="i386"> + <directory name="i386"> + <file first="true">fathelp.asm</file> + <file>arch.S</file> + </directory> + </if> + </directory> +</module> _____
Added: branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml --- branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/boot/freeldr/freeldr.xml 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,25 @@
+<!--<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> + <directory name="bootsect"> + <file>dosmbr.asm</file> + <file>ext2.asm</file> + <file>fat32.asm</file> + <file>fat.asm</file> + <file>isoboot.asm</file> + <file>win2k.asm</file> + <file>wxpfat16.asm</file> + </directory> +</module>--> +<directory name="freeldr"> + <xi:include href="freeldr/freeldr_startup.xml" /> + <xi:include href="freeldr/freeldr_base64k.xml" /> + <xi:include href="freeldr/freeldr_base.xml" /> + <xi:include href="freeldr/freeldr_main.xml" /> + <xi:include href="freeldr/freeldr.xml" /> +</directory> _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-01-22 14:07:45 UTC (rev 13211) @@ -162,22 +162,26 @@
{ #ifdef WIN32 fprintf ( fMakefile, "host_gcc = gcc\n" ); + fprintf ( fMakefile, "host_ld = ld\n" ); fprintf ( fMakefile, "host_ar = ar\n" ); - fprintf ( fMakefile, "host_ld = ld\n" ); + fprintf ( fMakefile, "host_objcopy = objcopy\n" ); fprintf ( fMakefile, "rm = del /f /q\n" ); fprintf ( fMakefile, "gcc = gcc\n" ); fprintf ( fMakefile, "ld = ld\n" ); fprintf ( fMakefile, "ar = ar\n" ); + fprintf ( fMakefile, "objcopy = objcopy\n" ); fprintf ( fMakefile, "dlltool = dlltool\n" ); fprintf ( fMakefile, "windres = windres\n" ); #else fprintf ( fMakefile, "host_gcc = gcc\n" ); + fprintf ( fMakefile, "host_ld = ld\n" ); fprintf ( fMakefile, "host_ar = ar\n" ); - fprintf ( fMakefile, "host_ld = ld\n" ); + fprintf ( fMakefile, "host_objcopy = objcopy\n" ); fprintf ( fMakefile, "rm = rm -f\n" ); fprintf ( fMakefile, "gcc = mingw32-gcc\n" ); fprintf ( fMakefile, "ld = mingw32-ld\n" ); fprintf ( fMakefile, "ar = mingw32-ar\n" ); + fprintf ( fMakefile, "objcopy = mingw32-objcopy\n" ); fprintf ( fMakefile, "dlltool = mingw32-dlltool\n" ); fprintf ( fMakefile, "windres = mingw32-windres\n" ); #endif @@ -207,9 +211,12 @@ for ( size_t i = 0; i < ProjectNode.modules.size (); i++ ) { Module& module = *ProjectNode.modules[i]; - fprintf ( fMakefile, - " %s", - FixupTargetFilename ( module.GetPath () ).c_str () ); + if ( module.type != ObjectLibrary ) + { + fprintf ( fMakefile, + " %s", + FixupTargetFilename ( module.GetPath () ).c_str () ); + } } fprintf ( fMakefile, "\n\t\n\n" ); } _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-01-22 14:07:45 UTC (rev 13211) @@ -145,13 +145,19 @@
else return false; } - + string +MingwModuleHandler::GetImportLibraryDependency ( const Module& importedModule ) const +{ + if ( importedModule.type == ObjectLibrary ) + return GetObjectsMacro ( importedModule ); + else + return PassThruCacheDirectory ( FixupTargetFilename ( importedModule.GetDependencyPath () ) ); +} + +string MingwModuleHandler::GetImportLibraryDependencies ( const Module& module ) const { - if ( module.libraries.size () == 0 ) - return ""; - string dependencies ( "" ); for ( size_t i = 0; i < module.libraries.size (); i++ ) { @@ -159,7 +165,7 @@ dependencies += " "; const Module* importedModule = module.project.LocateModule ( module.libraries[i]->name ); assert ( importedModule != NULL ); - dependencies += PassThruCacheDirectory ( FixupTargetFilename ( importedModule->GetDependencyPath () ) ).c_str (); + dependencies += GetImportLibraryDependency ( *importedModule ); } return dependencies; } @@ -379,6 +385,20 @@
string +MingwModuleHandler::GenerateCompilerParametersFromVector ( const vector<CompilerFlag*>& compilerFlags ) const +{ + string parameters; + for ( size_t i = 0; i < compilerFlags.size (); i++ ) + { + CompilerFlag& compilerFlag = *compilerFlags[i]; + if ( parameters.length () > 0 ) + parameters += " "; + parameters += compilerFlag.flag; + } + return parameters; +} + +string MingwModuleHandler::GenerateLinkerParametersFromVector ( const vector<LinkerFlag*>& linkerFlags ) const { string parameters; @@ -402,7 +422,8 @@ MingwModuleHandler::GenerateMacro ( const char* assignmentOperation, const string& macro, const vector<Include*>& includes, - const vector<Define*>& defines ) const + const vector<Define*>& defines, + const vector<CompilerFlag*>* compilerFlags ) const { size_t i;
@@ -411,6 +432,19 @@ "%s %s", macro.c_str(), assignmentOperation ); + + if ( compilerFlags != NULL ) + { + string compilerParameters = GenerateCompilerParametersFromVector ( *compilerFlags ); + if ( compilerParameters.size () > 0 ) + { + fprintf ( + fMakefile, + " %s", + compilerParameters.c_str () ); + } + } + for ( i = 0; i < includes.size(); i++ ) { fprintf ( @@ -440,6 +474,7 @@ const vector<File*>& files, const vector<Include*>& includes, const vector<Define*>& defines, + const vector<CompilerFlag*>* compilerFlags, const vector<LinkerFlag*>* linkerFlags, const vector<If*>& ifs, const string& cflags_macro, @@ -455,11 +490,13 @@ GenerateMacro ( assignmentOperation, cflags_macro, includes, - defines ); + defines, + compilerFlags ); GenerateMacro ( assignmentOperation, windresflags_macro, includes, - defines ); + defines, + compilerFlags ); } if ( linkerFlags != NULL ) @@ -527,6 +564,7 @@ rIf.includes, rIf.defines, NULL, + NULL, rIf.ifs, cflags_macro, nasmflags_macro, @@ -554,6 +592,7 @@ module.files, module.includes, module.defines, + &module.compilerFlags, &module.linkerFlags, module.ifs, cflags_macro, @@ -1225,6 +1264,7 @@ archiveFilename.c_str () ); }
+ static MingwKernelModuleHandler kernelmodule_handler;
MingwKernelModuleHandler::MingwKernelModuleHandler () @@ -1318,6 +1358,28 @@ }
+static MingwObjectLibraryModuleHandler objectlibrary_handler; + +MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler () + : MingwModuleHandler ( ObjectLibrary ) +{ +} + +void +MingwObjectLibraryModuleHandler::Process ( const Module& module ) +{ + GeneratePreconditionDependencies ( module ); + GenerateObjectLibraryModuleTarget ( module ); + GenerateInvocations ( module ); +} + +void +MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ( const Module& module ) +{ + GenerateMacrosAndTargetsTarget ( module ); +} + + static MingwKernelModeDLLModuleHandler kernelmodedll_handler;
MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler () @@ -1607,3 +1669,52 @@ target.c_str ()); } } + + +static MingwBootLoaderModuleHandler bootloadermodule_handler; + +MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler () + : MingwModuleHandler ( BootLoader ) +{ +} + +void +MingwBootLoaderModuleHandler::Process ( const Module& module ) +{ + GeneratePreconditionDependencies ( module ); + GenerateBootLoaderModuleTarget ( module ); + GenerateInvocations ( module ); +} + +void +MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget ( const Module& module ) +{ + static string ros_junk ( "$(ROS_TEMPORARY)" ); + string targetName ( module.GetTargetName () ); + string target ( FixupTargetFilename (module.GetPath ()) ); + string workingDirectory = GetWorkingDirectory (); + string junk_tmp = ros_junk + module.name + ".junk.tmp"; + string objectsMacro = GetObjectsMacro ( module ); + string importLibraryDependencies = GetImportLibraryDependencies ( module ); + + GenerateMacrosAndTargetsTarget ( module ); + + fprintf ( fMakefile, "%s: %s %s\n", + target.c_str (), + objectsMacro.c_str (), + importLibraryDependencies.c_str () ); + + fprintf ( fMakefile, + "\t${ld} %s -N -Ttext=0x8000 -o %s %s %s\n", + GetLinkerMacro ( module ).c_str (), + junk_tmp.c_str (), + objectsMacro.c_str (), + importLibraryDependencies.c_str () ); + fprintf ( fMakefile, + "\t${objcopy} -O binary %s %s\n", + junk_tmp.c_str (), + target.c_str () ); + fprintf ( fMakefile, + "\t${rm} %s\n", + junk_tmp.c_str () ); +} _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-01-22 14:07:45 UTC (rev 13211) @@ -29,6 +29,7 @@
std::string GetActualSourceFilename ( const std::string& filename ) const; std::string GetModuleArchiveFilename ( const Module& module ) const; bool IsGeneratedFile ( const File& file ) const; + std::string GetImportLibraryDependency ( const Module& importedModule ) const; std::string GetImportLibraryDependencies ( const Module& module ) const; std::string GetModuleDependencies ( const Module& module ) const; std::string GetAllDependencies ( const Module& module ) const; @@ -65,16 +66,19 @@ std::string GenerateGccDefineParametersFromVector ( const std::vector<Define*>& defines ) const; std::string GenerateGccDefineParameters ( const Module& module ) const; std::string GenerateGccIncludeParametersFromVector ( const std::vector<Include*>& includes ) const; + std::string GenerateCompilerParametersFromVector ( const std::vector<CompilerFlag*>& compilerFlags ) const; std::string GenerateLinkerParametersFromVector ( const std::vector<LinkerFlag*>& linkerFlags ) const; std::string GenerateLinkerParameters ( const Module& module ) const; void GenerateMacro ( const char* assignmentOperation, const std::string& macro, const std::vector<Include*>& includes, - const std::vector<Define*>& defines ) const; + const std::vector<Define*>& defines, + const std::vector<CompilerFlag*>* compilerFlags ) const; void GenerateMacros ( const char* op, const std::vector<File*>& files, const std::vector<Include*>& includes, const std::vector<Define*>& defines, + const std::vector<CompilerFlag*>* compilerFlags, const std::vector<LinkerFlag*>* linkerFlags, const std::vector<If*>& ifs, const std::string& cflags_macro, @@ -170,6 +174,16 @@ };
+class MingwObjectLibraryModuleHandler : public MingwModuleHandler +{ +public: + MingwObjectLibraryModuleHandler (); + virtual void Process ( const Module& module ); +private: + void GenerateObjectLibraryModuleTarget ( const Module& module ); +}; + + class MingwKernelModeDLLModuleHandler : public MingwModuleHandler { public: @@ -220,4 +234,14 @@ void GenerateWin32GUIModuleTarget ( const Module& module ); };
+ +class MingwBootLoaderModuleHandler : public MingwModuleHandler +{ +public: + MingwBootLoaderModuleHandler (); + virtual void Process ( const Module& module ); +private: + void GenerateBootLoaderModuleTarget ( const Module& module ); +}; + #endif /* MINGW_MODULEHANDLER_H */ _____
Added: branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp 2005-01-22 14:07:45 UTC (rev 13211) @@ -0,0 +1,47 @@
+#include "pch.h" +#include <assert.h> + +#include "rbuild.h" + +using std::string; +using std::vector; + +CompilerFlag::CompilerFlag ( const Project& project_, + const XMLElement& compilerFlagNode ) + : project(project_), + module(NULL), + node(compilerFlagNode) +{ + Initialize(); +} + +CompilerFlag::CompilerFlag ( const Project& project_, + const Module* module_, + const XMLElement& compilerFlagNode ) + : project(project_), + module(module_), + node(compilerFlagNode) +{ + Initialize(); +} + +CompilerFlag::~CompilerFlag () +{ +} + +void +CompilerFlag::Initialize () +{ +} + +void +CompilerFlag::ProcessXML () +{ + if (node.value.size () == 0) + { + throw InvalidBuildFileException ( + node.location, + "<compilerflag> is empty." ); + } + flag = node.value; +} _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/makefile --- branches/xmlbuildsystem/reactos/tools/rbuild/makefile 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/makefile 2005-01-22 14:07:45 UTC (rev 13211) @@ -17,6 +17,7 @@
BASE_OBJECTS = \ $(BACKEND_BASE_OBJECTS) \ + compilerflag.o \ define.o \ exception.o \ include.o \ _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-22 14:07:45 UTC (rev 13211) @@ -1,5 +1,3 @@
-// module.cpp - #include "pch.h" #include <assert.h>
@@ -74,6 +72,8 @@ delete dependencies[i]; for ( i = 0; i < ifs.size(); i++ ) delete ifs[i]; + for ( i = 0; i < compilerFlags.size(); i++ ) + delete compilerFlags[i]; for ( i = 0; i < linkerFlags.size(); i++ ) delete linkerFlags[i]; } @@ -98,6 +98,8 @@ dependencies[i]->ProcessXML (); for ( i = 0; i < ifs.size(); i++ ) ifs[i]->ProcessXML(); + for ( i = 0; i < compilerFlags.size(); i++ ) + compilerFlags[i]->ProcessXML(); for ( i = 0; i < linkerFlags.size(); i++ ) linkerFlags[i]->ProcessXML(); } @@ -203,6 +205,11 @@ ifs.push_back ( pIf ); subs_invalid = false; } + else if ( e.name == "compilerflag" ) + { + compilerFlags.push_back ( new CompilerFlag ( project, this, e ) ); + subs_invalid = true; + } else if ( e.name == "linkerflag" ) { linkerFlags.push_back ( new LinkerFlag ( project, this, e ) ); @@ -230,6 +237,8 @@ return BuildTool; if ( attribute.value == "staticlibrary" ) return StaticLibrary; + if ( attribute.value == "objectlibrary" ) + return ObjectLibrary; if ( attribute.value == "kernel" ) return Kernel; if ( attribute.value == "kernelmodedll" ) @@ -242,6 +251,8 @@ return Win32DLL; if ( attribute.value == "win32gui" ) return Win32GUI; + if ( attribute.value == "bootloader" ) + return BootLoader; throw InvalidAttributeValueException ( location, attribute.name, attribute.value ); @@ -256,6 +267,8 @@ return EXEPOSTFIX; case StaticLibrary: return ".a"; + case ObjectLibrary: + return ".o"; case Kernel: case Win32GUI: return ".exe"; @@ -264,6 +277,7 @@ case Win32DLL: return ".dll"; case KernelModeDriver: + case BootLoader: return ".sys"; } throw InvalidOperationException ( __FILE__, _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h --- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-22 13:34:27 UTC (rev 13210) +++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-22 14:07:45 UTC (rev 13211) @@ -32,6 +32,7 @@
class Dependency; class ImportLibrary; class If; +class CompilerFlag; class LinkerFlag; class Property;
@@ -71,12 +72,14 @@ { BuildTool, StaticLibrary, + ObjectLibrary, Kernel, KernelModeDLL, KernelModeDriver, NativeDLL, Win32DLL, - Win32GUI + Win32GUI, + BootLoader };
@@ -97,6 +100,7 @@ std::vector<Invoke*> invocations; std::vector<Dependency*> dependencies; std::vector<If*> ifs; + std::vector<CompilerFlag*> compilerFlags; std::vector<LinkerFlag*> linkerFlags;
Module ( const Project& project, @@ -277,6 +281,26 @@ };
+class CompilerFlag +{ +public: + const Project& project; + const Module* module; + const XMLElement& node; + std::string flag; + + CompilerFlag ( const Project& project, + const XMLElement& compilerFlagNode ); + CompilerFlag ( const Project& project, + const Module* module, + const XMLElement& compilerFlagNode ); + ~CompilerFlag (); + void ProcessXML(); +private: + void Initialize(); +}; + + class LinkerFlag { public: