Generate pre-compiled headers in intermediate directory tree
Modified: trunk/reactos/hal/halx86/generic/generic.xml
Modified: trunk/reactos/hal/halx86/xbox/halxbox.xml
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
_____
Modified: trunk/reactos/hal/halx86/generic/generic.xml
--- trunk/reactos/hal/halx86/generic/generic.xml 2005-07-06
16:27:58 UTC (rev 16458)
+++ trunk/reactos/hal/halx86/generic/generic.xml 2005-07-06
16:56:28 UTC (rev 16459)
@@ -24,7 +24,7 @@
<file>sysinfo.c</file>
<file>time.c</file>
<file>timer.c</file>
- <pch>../include/hal.h</pch>
+ <pch>../include/hal.h</pch>
</module>
<module name="hal_generic_up" type="objectlibrary">
<include base="hal_generic_up">../include</include>
_____
Modified: trunk/reactos/hal/halx86/xbox/halxbox.xml
--- trunk/reactos/hal/halx86/xbox/halxbox.xml 2005-07-06 16:27:58 UTC
(rev 16458)
+++ trunk/reactos/hal/halx86/xbox/halxbox.xml 2005-07-06 16:56:28 UTC
(rev 16459)
@@ -15,5 +15,4 @@
<file>part_xbox.c</file>
<file>pci_xbox.c</file>
<file>halxbox.rc</file>
- <pch>../include/hal.h</pch>
</module>
_____
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-07-06 16:27:58 UTC (rev 16458)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-07-06 16:56:28 UTC (rev 16459)
@@ -633,13 +633,24 @@
const IfableData& data )
{
size_t i;
+ bool generateAssignment;
- fprintf (
- fMakefile,
- "%s %s",
- macro.c_str(),
- assignmentOperation );
-
+ generateAssignment = (use_pch && module.pch != NULL ) ||
data.includes.size () > 0 || data.defines.size () > 0 ||
data.compilerFlags.size () > 0;
+ if ( generateAssignment )
+ {
+ fprintf ( fMakefile,
+ "%s %s",
+ macro.c_str(),
+ assignmentOperation );
+ }
+
+ if ( use_pch && module.pch != NULL )
+ {
+ fprintf ( fMakefile,
+ " -I %s",
+ GetDirectory ( GetPrecompiledHeaderFilename ()
).c_str () );
+ }
+
string compilerParameters = GenerateCompilerParametersFromVector
( data.compilerFlags );
if ( compilerParameters.size () > 0 )
{
@@ -669,7 +680,10 @@
"=%s",
d.value.c_str() );
}
- fprintf ( fMakefile, "\n" );
+ if ( generateAssignment )
+ {
+ fprintf ( fMakefile, "\n" );
+ }
}
void
@@ -680,15 +694,12 @@
{
size_t i;
- if ( data.includes.size () > 0 || data.defines.size () > 0 ||
data.compilerFlags.size () > 0 )
- {
- GenerateMacro ( assignmentOperation,
- cflagsMacro,
- data );
- GenerateMacro ( assignmentOperation,
- windresflagsMacro,
- data );
- }
+ GenerateMacro ( assignmentOperation,
+ cflagsMacro,
+ data );
+ GenerateMacro ( assignmentOperation,
+ windresflagsMacro,
+ data );
if ( linkerFlags != NULL )
{
@@ -844,6 +855,14 @@
CleanupFileVector ( sourceFiles );
}
+string
+MingwModuleHandler::GetPrecompiledHeaderFilename () const
+{
+ const string& basePchFilename = module.pch->file.name + ".gch";
+ return PassThruCacheDirectory ( NormalizeFilename (
basePchFilename ),
+ backend->intermediateDirectory
);
+}
+
void
MingwModuleHandler::GenerateGccCommand (
const string& sourceFilename,
@@ -852,7 +871,7 @@
{
string dependencies = sourceFilename;
if ( module.pch && use_pch )
- dependencies += " " + module.pch->file.name + ".gch";
+ dependencies += " " + GetPrecompiledHeaderFilename ();
/* WIDL generated headers may be used */
dependencies += " " + GetLinkingDependenciesMacro ();
@@ -1458,27 +1477,22 @@
const string& windresflagsMacro,
const string& widlflagsMacro )
{
- if ( module.pch )
+ if ( module.pch && use_pch )
{
- const string& pch_file = module.pch->file.name;
- string gch_file = pch_file + ".gch";
- CLEAN_FILE(gch_file);
- if ( use_pch )
- {
- fprintf (
- fMakefile,
- "%s: %s\n",
- gch_file.c_str(),
- pch_file.c_str() );
- fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
- fprintf (
- fMakefile,
- "\t%s -o %s %s -g %s\n\n",
- ( module.cplusplus ? cppc.c_str() :
cc.c_str() ),
- gch_file.c_str(),
- cflagsMacro.c_str(),
- pch_file.c_str() );
- }
+ const string& baseHeaderFilename =
module.pch->file.name;
+ const string& pchFilename = GetPrecompiledHeaderFilename
();
+ CLEAN_FILE(pchFilename);
+ fprintf ( fMakefile,
+ "%s: %s\n",
+ pchFilename.c_str(),
+ baseHeaderFilename.c_str() );
+ fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
+ fprintf ( fMakefile,
+ "\t%s -o %s %s -g %s\n\n",
+ module.cplusplus ? cppc.c_str() : cc.c_str(),
+ pchFilename.c_str(),
+ cflagsMacro.c_str(),
+ baseHeaderFilename.c_str() );
}
GenerateObjectFileTargets ( module.non_if_data,
_____
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
2005-07-06 16:27:58 UTC (rev 16458)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
2005-07-06 16:56:28 UTC (rev 16459)
@@ -124,6 +124,7 @@
std::string GenerateGccIncludeParameters () const;
std::string GenerateGccParameters () const;
std::string GenerateNasmParameters () const;
+ std::string MingwModuleHandler::GetPrecompiledHeaderFilename ()
const;
void GenerateGccCommand ( const std::string& sourceFilename,
const std::string& cc,
const std::string& cflagsMacro );