mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 22:52:54 +00:00
Generate dependencies for kernel module type.
svn path=/branches/xmlbuildsystem/; revision=12855
This commit is contained in:
parent
505695d368
commit
b1ec82cd59
6 changed files with 176 additions and 54 deletions
|
@ -13,20 +13,118 @@ MingwModuleHandler::MingwModuleHandler ( FILE* fMakefile )
|
|||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetModuleDependencies ( Module& module )
|
||||
MingwModuleHandler::ReplaceExtension ( string filename,
|
||||
string newExtension )
|
||||
{
|
||||
if ( !module.libraries.size() )
|
||||
size_t index = filename.find_last_of ( '.' );
|
||||
if (index != string::npos)
|
||||
return filename.substr ( 0, index ) + newExtension;
|
||||
return filename;
|
||||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetModuleArchiveFilename ( Module& module )
|
||||
{
|
||||
return ReplaceExtension ( module.GetPath ().c_str (),
|
||||
".a" );
|
||||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetModuleLibraryDependencies ( Module& module )
|
||||
{
|
||||
if ( module.libraries.size () == 0 )
|
||||
return "";
|
||||
|
||||
string dependencies ( module.libraries[0]->name );
|
||||
|
||||
for ( size_t i = 1; i < module.libraries.size(); i++ )
|
||||
|
||||
string dependencies ( "" );
|
||||
for ( size_t i = 0; i < module.libraries.size (); i++ )
|
||||
{
|
||||
dependencies += " " + module.libraries[i]->name;
|
||||
if ( dependencies.size () > 0 )
|
||||
dependencies += " ";
|
||||
dependencies += module.libraries[i]->name;
|
||||
}
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetSourceFilenames ( Module& module )
|
||||
{
|
||||
if ( module.files.size () == 0 )
|
||||
return "";
|
||||
|
||||
string sourceFilenames ( "" );
|
||||
for ( size_t i = 0; i < module.files.size (); i++ )
|
||||
{
|
||||
if ( sourceFilenames.size () > 0 )
|
||||
sourceFilenames += " ";
|
||||
sourceFilenames += module.files[i]->name;
|
||||
}
|
||||
return sourceFilenames;
|
||||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetObjectFilename ( string sourceFilename )
|
||||
{
|
||||
return ReplaceExtension ( sourceFilename,
|
||||
".o" );
|
||||
}
|
||||
|
||||
string
|
||||
MingwModuleHandler::GetObjectFilenames ( Module& module )
|
||||
{
|
||||
if ( module.files.size () == 0 )
|
||||
return "";
|
||||
|
||||
string objectFilenames ( "" );
|
||||
for ( size_t i = 0; i < module.files.size (); i++ )
|
||||
{
|
||||
if ( objectFilenames.size () > 0 )
|
||||
objectFilenames += " ";
|
||||
objectFilenames += GetObjectFilename ( module.files[i]->name );
|
||||
}
|
||||
return objectFilenames;
|
||||
}
|
||||
|
||||
void
|
||||
MingwModuleHandler::GenerateObjectFileTargets ( Module& module )
|
||||
{
|
||||
if ( module.files.size () == 0 )
|
||||
return;
|
||||
|
||||
for ( size_t i = 0; i < module.files.size (); i++ )
|
||||
{
|
||||
string sourceFilename = module.files[i]->name;
|
||||
string objectFilename = GetObjectFilename ( sourceFilename );
|
||||
fprintf ( fMakefile,
|
||||
"%s: %s\n",
|
||||
sourceFilename.c_str (),
|
||||
objectFilename.c_str() );
|
||||
fprintf ( fMakefile,
|
||||
"\t${gcc} -c %s -o %s\n",
|
||||
sourceFilename.c_str (),
|
||||
objectFilename.c_str () );
|
||||
}
|
||||
|
||||
fprintf ( fMakefile, "\n" );
|
||||
}
|
||||
|
||||
void
|
||||
MingwModuleHandler::GenerateArchiveTarget ( Module& module )
|
||||
{
|
||||
string archiveFilename = GetModuleArchiveFilename ( module );
|
||||
string sourceFilenames = GetSourceFilenames ( module );
|
||||
string objectFilenames = GetObjectFilenames ( module );
|
||||
|
||||
fprintf ( fMakefile,
|
||||
"%s: %s\n",
|
||||
archiveFilename.c_str (),
|
||||
sourceFilenames.c_str ());
|
||||
|
||||
fprintf ( fMakefile,
|
||||
"\t${ar} -rc %s %s\n\n",
|
||||
archiveFilename.c_str (),
|
||||
objectFilenames.c_str ());
|
||||
}
|
||||
|
||||
|
||||
MingwKernelModuleHandler::MingwKernelModuleHandler ( FILE* fMakefile )
|
||||
: MingwModuleHandler ( fMakefile )
|
||||
|
@ -48,10 +146,10 @@ MingwKernelModuleHandler::Process ( Module& module )
|
|||
void
|
||||
MingwKernelModuleHandler::GenerateKernelModuleTarget ( Module& module )
|
||||
{
|
||||
fprintf ( fMakefile, "%s: %s",
|
||||
module.name.c_str (),
|
||||
GetModuleDependencies ( module ).c_str () );
|
||||
fprintf ( fMakefile, "\n" );
|
||||
fprintf ( fMakefile, "\t" );
|
||||
fprintf ( fMakefile, "\n\n" );
|
||||
fprintf ( fMakefile, "%s: %s\n",
|
||||
module.GetPath ().c_str (),
|
||||
GetModuleLibraryDependencies ( module ).c_str () );
|
||||
fprintf ( fMakefile, "\t\n\n" );
|
||||
GenerateArchiveTarget ( module );
|
||||
GenerateObjectFileTargets ( module );
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue