mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:42:58 +00:00
Disable pre-compiled headers when using compilation units
svn path=/trunk/; revision=19486
This commit is contained in:
parent
8f440cb624
commit
f4e5a5a581
5 changed files with 45 additions and 10 deletions
|
@ -89,6 +89,42 @@ MingwBackend::AddDirectoryTarget ( const string& directory,
|
||||||
return directoryTree->name;
|
return directoryTree->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
MingwBackend::CanEnablePreCompiledHeaderSupportForModule ( const Module& module )
|
||||||
|
{
|
||||||
|
if ( !configuration.CompilationUnitsEnabled )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
const vector<CompilationUnit*>& compilationUnits = module.non_if_data.compilationUnits;
|
||||||
|
size_t i;
|
||||||
|
for ( i = 0; i < compilationUnits.size (); i++ )
|
||||||
|
{
|
||||||
|
CompilationUnit& compilationUnit = *compilationUnits[i];
|
||||||
|
if ( compilationUnit.files.size () != 1 )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// intentionally make a copy so that we can append more work in
|
||||||
|
// the middle of processing without having to go recursive
|
||||||
|
vector<If*> v = module.non_if_data.ifs;
|
||||||
|
for ( i = 0; i < v.size (); i++ )
|
||||||
|
{
|
||||||
|
size_t j;
|
||||||
|
If& rIf = *v[i];
|
||||||
|
// check for sub-ifs to add to list
|
||||||
|
const vector<If*>& ifs = rIf.data.ifs;
|
||||||
|
for ( j = 0; j < ifs.size (); j++ )
|
||||||
|
v.push_back ( ifs[j] );
|
||||||
|
const vector<CompilationUnit*>& compilationUnits = rIf.data.compilationUnits;
|
||||||
|
for ( j = 0; j < compilationUnits.size (); j++ )
|
||||||
|
{
|
||||||
|
CompilationUnit& compilationUnit = *compilationUnits[j];
|
||||||
|
if ( compilationUnit.files.size () != 1 )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MingwBackend::ProcessModules ()
|
MingwBackend::ProcessModules ()
|
||||||
{
|
{
|
||||||
|
@ -104,6 +140,8 @@ MingwBackend::ProcessModules ()
|
||||||
MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler (
|
MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler (
|
||||||
module,
|
module,
|
||||||
this );
|
this );
|
||||||
|
if ( use_pch && CanEnablePreCompiledHeaderSupportForModule ( module ) )
|
||||||
|
h->EnablePreCompiledHeaderSupport ();
|
||||||
if ( module.host == HostDefault )
|
if ( module.host == HostDefault )
|
||||||
{
|
{
|
||||||
module.host = h->DefaultHost();
|
module.host = h->DefaultHost();
|
||||||
|
@ -207,7 +245,6 @@ MingwBackend::CreateMakefile ()
|
||||||
throw AccessDeniedException ( ProjectNode.makefile );
|
throw AccessDeniedException ( ProjectNode.makefile );
|
||||||
MingwModuleHandler::SetBackend ( this );
|
MingwModuleHandler::SetBackend ( this );
|
||||||
MingwModuleHandler::SetMakefile ( fMakefile );
|
MingwModuleHandler::SetMakefile ( fMakefile );
|
||||||
MingwModuleHandler::SetUsePch ( use_pch );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -92,6 +92,7 @@ private:
|
||||||
void DetectNetwideAssembler ();
|
void DetectNetwideAssembler ();
|
||||||
void DetectPipeSupport ();
|
void DetectPipeSupport ();
|
||||||
void DetectPCHSupport ();
|
void DetectPCHSupport ();
|
||||||
|
bool CanEnablePreCompiledHeaderSupportForModule ( const Module& module );
|
||||||
void ProcessModules ();
|
void ProcessModules ();
|
||||||
void CheckAutomaticDependenciesForModuleOnly ();
|
void CheckAutomaticDependenciesForModuleOnly ();
|
||||||
void ProcessNormal ();
|
void ProcessNormal ();
|
||||||
|
|
|
@ -32,8 +32,6 @@ MingwBackend*
|
||||||
MingwModuleHandler::backend = NULL;
|
MingwModuleHandler::backend = NULL;
|
||||||
FILE*
|
FILE*
|
||||||
MingwModuleHandler::fMakefile = NULL;
|
MingwModuleHandler::fMakefile = NULL;
|
||||||
bool
|
|
||||||
MingwModuleHandler::use_pch = false;
|
|
||||||
|
|
||||||
string
|
string
|
||||||
PrefixFilename (
|
PrefixFilename (
|
||||||
|
@ -73,6 +71,7 @@ MingwModuleHandler::MingwModuleHandler (
|
||||||
|
|
||||||
: module(module_)
|
: module(module_)
|
||||||
{
|
{
|
||||||
|
use_pch = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
MingwModuleHandler::~MingwModuleHandler()
|
MingwModuleHandler::~MingwModuleHandler()
|
||||||
|
@ -91,10 +90,10 @@ MingwModuleHandler::SetMakefile ( FILE* f )
|
||||||
fMakefile = f;
|
fMakefile = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static*/ void
|
void
|
||||||
MingwModuleHandler::SetUsePch ( bool b )
|
MingwModuleHandler::EnablePreCompiledHeaderSupport ()
|
||||||
{
|
{
|
||||||
use_pch = b;
|
use_pch = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static*/ string
|
/* static*/ string
|
||||||
|
|
|
@ -39,7 +39,7 @@ public:
|
||||||
|
|
||||||
static void SetBackend ( MingwBackend* backend_ );
|
static void SetBackend ( MingwBackend* backend_ );
|
||||||
static void SetMakefile ( FILE* f );
|
static void SetMakefile ( FILE* f );
|
||||||
static void SetUsePch ( bool use_pch );
|
void EnablePreCompiledHeaderSupport ();
|
||||||
|
|
||||||
static std::string PassThruCacheDirectory (
|
static std::string PassThruCacheDirectory (
|
||||||
const std::string &f,
|
const std::string &f,
|
||||||
|
@ -125,7 +125,7 @@ protected:
|
||||||
std::string GetLinkingDependencies () const;
|
std::string GetLinkingDependencies () const;
|
||||||
static MingwBackend* backend;
|
static MingwBackend* backend;
|
||||||
static FILE* fMakefile;
|
static FILE* fMakefile;
|
||||||
static bool use_pch;
|
bool use_pch;
|
||||||
private:
|
private:
|
||||||
std::string ConcatenatePaths ( const std::string& path1,
|
std::string ConcatenatePaths ( const std::string& path1,
|
||||||
const std::string& path2 ) const;
|
const std::string& path2 ) const;
|
||||||
|
|
|
@ -82,8 +82,6 @@ CompilationUnitSupportCode::WriteCompilationUnitFile ( Module& module,
|
||||||
s = buf;
|
s = buf;
|
||||||
s = s + sprintf ( s, "/* This file is automatically generated. */\n" );
|
s = s + sprintf ( s, "/* This file is automatically generated. */\n" );
|
||||||
s = s + sprintf ( s, "#define ONE_COMPILATION_UNIT\n" );
|
s = s + sprintf ( s, "#define ONE_COMPILATION_UNIT\n" );
|
||||||
if ( module.pch )
|
|
||||||
s = s + sprintf ( s, "#include <%s>\n", ChangeSeparator ( module.pch->file.name, '\\', '/' ).c_str () );
|
|
||||||
|
|
||||||
for ( size_t i = 0; i < compilationUnit.files.size () ; i++ )
|
for ( size_t i = 0; i < compilationUnit.files.size () ; i++ )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue