\r
typedef set<string> set_string;\r
\r
+#define CLEAN_FILE(f) clean_files.push_back ( f ); /*if ( module.name == "crt" ) printf ( "%s(%i): clean: %s\n", __FILE__, __LINE__, f.c_str() )*/\r
+\r
map<ModuleType,MingwModuleHandler*>*\r
MingwModuleHandler::handler_map = NULL;\r
set_string\r
return PassThruCacheDirectory ( FixupTargetFilename ( importedModule.GetDependencyPath () ) );\r
}\r
\r
-string\r
-MingwModuleHandler::GetImportLibraryDependencies ( const Module& module ) const\r
-{\r
- string dependencies ( "" );\r
- for ( size_t i = 0; i < module.libraries.size (); i++ )\r
- {\r
- if ( dependencies.size () > 0 )\r
- dependencies += " ";\r
- const Module* importedModule = module.project.LocateModule ( module.libraries[i]->name );\r
- assert ( importedModule != NULL );\r
- dependencies += GetImportLibraryDependency ( *importedModule );\r
- }\r
- return dependencies;\r
-}\r
-\r
string\r
MingwModuleHandler::GetModuleDependencies ( const Module& module ) const\r
{\r
return dependencies;\r
}\r
\r
-string\r
+/*string\r
MingwModuleHandler::GetAllDependencies ( const Module& module ) const\r
{\r
- string dependencies = GetImportLibraryDependencies ( module );\r
+ string dependencies = GetImportMacro ( module );\r
string s = GetModuleDependencies ( module );\r
if ( s.length () > 0 )\r
{\r
dependencies += s;\r
}\r
return dependencies;\r
-}\r
+}*/\r
\r
string\r
MingwModuleHandler::GetSourceFilenames ( const Module& module,\r
return FixupTargetFilename ( ReplaceExtension ( sourceFilename, newExtension ) );\r
}\r
\r
+void\r
+MingwModuleHandler::GenerateCleanTarget (\r
+ const Module& module,\r
+ const string_list& clean_files ) const\r
+{\r
+ if ( 0 == clean_files.size() )\r
+ return;\r
+ fprintf ( fMakefile, ".PHONY: %s_clean\n", module.name.c_str() );\r
+ fprintf ( fMakefile, "%s_clean:\n\t-@$(rm)", module.name.c_str() );\r
+ for ( size_t i = 0; i < clean_files.size(); i++ )\r
+ {\r
+ if ( 9==((i+1)%10) )\r
+ fprintf ( fMakefile, " 2>$(NUL)\n\t-@$(rm)" );\r
+ fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
+ }\r
+ fprintf ( fMakefile, " 2>$(NUL)\n" );\r
+ fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() );\r
+}\r
+\r
string\r
MingwModuleHandler::GetObjectFilenames ( const Module& module ) const\r
{\r
if ( directory_set.size () == 0 )\r
return;\r
\r
- set_string::iterator i;\r
+ set_string::iterator it;\r
+ size_t wrap_count = 0;\r
fprintf ( fMakefile, "directories::" );\r
\r
- for ( i = directory_set.begin ();\r
- i != directory_set.end ();\r
- i++ )\r
+ for ( it = directory_set.begin ();\r
+ it != directory_set.end ();\r
+ it++ )\r
{\r
- if ( IncludeDirectoryTarget ( *i ) )\r
+ if ( IncludeDirectoryTarget ( *it ) )\r
{\r
+ if ( wrap_count++ == 5 )\r
+ fprintf ( fMakefile, " \\\n\t\t" ), wrap_count = 0;\r
fprintf ( fMakefile,\r
" %s",\r
- i->c_str () );\r
+ it->c_str () );\r
}\r
}\r
\r
fprintf ( fMakefile, "\n\n" );\r
+ wrap_count = 0;\r
\r
- for ( i = directory_set.begin ();\r
- i != directory_set.end ();\r
- i++ )\r
+ for ( it = directory_set.begin ();\r
+ it != directory_set.end ();\r
+ it++ )\r
{\r
- if ( IncludeDirectoryTarget ( *i ) )\r
+ if ( IncludeDirectoryTarget ( *it ) )\r
{\r
+ if ( wrap_count++ == 5 )\r
+ fprintf ( fMakefile, " \\\n\t\t" ), wrap_count = 0;\r
fprintf ( fMakefile,\r
"%s ",\r
- i->c_str () );\r
+ it->c_str () );\r
}\r
}\r
\r
return parameters;\r
}\r
\r
+string\r
+MingwModuleHandler::GenerateImportLibraryDependenciesFromVector (\r
+ const vector<Library*>& libraries ) const\r
+{\r
+ string dependencies ( "" );\r
+ int wrap_count = 0;\r
+ for ( size_t i = 0; i < libraries.size (); i++ )\r
+ {\r
+ if ( wrap_count++ == 5 )\r
+ dependencies += " \\\n\t\t", wrap_count = 0;\r
+ else if ( dependencies.size () > 0 )\r
+ dependencies += " ";\r
+ dependencies += GetImportLibraryDependency ( *libraries[i]->imported_module );\r
+ }\r
+ return dependencies;\r
+}\r
+\r
string\r
MingwModuleHandler::GenerateLinkerParameters ( const Module& module ) const\r
{\r
const vector<File*>& files,\r
const vector<Include*>& includes,\r
const vector<Define*>& defines,\r
+ const vector<Library*>& libraries,\r
const vector<CompilerFlag*>* compilerFlags,\r
const vector<LinkerFlag*>* linkerFlags,\r
const vector<If*>& ifs,\r
const string& nasmflags_macro,\r
const string& windresflags_macro,\r
const string& linkerflags_macro,\r
- const string& objs_macro) const\r
+ const string& objs_macro,\r
+ const string& libs_macro,\r
+ const string& linkdeps_macro ) const\r
{\r
size_t i;\r
\r
linkerParameters.c_str() );\r
}\r
}\r
- \r
+\r
+ if ( libraries.size () > 0 )\r
+ {\r
+ string deps = GenerateImportLibraryDependenciesFromVector ( libraries );\r
+ if ( deps.size () > 0 )\r
+ {\r
+ fprintf (\r
+ fMakefile,\r
+ "%s %s %s\n",\r
+ libs_macro.c_str(),\r
+ assignmentOperation,\r
+ deps.c_str() );\r
+ }\r
+ }\r
+\r
if ( files.size () > 0 )\r
{\r
for ( i = 0; i < files.size (); i++ )\r
for ( i = 0; i < ifs.size(); i++ )\r
{\r
If& rIf = *ifs[i];\r
- if ( rIf.defines.size() || rIf.includes.size() || rIf.files.size() || rIf.ifs.size() )\r
+ if ( rIf.defines.size()\r
+ || rIf.includes.size()\r
+ || rIf.libraries.size()\r
+ || rIf.files.size()\r
+ || rIf.ifs.size() )\r
{\r
fprintf (\r
fMakefile,\r
rIf.files,\r
rIf.includes,\r
rIf.defines,\r
+ rIf.libraries,\r
NULL,\r
NULL,\r
rIf.ifs,\r
nasmflags_macro,\r
windresflags_macro,\r
linkerflags_macro,\r
- objs_macro );\r
+ objs_macro,\r
+ libs_macro,\r
+ linkdeps_macro );\r
fprintf ( \r
fMakefile,\r
"endif\n\n" );\r
const string& nasmflags_macro,\r
const string& windresflags_macro,\r
const string& linkerflags_macro,\r
- const string& objs_macro) const\r
+ const string& objs_macro,\r
+ const string& libs_macro,\r
+ const string& linkdeps_macro ) const\r
{\r
GenerateMacros (\r
"=",\r
module.files,\r
module.includes,\r
module.defines,\r
+ module.libraries,\r
&module.compilerFlags,\r
&module.linkerFlags,\r
module.ifs,\r
nasmflags_macro,\r
windresflags_macro,\r
linkerflags_macro,\r
- objs_macro );\r
- fprintf ( fMakefile, "\n" );\r
+ objs_macro,\r
+ libs_macro,\r
+ linkdeps_macro );\r
+\r
+ if ( module.importLibrary )\r
+ {\r
+ string s;\r
+ for ( size_t i = 0; i < module.files.size (); i++ )\r
+ {\r
+ File& file = *module.files[i];\r
+ string extension = GetExtension ( file.name );\r
+ if ( extension == ".spec" || extension == ".SPEC" )\r
+ {\r
+ if ( s.length () > 0 )\r
+ s += " ";\r
+ s += GetSpecObjectDependencies ( file.name );\r
+ }\r
+ }\r
+ if ( s.length () > 0 )\r
+ {\r
+ fprintf (\r
+ fMakefile,\r
+ "%s += %s\n",\r
+ linkdeps_macro.c_str(),\r
+ s.c_str() );\r
+ }\r
+ }\r
\r
fprintf (\r
fMakefile,\r
- "%s += $(PROJECT_CFLAGS)\n\n",\r
+ "%s += $(PROJECT_CFLAGS)\n",\r
cflags_macro.c_str () );\r
\r
fprintf (\r
fMakefile,\r
- "%s += $(PROJECT_RCFLAGS)\n\n",\r
+ "%s += $(PROJECT_RCFLAGS)\n",\r
windresflags_macro.c_str () );\r
\r
fprintf (\r
fMakefile,\r
- "%s_LFLAGS += $(PROJECT_LFLAGS)\n\n",\r
+ "%s_LFLAGS += $(PROJECT_LFLAGS)\n",\r
module.name.c_str () );\r
+\r
+ fprintf (\r
+ fMakefile,\r
+ "%s += $(%s)",\r
+ linkdeps_macro.c_str (),\r
+ libs_macro.c_str () );\r
+\r
+ fprintf ( fMakefile, "\n" );\r
}\r
\r
void\r
"%s: %s\n",\r
objectFilename.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [CC] $<\n" );\r
fprintf ( fMakefile,\r
"\t%s -c %s -o %s %s\n",\r
cc.c_str (),\r
"%s: %s\n",\r
objectFilename.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [GAS] $<\n" );\r
fprintf ( fMakefile,\r
"\t%s -x assembler-with-cpp -c %s -o %s -D__ASM__ %s\n",\r
cc.c_str (),\r
"%s: %s\n",\r
objectFilename.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [NASM] $<\n" );\r
fprintf ( fMakefile,\r
"\t%s -f win32 %s -o %s %s\n",\r
- "nasm",\r
+ "$(Q)nasm",\r
sourceFilename.c_str (),\r
objectFilename.c_str (),\r
nasmflagsMacro.c_str () );\r
const string& windresflagsMacro ) const\r
{\r
string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
- string rciFilename = ReplaceExtension ( sourceFilename,\r
- ".rci" );\r
- string resFilename = ReplaceExtension ( sourceFilename,\r
- ".res" );\r
+ string rciFilename = ReplaceExtension ( sourceFilename,\r
+ ".rci" );\r
+ string resFilename = ReplaceExtension ( sourceFilename,\r
+ ".res" );\r
fprintf ( fMakefile,\r
"%s: %s\n",\r
objectFilename.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [WRC] $@\n" );\r
fprintf ( fMakefile,\r
"\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",\r
windresflagsMacro.c_str (),\r
rciFilename.c_str (),\r
resFilename.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
rciFilename.c_str () );\r
fprintf ( fMakefile,\r
"\t${windres} %s -o %s\n",\r
resFilename.c_str (),\r
objectFilename.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
resFilename.c_str () );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateWinebuildCommands ( const Module& module,\r
- const string& sourceFilename ) const\r
+MingwModuleHandler::GenerateWinebuildCommands (\r
+ const Module& module,\r
+ const string& sourceFilename,\r
+ string_list& clean_files ) const\r
{\r
string basename = GetBasename ( sourceFilename );\r
+\r
+ string def_file = basename + ".spec.def";\r
+ CLEAN_FILE ( def_file );\r
+\r
+ string stub_file = basename + ".stubs.c";\r
+ CLEAN_FILE ( stub_file );\r
+\r
fprintf ( fMakefile,\r
- "%s.spec.def: %s\n",\r
- basename.c_str (),\r
+ "%s: %s\n",\r
+ def_file.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [WINEBLD] $@\n" );\r
fprintf ( fMakefile,\r
- "\t%s --def=%s -o %s.spec.def\n",\r
+ "\t%s --def=%s -o %s\n",\r
"${winebuild}",\r
sourceFilename.c_str (),\r
- basename.c_str () );\r
+ def_file.c_str () );\r
\r
fprintf ( fMakefile,\r
- "%s.stubs.c: %s\n",\r
- basename.c_str (),\r
+ "%s: %s\n",\r
+ stub_file.c_str (),\r
sourceFilename.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [WINEBLD] $@\n" );\r
fprintf ( fMakefile,\r
- "\t%s --pedll=%s -o %s.stubs.c\n",\r
+ "\t%s --pedll=%s -o %s\n",\r
"${winebuild}",\r
sourceFilename.c_str (),\r
- basename.c_str () );\r
+ stub_file.c_str () );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateCommands ( const Module& module,\r
- const string& sourceFilename,\r
- const string& cc,\r
- const string& cppc,\r
- const string& cflagsMacro,\r
- const string& nasmflagsMacro,\r
- const string& windresflagsMacro ) const\r
+MingwModuleHandler::GenerateCommands (\r
+ const Module& module,\r
+ const string& sourceFilename,\r
+ const string& cc,\r
+ const string& cppc,\r
+ const string& cflagsMacro,\r
+ const string& nasmflagsMacro,\r
+ const string& windresflagsMacro,\r
+ string_list& clean_files ) const\r
{\r
+ CLEAN_FILE ( GetObjectFilename(sourceFilename) );\r
string extension = GetExtension ( sourceFilename );\r
if ( extension == ".c" || extension == ".C" )\r
{\r
else if ( extension == ".spec" || extension == ".SPEC" )\r
{\r
GenerateWinebuildCommands ( module,\r
- sourceFilename );\r
+ sourceFilename,\r
+ clean_files );\r
GenerateGccCommand ( module,\r
GetActualSourceFilename ( sourceFilename ),\r
cc,\r
}\r
\r
void\r
-MingwModuleHandler::GenerateLinkerCommand ( const Module& module,\r
- const string& linker,\r
- const string& linkerParameters,\r
- const string& objectFilenames ) const\r
+MingwModuleHandler::GenerateLinkerCommand (\r
+ const Module& module,\r
+ const string& linker,\r
+ const string& linkerParameters,\r
+ const string& objectsMacro,\r
+ const string& libsMacro,\r
+ string_list& clean_files ) const\r
{\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [LD] $@\n" );\r
string targetName ( module.GetTargetName () );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
if ( module.importLibrary != NULL )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string base_tmp = ros_junk + module.name + ".base.tmp";\r
+ CLEAN_FILE ( base_tmp );\r
string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
+ CLEAN_FILE ( junk_tmp );\r
string temp_exp = ros_junk + module.name + ".temp.exp";\r
+ CLEAN_FILE ( temp_exp );\r
+ string def_file = module.GetBasePath () + SSEP + module.importLibrary->definition;\r
\r
fprintf ( fMakefile,\r
"\t%s %s -Wl,--base-file,%s -o %s %s %s %s\n",\r
linkerParameters.c_str (),\r
base_tmp.c_str (),\r
junk_tmp.c_str (),\r
- objectFilenames.c_str (),\r
- importLibraryDependencies.c_str (),\r
+ objectsMacro.c_str (),\r
+ libsMacro.c_str (),\r
GetLinkerMacro ( module ).c_str () );\r
\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
junk_tmp.c_str () );\r
\r
string killAt = module.mangledSymbols ? "" : "--kill-at";\r
"\t${dlltool} --dllname %s --base-file %s --def %s --output-exp %s %s\n",\r
targetName.c_str (),\r
base_tmp.c_str (),\r
- ( module.GetBasePath () + SSEP + module.importLibrary->definition ).c_str (),\r
+ def_file.c_str (),\r
temp_exp.c_str (),\r
killAt.c_str () );\r
\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
base_tmp.c_str () );\r
\r
fprintf ( fMakefile,\r
- "\t%s %s %s -o %s %s %s %s\n\n",\r
+ "\t%s %s %s -o %s %s %s %s\n",\r
linker.c_str (),\r
linkerParameters.c_str (),\r
temp_exp.c_str (),\r
target.c_str (),\r
- objectFilenames.c_str (),\r
- importLibraryDependencies.c_str (),\r
+ objectsMacro.c_str (),\r
+ libsMacro.c_str (),\r
GetLinkerMacro ( module ).c_str () );\r
\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n\n",\r
+ "\t-@${rm} %s\n",\r
temp_exp.c_str () );\r
}\r
else\r
linker.c_str (),\r
linkerParameters.c_str (),\r
target.c_str (),\r
- objectFilenames.c_str (),\r
- importLibraryDependencies.c_str (),\r
+ objectsMacro.c_str (),\r
+ libsMacro.c_str (),\r
GetLinkerMacro ( module ).c_str () );\r
}\r
\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [RSYM] $@\n" );\r
fprintf ( fMakefile,\r
- "\t${rsym} %s %s\n\n",\r
- target.c_str (),\r
- target.c_str () );\r
+ "\t${rsym} %s %s\n\n",\r
+ target.c_str (),\r
+ target.c_str () );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateObjectFileTargets ( const Module& module,\r
- const vector<File*>& files,\r
- const vector<If*>& ifs,\r
- const string& cc,\r
- const string& cppc,\r
- const string& cflagsMacro,\r
- const string& nasmflagsMacro,\r
- const string& windresflagsMacro ) const\r
+MingwModuleHandler::GenerateObjectFileTargets (\r
+ const Module& module,\r
+ const vector<File*>& files,\r
+ const vector<If*>& ifs,\r
+ const string& cc,\r
+ const string& cppc,\r
+ const string& cflagsMacro,\r
+ const string& nasmflagsMacro,\r
+ const string& windresflagsMacro,\r
+ string_list& clean_files ) const\r
{\r
size_t i;\r
\r
cppc,\r
cflagsMacro,\r
nasmflagsMacro,\r
- windresflagsMacro );\r
+ windresflagsMacro,\r
+ clean_files );\r
fprintf ( fMakefile,\r
"\n" );\r
}\r
cppc,\r
cflagsMacro,\r
nasmflagsMacro,\r
- windresflagsMacro );\r
+ windresflagsMacro,\r
+ clean_files );\r
}\r
}\r
\r
void\r
-MingwModuleHandler::GenerateObjectFileTargets ( const Module& module,\r
- const string& cc,\r
- const string& cppc,\r
- const string& cflagsMacro,\r
- const string& nasmflagsMacro,\r
- const string& windresflagsMacro ) const\r
+MingwModuleHandler::GenerateObjectFileTargets (\r
+ const Module& module,\r
+ const string& cc,\r
+ const string& cppc,\r
+ const string& cflagsMacro,\r
+ const string& nasmflagsMacro,\r
+ const string& windresflagsMacro,\r
+ string_list& clean_files ) const\r
{\r
GenerateObjectFileTargets ( module,\r
module.files,\r
cppc,\r
cflagsMacro,\r
nasmflagsMacro,\r
- windresflagsMacro );\r
+ windresflagsMacro,\r
+ clean_files );\r
fprintf ( fMakefile, "\n" );\r
}\r
\r
void\r
-MingwModuleHandler::GetCleanTargets ( vector<string>& out,\r
+MingwModuleHandler::GetCleanTargets ( string_list& out,\r
const vector<File*>& files,\r
const vector<If*>& ifs ) const\r
{\r
archiveFilename.c_str (),\r
objs_macro.c_str ());\r
\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [AR] $@\n" );\r
+\r
fprintf ( fMakefile,\r
"\t%s -rc %s %s\n\n",\r
ar.c_str (),\r
module.name.c_str () );\r
}\r
\r
+string\r
+MingwModuleHandler::GetLinkingDependenciesMacro ( const Module& module ) const\r
+{\r
+ return ssprintf ( "$(%s_LINKDEPS)", module.name.c_str () );\r
+}\r
+\r
+string\r
+MingwModuleHandler::GetLibsMacro ( const Module& module ) const\r
+{\r
+ return ssprintf ( "$(%s_LIBS)", module.name.c_str () );\r
+}\r
+\r
string\r
MingwModuleHandler::GetLinkerMacro ( const Module& module ) const\r
{\r
return ssprintf ( "$(%s_LFLAGS)",\r
module.name.c_str () );\r
}\r
- \r
+\r
void\r
MingwModuleHandler::GenerateMacrosAndTargets (\r
const Module& module,\r
const string& cppc,\r
const string& ar,\r
const string* cflags,\r
- const string* nasmflags ) const\r
+ const string* nasmflags,\r
+ string_list& clean_files ) const\r
{\r
string cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ());\r
string nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ());\r
string windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ());\r
string linkerFlagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ());\r
string objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ());\r
+ string libsMacro = ssprintf("%s_LIBS", module.name.c_str ());\r
+ string linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ());\r
\r
GenerateMacros ( module,\r
cflagsMacro,\r
nasmflagsMacro,\r
windresflagsMacro,\r
linkerFlagsMacro,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ linkDepsMacro );\r
\r
if ( cflags != NULL )\r
{\r
cppc,\r
cflagsMacro,\r
nasmflagsMacro,\r
- windresflagsMacro );\r
+ windresflagsMacro,\r
+ clean_files );\r
\r
- vector<string> clean_files;\r
- clean_files.push_back ( FixupTargetFilename(module.GetPath()) );\r
- clean_files.push_back ( ar_target );\r
- GetCleanTargets ( clean_files, module.files, module.ifs );\r
-\r
- fprintf ( fMakefile, ".PHONY: %s_clean\n", module.name.c_str() );\r
- fprintf ( fMakefile, "%s_clean:\n\t-@$(rm)", module.name.c_str() );\r
- for ( size_t i = 0; i < clean_files.size(); i++ )\r
+ CLEAN_FILE ( ar_target );\r
+ string tgt = FixupTargetFilename(module.GetPath());\r
+ if ( tgt != ar_target )\r
{\r
- if ( 9==(i%10) )\r
- fprintf ( fMakefile, " 2>$(NUL)\n\t-@$(rm)" );\r
- fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
+ CLEAN_FILE ( tgt );\r
}\r
- fprintf ( fMakefile, " 2>$(NUL)\n" );\r
- fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateMacrosAndTargetsHost ( const Module& module ) const\r
+MingwModuleHandler::GenerateMacrosAndTargetsHost (\r
+ const Module& module,\r
+ string_list& clean_files ) const\r
{\r
- GenerateMacrosAndTargets ( module,\r
- "${host_gcc}",\r
- "${host_gpp}",\r
- "${host_ar}",\r
- NULL,\r
- NULL );\r
+ GenerateMacrosAndTargets (\r
+ module,\r
+ "${host_gcc}",\r
+ "${host_gpp}",\r
+ "${host_ar}",\r
+ NULL,\r
+ NULL,\r
+ clean_files );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module ) const\r
+MingwModuleHandler::GenerateMacrosAndTargetsTarget (\r
+ const Module& module,\r
+ string_list& clean_files ) const\r
{\r
- GenerateMacrosAndTargetsTarget ( module,\r
- NULL,\r
- NULL );\r
+ GenerateMacrosAndTargetsTarget (\r
+ module,\r
+ NULL,\r
+ NULL,\r
+ clean_files );\r
}\r
\r
void\r
-MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module,\r
- const string* cflags,\r
- const string* nasmflags ) const\r
+MingwModuleHandler::GenerateMacrosAndTargetsTarget (\r
+ const Module& module,\r
+ const string* cflags,\r
+ const string* nasmflags,\r
+ string_list& clean_files ) const\r
{\r
- GenerateMacrosAndTargets ( module,\r
- "${gcc}",\r
- "${gpp}",\r
- "${ar}",\r
- cflags,\r
- nasmflags );\r
+ GenerateMacrosAndTargets (\r
+ module,\r
+ "${gcc}",\r
+ "${gpp}",\r
+ "${ar}",\r
+ cflags,\r
+ nasmflags,\r
+ clean_files );\r
}\r
\r
string\r
"%s: %s\n",\r
invoke.GetTargets ().c_str (),\r
FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [INVOKE] $<\n" );\r
fprintf ( fMakefile,\r
"\t%s %s\n\n",\r
FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str (),\r
}\r
\r
void\r
-MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( const Module& module ) const\r
+MingwModuleHandler::GenerateImportLibraryTargetIfNeeded (\r
+ const Module& module,\r
+ string_list& clean_files ) const\r
{\r
if ( module.importLibrary != NULL )\r
{\r
+ string library_target = FixupTargetFilename( module.GetDependencyPath () ).c_str ();\r
+ CLEAN_FILE ( library_target );\r
+\r
string definitionDependencies = GetDefinitionDependencies ( module );\r
fprintf ( fMakefile, "%s: %s\n",\r
- FixupTargetFilename( module.GetDependencyPath () ).c_str (),\r
+ library_target.c_str (),\r
definitionDependencies.c_str () );\r
\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [DLLTOOL] $@\n" );\r
+\r
string killAt = module.mangledSymbols ? "" : "--kill-at";\r
fprintf ( fMakefile,\r
"\t${dlltool} --dllname %s --def %s --output-lib %s %s\n\n",\r
module.GetTargetName ().c_str (),\r
( module.GetBasePath () + SSEP + module.importLibrary->definition ).c_str (),\r
- FixupTargetFilename ( module.GetDependencyPath () ).c_str (),\r
+ library_target.c_str (),\r
killAt.c_str () );\r
}\r
}\r
return dependencies;\r
}\r
\r
-string\r
+/*string\r
MingwModuleHandler::GetLinkingDependencies ( const Module& module ) const\r
{\r
string dependencies = GetImportLibraryDependencies ( module );\r
dependencies += s;\r
}\r
return dependencies;\r
-}\r
+}*/\r
\r
bool\r
MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) const\r
}\r
\r
void\r
-MingwBuildToolModuleHandler::Process ( const Module& module )\r
+MingwBuildToolModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateBuildToolModuleTarget ( module );\r
+ GenerateBuildToolModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& module )\r
+MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateMacrosAndTargetsHost ( module );\r
+ GenerateMacrosAndTargetsHost ( module, clean_files );\r
\r
string linker;\r
if ( IsCPlusPlusModule ( module ) )\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [LD] $@\n" );\r
fprintf ( fMakefile,\r
"\t%s %s -o %s %s %s\n\n",\r
linker.c_str (),\r
GetLinkerMacro ( module ).c_str (),\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ libsMacro.c_str () );\r
}\r
\r
\r
}\r
\r
void\r
-MingwKernelModuleHandler::Process ( const Module& module )\r
+MingwKernelModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateKernelModuleTarget ( module );\r
+ GenerateKernelModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module )\r
+MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
- string targetName ( module.GetTargetName () );\r
- string target ( FixupTargetFilename (module.GetPath ()) );\r
+ string targetName ( module.GetTargetName () ); // i.e. "ntoskrnl.exe"\r
+ string target ( FixupTargetFilename (module.GetPath ()) ); // i.e. "$(ROS_INT).\ntoskrnl\ntoskrnl.exe"\r
string workingDirectory = GetWorkingDirectory ();\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
string base_tmp = ros_junk + module.name + ".base.tmp";\r
+ CLEAN_FILE ( base_tmp );\r
string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
+ CLEAN_FILE ( junk_tmp );\r
string temp_exp = ros_junk + module.name + ".temp.exp";\r
+ CLEAN_FILE ( temp_exp );\r
string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
module.GetBasePath ().c_str (),\r
module.entrypoint.c_str (),\r
module.baseaddress.c_str () );\r
\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [LD] $@\n" );\r
fprintf ( fMakefile,\r
"\t${gcc} %s %s -Wl,--base-file,%s -o %s %s %s\n",\r
GetLinkerMacro ( module ).c_str (),\r
base_tmp.c_str (),\r
junk_tmp.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
junk_tmp.c_str () );\r
string killAt = module.mangledSymbols ? "" : "--kill-at";\r
fprintf ( fMakefile,\r
temp_exp.c_str (),\r
killAt.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
base_tmp.c_str () );\r
fprintf ( fMakefile,\r
"\t${gcc} %s %s -Wl,%s -o %s %s %s\n",\r
temp_exp.c_str (),\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
temp_exp.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [RSYM] $@\n" );\r
fprintf ( fMakefile,\r
"\t${rsym} %s %s\n\n",\r
target.c_str (),\r
}\r
\r
void\r
-MingwStaticLibraryModuleHandler::Process ( const Module& module )\r
+MingwStaticLibraryModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateStaticLibraryModuleTarget ( module );\r
+ GenerateStaticLibraryModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget ( const Module& module )\r
+MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
}\r
\r
\r
}\r
\r
void\r
-MingwObjectLibraryModuleHandler::Process ( const Module& module )\r
+MingwObjectLibraryModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateObjectLibraryModuleTarget ( module );\r
+ GenerateObjectLibraryModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ( const Module& module )\r
+MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
}\r
\r
\r
}\r
\r
void\r
-MingwKernelModeDLLModuleHandler::Process ( const Module& module )\r
+MingwKernelModeDLLModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateKernelModeDLLModuleTarget ( module );\r
+ GenerateKernelModeDLLModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Module& module )\r
+MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
module.entrypoint.c_str (),\r
GenerateLinkerCommand ( module,\r
"${gcc}",\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwKernelModeDriverModuleHandler::Process ( const Module& module )\r
+MingwKernelModeDriverModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateKernelModeDriverModuleTarget ( module );\r
+ GenerateKernelModeDriverModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
\r
void\r
-MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( const Module& module )\r
+MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget (\r
+ const Module& module,\r
+ string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( PassThruCacheDirectory( FixupTargetFilename ( module.GetPath () ) ) );\r
string workingDirectory = GetWorkingDirectory ();\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- string* cflags = new string ( "-D__NTDRIVER__" );\r
+ string cflags ( "-D__NTDRIVER__" );\r
GenerateMacrosAndTargetsTarget ( module,\r
- cflags,\r
- NULL );\r
- delete cflags;\r
+ &cflags,\r
+ NULL,\r
+ clean_files);\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
module.entrypoint.c_str (),\r
GenerateLinkerCommand ( module,\r
"${gcc}",\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwNativeDLLModuleHandler::Process ( const Module& module )\r
+MingwNativeDLLModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateNativeDLLModuleTarget ( module );\r
+ GenerateNativeDLLModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& module )\r
+MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll",\r
module.entrypoint.c_str (),\r
GenerateLinkerCommand ( module,\r
"${gcc}",\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwNativeCUIModuleHandler::Process ( const Module& module )\r
+MingwNativeCUIModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateNativeCUIModuleTarget ( module );\r
+ GenerateNativeCUIModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& module )\r
+MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- string* cflags = new string ( "-D__NTAPP__" );\r
+ string cflags ( "-D__NTAPP__" );\r
GenerateMacrosAndTargetsTarget ( module,\r
- cflags,\r
- NULL );\r
- delete cflags;\r
+ &cflags,\r
+ NULL,\r
+ clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib",\r
module.entrypoint.c_str (),\r
GenerateLinkerCommand ( module,\r
"${gcc}",\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwWin32DLLModuleHandler::Process ( const Module& module )\r
+MingwWin32DLLModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
- GenerateExtractWineDLLResourcesTarget ( module );\r
+ GenerateExtractWineDLLResourcesTarget ( module, clean_files );\r
GeneratePreconditionDependencies ( module );\r
- GenerateWin32DLLModuleTarget ( module );\r
+ GenerateWin32DLLModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ( const Module& module )\r
+MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ( const Module& module, string_list& clean_files )\r
{\r
fprintf ( fMakefile, ".PHONY: %s_extractresources\n\n",\r
module.name.c_str () );\r
if ( extension == ".rc" || extension == ".RC" )\r
{\r
string resource = FixupTargetFilename ( file.name );\r
- fprintf ( fMakefile, "\t@echo ${bin2res} -f -x %s\n",\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [BIN2RES] $<\n" );\r
+ fprintf ( fMakefile, "\t@:echo ${bin2res} -f -x %s\n",\r
resource.c_str () );\r
}\r
}\r
}\r
\r
void\r
-MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module )\r
+MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string linkingDependencies = GetLinkingDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
+\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
if ( module.files.size () > 0 )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
- \r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
+\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- linkingDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linker;\r
if ( IsCPlusPlusModule ( module ) )\r
GenerateLinkerCommand ( module,\r
linker,\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwWin32CUIModuleHandler::Process ( const Module& module )\r
+MingwWin32CUIModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateWin32CUIModuleTarget ( module );\r
+ GenerateWin32CUIModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module )\r
+MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linker;\r
if ( IsCPlusPlusModule ( module ) )\r
GenerateLinkerCommand ( module,\r
linker,\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwWin32GUIModuleHandler::Process ( const Module& module )\r
+MingwWin32GUIModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateWin32GUIModuleTarget ( module );\r
+ GenerateWin32GUIModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module )\r
+MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ( );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateImportLibraryTargetIfNeeded ( module );\r
+ GenerateImportLibraryTargetIfNeeded ( module, clean_files );\r
\r
if ( module.files.size () > 0 )\r
{\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
\r
string linker;\r
if ( IsCPlusPlusModule ( module ) )\r
GenerateLinkerCommand ( module,\r
linker,\r
linkerParameters,\r
- objectsMacro );\r
+ objectsMacro,\r
+ libsMacro,\r
+ clean_files );\r
}\r
else\r
{\r
}\r
\r
void\r
-MingwBootLoaderModuleHandler::Process ( const Module& module )\r
+MingwBootLoaderModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateBootLoaderModuleTarget ( module );\r
+ GenerateBootLoaderModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget ( const Module& module )\r
+MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget (\r
+ const Module& module,\r
+ string_list& clean_files )\r
{\r
static string ros_junk ( "$(ROS_TEMPORARY)" );\r
string targetName ( module.GetTargetName () );\r
string target ( FixupTargetFilename ( module.GetPath () ) );\r
string workingDirectory = GetWorkingDirectory ();\r
string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
+ CLEAN_FILE ( junk_tmp );\r
string objectsMacro = GetObjectsMacro ( module );\r
- string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+ string linkDepsMacro = GetLinkingDependenciesMacro ( module );\r
+ string libsMacro = GetLibsMacro ( module );\r
\r
- GenerateMacrosAndTargetsTarget ( module );\r
+ GenerateMacrosAndTargetsTarget ( module, clean_files );\r
\r
fprintf ( fMakefile, "%s: %s %s\n",\r
target.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
+\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [LD] $@\n" );\r
\r
fprintf ( fMakefile,\r
"\t${ld} %s -N -Ttext=0x8000 -o %s %s %s\n",\r
GetLinkerMacro ( module ).c_str (),\r
junk_tmp.c_str (),\r
objectsMacro.c_str (),\r
- importLibraryDependencies.c_str () );\r
+ linkDepsMacro.c_str () );\r
fprintf ( fMakefile,\r
"\t${objcopy} -O binary %s %s\n",\r
junk_tmp.c_str (),\r
target.c_str () );\r
fprintf ( fMakefile,\r
- "\t${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
junk_tmp.c_str () );\r
}\r
\r
}\r
\r
void\r
-MingwBootSectorModuleHandler::Process ( const Module& module )\r
+MingwBootSectorModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateBootSectorModuleTarget ( module );\r
+ GenerateBootSectorModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
void\r
-MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ( const Module& module )\r
+MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
string objectsMacro = GetObjectsMacro ( module );\r
\r
string* nasmflags = new string ( "-f bin" );\r
GenerateMacrosAndTargetsTarget ( module,\r
NULL,\r
- nasmflags);\r
+ nasmflags,\r
+ clean_files );\r
\r
fprintf ( fMakefile, ".PHONY: %s\n\n",\r
module.name.c_str ());\r
}\r
\r
void\r
-MingwIsoModuleHandler::Process ( const Module& module )\r
+MingwIsoModuleHandler::Process ( const Module& module, string_list& clean_files )\r
{\r
GeneratePreconditionDependencies ( module );\r
- GenerateIsoModuleTarget ( module );\r
+ GenerateIsoModuleTarget ( module, clean_files );\r
GenerateInvocations ( module );\r
}\r
\r
}\r
\r
void\r
-MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module )\r
+MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module, string_list& clean_files )\r
{\r
string bootcdDirectory = "cd";\r
string isoboot = FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" );\r
isoboot.c_str (),\r
cdDirectories.c_str (),\r
cdFiles.c_str () );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [CABMAN] $<\n" );\r
fprintf ( fMakefile,\r
"\t${cabman} -C %s -L %s -I\n",\r
reactosDff.c_str (),\r
reactosInf.c_str (),\r
bootcdReactos.c_str () );\r
fprintf ( fMakefile,\r
- "\t- ${rm} %s\n",\r
+ "\t-@${rm} %s\n",\r
reactosInf.c_str () );\r
OutputBootstrapfileCopyCommands ( bootcdDirectory,\r
module );\r
OutputCdfileCopyCommands ( bootcdDirectory,\r
module );\r
+ fprintf ( fMakefile, "\t$(HALFVERBOSEECHO) [CDMAKE] $@\n" );\r
fprintf ( fMakefile,\r
"\t${cdmake} -v -m -b %s %s REACTOS ReactOS.iso\n",\r
isoboot.c_str (),\r
class MingwModuleHandler\r
{\r
public:\r
+ typedef std::vector<std::string> string_list;\r
+\r
static std::map<ModuleType,MingwModuleHandler*>* handler_map;\r
static int ref;\r
\r
static void SetMakefile ( FILE* f );\r
static MingwModuleHandler* LookupHandler ( const std::string& location,\r
ModuleType moduletype_ );\r
- virtual void Process ( const Module& module ) = 0;\r
+ virtual void Process ( const Module& module, string_list& clean_files ) = 0;\r
bool IncludeDirectoryTarget ( const std::string& directory ) const;\r
void GenerateDirectoryTargets () const;\r
static std::string GetObjectFilename ( const std::string& sourceFilename );\r
+ void GenerateCleanTarget ( const Module& module,\r
+ const string_list& clean_files ) const;\r
protected:\r
const std::string &PassThruCacheDirectory ( const std::string &f ) const;\r
std::string GetWorkingDirectory () const;\r
std::string GetModuleArchiveFilename ( const Module& module ) const;\r
bool IsGeneratedFile ( const File& file ) const;\r
std::string GetImportLibraryDependency ( const Module& importedModule ) const;\r
- std::string GetImportLibraryDependencies ( const Module& module ) const;\r
std::string GetModuleDependencies ( const Module& module ) const;\r
std::string GetAllDependencies ( const Module& module ) const;\r
std::string GetSourceFilenames ( const Module& module,\r
std::string GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const;\r
\r
std::string GetObjectFilenames ( const Module& module ) const;\r
- void GenerateMacrosAndTargetsHost ( const Module& module ) const;\r
- void GenerateMacrosAndTargetsTarget ( const Module& module ) const;\r
+ void GenerateMacrosAndTargetsHost ( const Module& module,\r
+ string_list& clean_files ) const;\r
+ void GenerateMacrosAndTargetsTarget ( const Module& module,\r
+ string_list& clean_files ) const;\r
void GenerateMacrosAndTargetsTarget ( const Module& module,\r
const std::string* cflags,\r
- const std::string* nasmflags ) const;\r
+ const std::string* nasmflags,\r
+ string_list& clean_files ) const;\r
std::string GetInvocationDependencies ( const Module& module ) const;\r
void GenerateInvocations ( const Module& module ) const;\r
\r
void GeneratePreconditionDependencies ( const Module& module ) const;\r
std::string GetCFlagsMacro ( const Module& module ) const;\r
std::string GetObjectsMacro ( const Module& module ) const;\r
+ std::string GetLinkingDependenciesMacro ( const Module& module ) const;\r
+ std::string GetLibsMacro ( const Module& module ) const;\r
std::string GetLinkerMacro ( const Module& module ) const;\r
void GenerateLinkerCommand ( const Module& module,\r
const std::string& linker,\r
const std::string& linkerParameters,\r
- const std::string& objectFilenames ) const;\r
- void GenerateImportLibraryTargetIfNeeded ( const Module& module ) const;\r
+ const std::string& objectsMacro,\r
+ const std::string& libsMacro,\r
+ string_list& clean_files ) const;\r
+ void GenerateImportLibraryTargetIfNeeded ( const Module& module, string_list& clean_files ) const;\r
std::string GetDefinitionDependencies ( const Module& module ) const;\r
std::string GetLinkingDependencies ( const Module& module ) const;\r
bool IsCPlusPlusModule ( const Module& module ) const;\r
std::string GenerateGccIncludeParametersFromVector ( const std::vector<Include*>& includes ) const;\r
std::string GenerateCompilerParametersFromVector ( const std::vector<CompilerFlag*>& compilerFlags ) const;\r
std::string GenerateLinkerParametersFromVector ( const std::vector<LinkerFlag*>& linkerFlags ) const;\r
+ std::string GenerateImportLibraryDependenciesFromVector ( const std::vector<Library*>& libraries ) const;\r
std::string GenerateLinkerParameters ( const Module& module ) const;\r
void GenerateMacro ( const char* assignmentOperation,\r
const std::string& macro,\r
const std::vector<File*>& files,\r
const std::vector<Include*>& includes,\r
const std::vector<Define*>& defines,\r
+ const std::vector<Library*>& libraries,\r
const std::vector<CompilerFlag*>* compilerFlags,\r
const std::vector<LinkerFlag*>* linkerFlags,\r
const std::vector<If*>& ifs,\r
const std::string& nasmflags_macro,\r
const std::string& windresflags_macro,\r
const std::string& linkerflags_macro,\r
- const std::string& objs_macro) const;\r
+ const std::string& objs_macro,\r
+ const std::string& libs_macro,\r
+ const std::string& linkdeps_macro ) const;\r
void GenerateMacros ( const Module& module,\r
const std::string& cflags_macro,\r
const std::string& nasmflags_macro,\r
const std::string& windresflags_macro,\r
const std::string& linkerflags_macro,\r
- const std::string& objs_macro) const;\r
+ const std::string& objs_macro,\r
+ const std::string& libs_macro,\r
+ const std::string& linkDepsMacro ) const;\r
std::string GenerateGccIncludeParameters ( const Module& module ) const;\r
std::string GenerateGccParameters ( const Module& module ) const;\r
std::string GenerateNasmParameters ( const Module& module ) const;\r
const std::string& sourceFilename,\r
const std::string& windresflagsMacro ) const;\r
void GenerateWinebuildCommands ( const Module& module,\r
- const std::string& sourceFilename ) const;\r
+ const std::string& sourceFilename,\r
+ string_list& clean_files ) const;\r
void GenerateCommands ( const Module& module,\r
const std::string& sourceFilename,\r
const std::string& cc,\r
const std::string& cppc,\r
const std::string& cflagsMacro,\r
const std::string& nasmflagsMacro,\r
- const std::string& windresflagsMacro ) const;\r
+ const std::string& windresflagsMacro,\r
+ string_list& clean_files ) const;\r
void GenerateObjectFileTargets ( const Module& module,\r
const std::vector<File*>& files,\r
const std::vector<If*>& ifs,\r
const std::string& cppc,\r
const std::string& cflagsMacro,\r
const std::string& nasmflagsMacro,\r
- const std::string& windresflagsMacro ) const;\r
+ const std::string& windresflagsMacro,\r
+ string_list& clean_files ) const;\r
void GenerateObjectFileTargets ( const Module& module,\r
const std::string& cc,\r
const std::string& cppc,\r
const std::string& cflagsMacro,\r
const std::string& nasmflagsMacro,\r
- const std::string& windresflagsMacro ) const;\r
- void GetCleanTargets ( std::vector<std::string>& out,\r
+ const std::string& windresflagsMacro,\r
+ string_list& clean_files ) const;\r
+ void GetCleanTargets ( string_list& out,\r
const std::vector<File*>& files,\r
const std::vector<If*>& ifs ) const;\r
std::string GenerateArchiveTarget ( const Module& module,\r
const std::string& cppc,\r
const std::string& ar,\r
const std::string* clags,\r
- const std::string* nasmflags ) const;\r
+ const std::string* nasmflags,\r
+ string_list& clean_files ) const;\r
std::string GetSpecObjectDependencies ( const std::string& filename ) const;\r
std::string GetDefaultDependencies ( const Module& module ) const;\r
};\r
{\r
public:\r
MingwBuildToolModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateBuildToolModuleTarget ( const Module& module );\r
+ void GenerateBuildToolModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwKernelModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateKernelModuleTarget ( const Module& module );\r
+ void GenerateKernelModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwStaticLibraryModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateStaticLibraryModuleTarget ( const Module& module );\r
+ void GenerateStaticLibraryModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwObjectLibraryModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateObjectLibraryModuleTarget ( const Module& module );\r
+ void GenerateObjectLibraryModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwKernelModeDLLModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateKernelModeDLLModuleTarget ( const Module& module );\r
+ void GenerateKernelModeDLLModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwKernelModeDriverModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateKernelModeDriverModuleTarget ( const Module& module );\r
+ void GenerateKernelModeDriverModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwNativeDLLModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateNativeDLLModuleTarget ( const Module& module );\r
+ void GenerateNativeDLLModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwNativeCUIModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateNativeCUIModuleTarget ( const Module& module );\r
+ void GenerateNativeCUIModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwWin32DLLModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateExtractWineDLLResourcesTarget ( const Module& module );\r
- void GenerateWin32DLLModuleTarget ( const Module& module );\r
+ void GenerateExtractWineDLLResourcesTarget ( const Module& module, string_list& clean_files );\r
+ void GenerateWin32DLLModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwWin32CUIModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateWin32CUIModuleTarget ( const Module& module );\r
+ void GenerateWin32CUIModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwWin32GUIModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateWin32GUIModuleTarget ( const Module& module );\r
+ void GenerateWin32GUIModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwBootLoaderModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateBootLoaderModuleTarget ( const Module& module );\r
+ void GenerateBootLoaderModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwBootSectorModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateBootSectorModuleTarget ( const Module& module );\r
+ void GenerateBootSectorModuleTarget ( const Module& module, string_list& clean_files );\r
};\r
\r
\r
{\r
public:\r
MingwIsoModuleHandler ();\r
- virtual void Process ( const Module& module );\r
+ virtual void Process ( const Module& module, string_list& clean_files );\r
private:\r
- void GenerateIsoModuleTarget ( const Module& module );\r
+ void GenerateIsoModuleTarget ( const Module& module, string_list& clean_files );\r
std::string GetBootstrapCdDirectories ( const std::string bootcdDirectory,\r
const Module& module ) const;\r
std::string GetNonModuleCdDirectories ( const std::string bootcdDirectory,\r