Generate dependencies for kernel module type.

svn path=/branches/xmlbuildsystem/; revision=12855
This commit is contained in:
Casper Hornstrup 2005-01-06 20:38:14 +00:00
parent 505695d368
commit b1ec82cd59
6 changed files with 176 additions and 54 deletions

View file

@ -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 );
}