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