* KernelModeDriver module support
* Build afd.sys
Modified: branches/xmlbuildsystem/reactos/ReactOS.xml
Modified: branches/xmlbuildsystem/reactos/drivers/directory.xml
Added: branches/xmlbuildsystem/reactos/drivers/net/afd/afd.xml
Added: branches/xmlbuildsystem/reactos/drivers/net/directory.xml
Modified: branches/xmlbuildsystem/reactos/include/ndis.h
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ntoskrnl.xml
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/include.cpp
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-16 11:52:30 UTC
(rev 13077)
+++ branches/xmlbuildsystem/reactos/ReactOS.xml 2005-01-16 13:51:33 UTC
(rev 13078)
@@ -19,6 +19,7 @@
<include>include</include>
<include>w32api/include</include>
+ <include>w32api/include/ddk</include>
<directory name="drivers">
<xi:include href="drivers/directory.xml" />
_____
Modified: branches/xmlbuildsystem/reactos/drivers/directory.xml
--- branches/xmlbuildsystem/reactos/drivers/directory.xml
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/drivers/directory.xml
2005-01-16 13:51:33 UTC (rev 13078)
@@ -1,3 +1,6 @@
<directory name="lib">
<xi:include href="lib/directory.xml" />
-</directory>
\ No newline at end of file
+</directory>
+<directory name="net">
+ <xi:include href="net/directory.xml" />
+</directory>
_____
Added: branches/xmlbuildsystem/reactos/drivers/net/afd/afd.xml
--- branches/xmlbuildsystem/reactos/drivers/net/afd/afd.xml
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/drivers/net/afd/afd.xml
2005-01-16 13:51:33 UTC (rev 13078)
@@ -0,0 +1,24 @@
+<module name="afd" type="kernelmodedriver">
+ <importlibrary definition="afd.def" />
+ <include base="afd">include</include>
+ <include base="ReactOS">include/afd</include>
+ <define name="__USE_W32API" />
+ <library>ntoskrnl</library>
+ <library>hal</library>
+ <library>pseh</library>
+ <directory name="afd">
+ <file>bind.c</file>
+ <file>connect.c</file>
+ <file>context.c</file>
+ <file>info.c</file>
+ <file>listen.c</file>
+ <file>lock.c</file>
+ <file>main.c</file>
+ <file>read.c</file>
+ <file>select.c</file>
+ <file>tdi.c</file>
+ <file>tdiconn.c</file>
+ <file>write.c</file>
+ </directory>
+ <file>afd.rc</file>
+</module>
_____
Added: branches/xmlbuildsystem/reactos/drivers/net/directory.xml
--- branches/xmlbuildsystem/reactos/drivers/net/directory.xml
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/drivers/net/directory.xml
2005-01-16 13:51:33 UTC (rev 13078)
@@ -0,0 +1,3 @@
+<directory name="afd">
+ <xi:include href="afd/afd.xml" />
+</directory>
_____
Modified: branches/xmlbuildsystem/reactos/include/ndis.h
--- branches/xmlbuildsystem/reactos/include/ndis.h 2005-01-16
11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/include/ndis.h 2005-01-16
13:51:33 UTC (rev 13078)
@@ -1 +1,5 @@
+#ifdef __USE_W32API
+#include_next <ndis.h>
+#else
#include "net/ndis.h"
+#endif
_____
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ntoskrnl.xml
--- branches/xmlbuildsystem/reactos/ntoskrnl/ntoskrnl.xml
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/ntoskrnl.xml
2005-01-16 13:51:33 UTC (rev 13078)
@@ -1,4 +1,5 @@
<module name="ntoskrnl" type="kernel">
+ <importlibrary definition="ntoskrnl.def" />
<dependency>buildno</dependency>
<dependency>genntdll</dependency>
<dependency>wmc</dependency>
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp
---
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-01-16 11:52:30 UTC (rev 13077)
+++
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-01-16 13:51:33 UTC (rev 13078)
@@ -641,6 +641,13 @@
}
string
+MingwModuleHandler::GetCFlagsMacro ( const Module& module ) const
+{
+ return ssprintf ( "$(%s_CFLAGS)",
+ module.name.c_str () );
+}
+
+string
MingwModuleHandler::GetObjectsMacro ( const Module& module ) const
{
return ssprintf ( "$(%s_OBJS)",
@@ -658,7 +665,8 @@
MingwModuleHandler::GenerateMacrosAndTargets (
const Module& module,
const string& cc,
- const string& ar ) const
+ const string& ar,
+ const string* cflags ) const
{
string cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str
());
string nasmflagsMacro = ssprintf ("%s_NASMFLAGS",
module.name.c_str ());
@@ -673,12 +681,20 @@
linkerFlagsMacro,
objectsMacro );
+ if ( cflags != NULL )
+ {
+ fprintf ( fMakefile,
+ "%s += %s\n\n",
+ cflagsMacro.c_str (),
+ cflags->c_str () );
+ }
+
// generate phony target for module name
fprintf ( fMakefile, ".PHONY: %s\n",
- module.name.c_str() );
+ module.name.c_str () );
fprintf ( fMakefile, "%s: %s\n\n",
- module.name.c_str(),
- module.GetPath().c_str() );
+ module.name.c_str (),
+ module.GetPath ().c_str () );
// future references to the macros will be to get their values
cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ());
@@ -710,15 +726,23 @@
void
MingwModuleHandler::GenerateMacrosAndTargetsHost ( const Module& module
) const
{
- GenerateMacrosAndTargets ( module, "${host_gcc}", "${host_ar}"
);
+ GenerateMacrosAndTargets ( module, "${host_gcc}", "${host_ar}",
NULL );
}
void
MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module&
module ) const
{
- GenerateMacrosAndTargets ( module, "${gcc}", "${ar}" );
+ GenerateMacrosAndTargetsTarget ( module,
+ NULL );
}
+void
+MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module&
module,
+ const string*
clags ) const
+{
+ GenerateMacrosAndTargets ( module, "${gcc}", "${ar}", clags );
+}
+
string
MingwModuleHandler::GetInvocationDependencies ( const Module& module )
const
{
@@ -857,7 +881,23 @@
fprintf ( fMakefile, "\n" );
}
+void
+MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( const Module&
module ) const
+{
+ if ( module.importLibrary != NULL )
+ {
+ fprintf ( fMakefile, "%s:\n",
+ module.GetDependencyPath ().c_str () );
+ fprintf ( fMakefile,
+ "\t${dlltool} --dllname %s --def %s
--output-lib %s --kill-at\n\n",
+ module.GetTargetName ().c_str (),
+ FixupTargetFilename ( module.GetBasePath () +
SSEP + module.importLibrary->definition ).c_str (),
+ FixupTargetFilename ( module.GetDependencyPath
() ).c_str () );
+ }
+}
+
+
static MingwBuildToolModuleHandler buildtool_handler;
MingwBuildToolModuleHandler::MingwBuildToolModuleHandler()
@@ -922,6 +962,8 @@
GenerateMacrosAndTargetsTarget ( module );
+ GenerateImportLibraryTargetIfNeeded ( module );
+
fprintf ( fMakefile, "%s: %s %s\n",
target.c_str (),
objectsMacro.c_str (),
@@ -1005,21 +1047,68 @@
string archiveFilename = GetModuleArchiveFilename ( module );
string importLibraryDependencies = GetImportLibraryDependencies
( module );
- if (module.importLibrary != NULL)
+ GenerateImportLibraryTargetIfNeeded ( module );
+
+ if ( module.files.size () > 0 )
{
- fprintf ( fMakefile, "%s:\n",
- module.GetDependencyPath ().c_str () );
+ GenerateMacrosAndTargetsTarget ( module );
+ fprintf ( fMakefile, "%s: %s %s\n",
+ target.c_str (),
+ 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 linkerCommand = GenerateLinkerCommand ( module,
+ "${gcc}",
+
linkerParameters,
+ archiveFilename
);
fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s
--output-lib %s --kill-at\n\n",
- module.GetTargetName ().c_str (),
- FixupTargetFilename ( module.GetBasePath () +
SSEP + module.importLibrary->definition ).c_str (),
- FixupTargetFilename ( module.GetDependencyPath
() ).c_str () );
+ "\t%s\n\n",
+ linkerCommand.c_str () );
}
+ else
+ {
+ fprintf ( fMakefile, "%s:\n",
+ target.c_str ());
+ fprintf ( fMakefile, ".PHONY: %s\n\n",
+ target.c_str ());
+ }
+}
- if (module.files.size () > 0)
+
+static MingwKernelModeDriverModuleHandler kernelmodedriver_handler;
+
+MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler
()
+ : MingwModuleHandler ( KernelModeDriver )
+{
+}
+
+void
+MingwKernelModeDriverModuleHandler::Process ( const Module& module )
+{
+ GeneratePreconditionDependencies ( module );
+ GenerateKernelModeDriverModuleTarget ( module );
+ GenerateInvocations ( module );
+}
+
+void
+MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarge
t ( const Module& module )
+{
+ static string ros_junk ( "$(ROS_TEMPORARY)" );
+ string target ( FixupTargetFilename ( module.GetPath () ) );
+ string workingDirectory = GetWorkingDirectory ( );
+ string archiveFilename = GetModuleArchiveFilename ( module );
+ string importLibraryDependencies = GetImportLibraryDependencies
( module );
+
+ GenerateImportLibraryTargetIfNeeded ( module );
+
+ if ( module.files.size () > 0 )
{
- GenerateMacrosAndTargetsTarget ( module );
+ string* cflags = new string ( "-D__NTDRIVER__" );
+ GenerateMacrosAndTargetsTarget ( module,
+ cflags );
+ delete cflags;
fprintf ( fMakefile, "%s: %s %s\n",
target.c_str (),
@@ -1068,21 +1157,11 @@
string workingDirectory = GetWorkingDirectory ( );
string archiveFilename = GetModuleArchiveFilename ( module );
string importLibraryDependencies = GetImportLibraryDependencies
( module );
+
+ GenerateImportLibraryTargetIfNeeded ( module );
- if (module.importLibrary != NULL)
+ if ( module.files.size () > 0 )
{
- fprintf ( fMakefile, "%s:\n",
- module.GetDependencyPath ().c_str () );
-
- fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s
--output-lib %s --kill-at\n\n",
- module.GetTargetName ().c_str (),
- FixupTargetFilename ( module.GetBasePath () +
SSEP + module.importLibrary->definition ).c_str (),
- FixupTargetFilename ( module.GetDependencyPath
() ).c_str () );
- }
-
- if (module.files.size () > 0)
- {
GenerateMacrosAndTargetsTarget ( module );
fprintf ( fMakefile, "%s: %s %s\n",
@@ -1133,19 +1212,9 @@
string archiveFilename = GetModuleArchiveFilename ( module );
string importLibraryDependencies = GetImportLibraryDependencies
( module );
- if (module.importLibrary != NULL)
- {
- fprintf ( fMakefile, "%s:\n",
- module.GetDependencyPath ().c_str () );
+ GenerateImportLibraryTargetIfNeeded ( module );
- fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s
--output-lib %s --kill-at\n\n",
- module.GetTargetName ().c_str (),
- FixupTargetFilename ( module.GetBasePath () +
SSEP + module.importLibrary->definition ).c_str (),
- FixupTargetFilename ( module.GetDependencyPath
() ).c_str () );
- }
-
- if (module.files.size () > 0)
+ if ( module.files.size () > 0 )
{
GenerateMacrosAndTargetsTarget ( module );
@@ -1197,7 +1266,9 @@
string objectFilenames = GetObjectFilenames ( module );
string importLibraryDependencies = GetImportLibraryDependencies
( module );
- if (module.files.size () > 0)
+ GenerateImportLibraryTargetIfNeeded ( module );
+
+ if ( module.files.size () > 0 )
{
GenerateMacrosAndTargetsTarget ( module );
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h
---
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h 2005-01-16 11:52:30 UTC (rev 13077)
+++
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h 2005-01-16 13:51:33 UTC (rev 13078)
@@ -32,16 +32,20 @@
std::string GetObjectFilenames ( const Module& module ) const;
void GenerateMacrosAndTargetsHost ( const Module& module )
const;
void GenerateMacrosAndTargetsTarget ( const Module& module )
const;
+ void GenerateMacrosAndTargetsTarget ( const Module& module,
+ const std::string* clags )
const;
std::string GetInvocationDependencies ( const Module& module )
const;
std::string GetInvocationParameters ( const Invoke& invoke )
const;
void GenerateInvocations ( const Module& module ) const;
void GeneratePreconditionDependencies ( const Module& module )
const;
+ std::string GetCFlagsMacro ( const Module& module ) const;
std::string GetObjectsMacro ( const Module& module ) const;
std::string GetLinkerMacro ( const Module& module ) const;
std::string GenerateLinkerCommand ( const Module& module,
const std::string& linker,
const std::string&
linkerParameters,
const std::string&
objectFilenames ) const;
+ void GenerateImportLibraryTargetIfNeeded ( const Module& module
) const;
static FILE* fMakefile;
private:
std::string ConcatenatePaths ( const std::string& path1,
@@ -115,7 +119,8 @@
const std::string&
objs_macro ) const;
void GenerateMacrosAndTargets ( const Module& module,
const std::string& cc,
- const std::string& ar ) const;
+ const std::string& ar,
+ const std::string* clags )
const;
std::string GetPreconditionDependenciesName ( const Module&
module ) const;
};
@@ -160,6 +165,16 @@
};
+class MingwKernelModeDriverModuleHandler : public MingwModuleHandler
+{
+public:
+ MingwKernelModeDriverModuleHandler ();
+ virtual void Process ( const Module& module );
+private:
+ void GenerateKernelModeDriverModuleTarget ( const Module& module
);
+};
+
+
class MingwNativeDLLModuleHandler : public MingwModuleHandler
{
public:
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp
2005-01-16 13:51:33 UTC (rev 13078)
@@ -8,10 +8,9 @@
Include::Include ( const Project& project_,
const XMLElement& includeNode )
- : project(project_),
- module(NULL),
- node(includeNode),
- base(NULL)
+ : project (project_),
+ module (NULL),
+ node (includeNode)
{
Initialize();
}
@@ -19,10 +18,9 @@
Include::Include ( const Project& project_,
const Module* module_,
const XMLElement& includeNode )
- : project(project_),
- module(module_),
- node(includeNode),
- base(NULL)
+ : project (project_),
+ module (module_),
+ node (includeNode)
{
Initialize();
}
@@ -48,13 +46,27 @@
throw InvalidBuildFileException (
node.location,
"'base' attribute illegal from global
<include>" );
- base = project.LocateModule ( att->value );
- if ( !base )
+ bool referenceResolved = false;
+ if ( att->value == project.name )
+ {
+ basePath = ".";
+ referenceResolved = true;
+ }
+ else
+ {
+ const Module* base = project.LocateModule (
att->value );
+ if ( base != NULL )
+ {
+ basePath = base->GetBasePath ();
+ referenceResolved = true;
+ }
+ }
+ if ( !referenceResolved )
throw InvalidBuildFileException (
node.location,
- "<include> attribute 'base' references
non-existant module '%s'",
+ "<include> attribute 'base' references
non-existant project or module '%s'",
att->value.c_str() );
- directory = FixSeparator ( base->GetBasePath() + "/" +
node.value );
+ directory = FixSeparator ( basePath + "/" + node.value
);
}
else
directory = FixSeparator ( node.value );
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-01-16 13:51:33 UTC (rev 13078)
@@ -214,6 +214,8 @@
return Kernel;
if ( attribute.value == "kernelmodedll" )
return KernelModeDLL;
+ if ( attribute.value == "kernelmodedriver" )
+ return KernelModeDriver;
if ( attribute.value == "nativedll" )
return NativeDLL;
if ( attribute.value == "win32dll" )
@@ -241,6 +243,8 @@
case NativeDLL:
case Win32DLL:
return ".dll";
+ case KernelModeDriver:
+ return ".sys";
}
throw InvalidOperationException ( __FILE__,
__LINE__ );
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-01-16 11:52:30 UTC (rev 13077)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-01-16 13:51:33 UTC (rev 13078)
@@ -73,6 +73,7 @@
StaticLibrary,
Kernel,
KernelModeDLL,
+ KernelModeDriver,
NativeDLL,
Win32DLL,
Win32GUI
@@ -128,7 +129,7 @@
const Module* module;
const XMLElement& node;
std::string directory;
- const Module* base;
+ std::string basePath;
Include ( const Project& project,
const XMLElement& includeNode );