*/
#include "../../pch.h"
#include <assert.h>
+#include <algorithm>
#include "../../rbuild.h"
#include "mingw.h"
using std::vector;
#define CLEAN_FILE(f) clean_files.push_back ( (f).name.length () > 0 ? backend->GetFullName ( f ) : backend->GetFullPath ( f ) );
+#define IsStaticLibrary( module ) ( ( module.type == StaticLibrary ) || ( module.type == HostStaticLibrary ) )
MingwBackend*
MingwModuleHandler::backend = NULL;
case StaticLibrary:
handler = new MingwStaticLibraryModuleHandler ( module );
break;
+ case HostStaticLibrary:
+ handler = new MingwHostStaticLibraryModuleHandler ( module );
+ break;
case ObjectLibrary:
handler = new MingwObjectLibraryModuleHandler ( module );
break;
case IdlHeader:
handler = new MingwIdlHeaderModuleHandler ( module );
break;
+ case Cabinet:
+ handler = new MingwCabinetModuleHandler ( module );
+ break;
case EmbeddedTypeLib:
handler = new MingwEmbeddedTypeLibModuleHandler ( module );
break;
string extension = GetExtension ( *file );
if ( extension == ".spec" || extension == ".SPEC" )
{
- const FileLocation *objectFile = GetObjectFilename ( file, module, NULL );
+ const FileLocation *objectFile = GetObjectFilename ( file, module );
FileLocation *sourceFile = new FileLocation (
objectFile->directory,
objectFile->relative_path,
else if ( ( extension == ".idl" || extension == ".IDL" ) &&
( module.type == RpcServer || module.type == RpcClient || module.type == RpcProxy ) )
{
- const FileLocation *objectFile = GetObjectFilename ( file, module, NULL );
+ const FileLocation *objectFile = GetObjectFilename ( file, module );
FileLocation *sourceFile = new FileLocation (
objectFile->directory,
objectFile->relative_path,
}
else if ( extension == ".mc" || extension == ".MC" )
{
- const FileLocation *objectFile = GetObjectFilename ( file, module, NULL );
+ const FileLocation *objectFile = GetObjectFilename ( file, module );
FileLocation *sourceFile = new FileLocation (
objectFile->directory,
objectFile->relative_path,
string dependencies = backend->GetFullName ( *header );
delete header;
- return dependencies;
+ return " " + dependencies;
}
else
return "";
const File& file = *compilationUnit.GetFiles ()[i];
sourceFiles.push_back ( backend->GetFullName ( file.file ) );
}
- return v2s ( sourceFiles, 10 );
+ return string ( " " ) + v2s ( sourceFiles, 10 );
}
/* caller needs to delete the returned object */
const FileLocation*
MingwModuleHandler::GetModuleArchiveFilename () const
{
- if ( module.type == StaticLibrary )
+ if ( IsStaticLibrary ( module ) )
return GetTargetFilename ( module, NULL );
return new FileLocation ( IntermediateDirectory,
module.output->relative_path,
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation *objectFilename = GetObjectFilename ( &compilationName, importedModule, NULL );
+ const FileLocation *objectFilename = GetObjectFilename ( &compilationName, importedModule );
if ( GetExtension ( *objectFilename ) == ".h" )
dep += ssprintf ( " $(%s_HEADERS)", importedModule.name.c_str () );
else if ( GetExtension ( *objectFilename ) == ".rc" )
const FileLocation*
MingwModuleHandler::GetObjectFilename (
const FileLocation* sourceFile,
- const Module& module,
- string_list* pclean_files ) const
+ const Module& module ) const
{
DirectoryLocation destination_directory;
string newExtension;
destination_directory,
sourceFile->relative_path,
ReplaceExtension ( sourceFile->name, newExtension ) );
+ PassThruCacheDirectory ( obj_file );
- if ( pclean_files )
- {
- string_list& clean_files = *pclean_files;
- CLEAN_FILE ( *obj_file );
- }
return obj_file;
}
}
fprintf ( fMakefile, " 2>$(NUL)\n" );
- if ( module.name != "zlib" ) /* Avoid make warning */
+ if( ProxyMakefile::GenerateProxyMakefile(module) )
{
DirectoryLocation root;
+
if ( backend->configuration.GenerateProxyMakefilesInSourceTree )
root = SourceDirectory;
else
root = OutputDirectory;
+
FileLocation proxyMakefile ( root,
module.output->relative_path,
"GNUmakefile" );
if ( objectFilenames.size () > 0 )
objectFilenames += " ";
const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
- const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
objectFilenames += backend->GetFullName ( *object_file );
delete object_file;
}
{
CompilerFlag& compilerFlag = *compilerFlags[i];
if ( compilerFlag.compiler == type )
- {
- if ( parameters.length () > 0 )
- parameters += " ";
- parameters += compilerFlag.flag;
- }
+ parameters += " " + compilerFlag.flag;
}
return parameters;
}
if ( generatingCompilerMacro )
{
- string compilerParameters = GenerateCompilerParametersFromVector ( data.compilerFlags , CompilerTypeDontCare );
+ string compilerParameters = GenerateCompilerParametersFromVector ( data.compilerFlags, CompilerTypeDontCare );
if ( compilerParameters.size () > 0 )
{
fprintf (
fMakefile,
- " %s",
+ "%s",
compilerParameters.c_str () );
}
}
if ( compilationUnit.IsFirstFile () )
{
const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
fprintf ( fMakefile,
"%s := %s $(%s)\n",
objectsMacro.c_str(),
if ( !compilationUnit.IsFirstFile () )
{
const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module );
if ( GetExtension ( *objectFilename ) == ".h" )
headers.push_back ( objectFilename );
else if ( GetExtension ( *objectFilename ) == ".rc" )
for ( i = 0; i < sourceCompilationUnits.size (); i++ )
{
const FileLocation& compilationName = sourceCompilationUnits[i]->GetFilename ();
- const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
fprintf (
fMakefile,
"%s += %s\n",
if ( !module.pch || !use_pch )
return NULL;
return new FileLocation ( IntermediateDirectory,
- module.pch->file.relative_path,
- ReplaceExtension ( module.pch->file.name, "_" + module.name + ".gch" ) );
+ module.pch->file->relative_path,
+ ReplaceExtension ( module.pch->file->name, "_" + module.name + ".gch" ) );
}
-Rule gasRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) $(module_rbuild) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule arRule1 ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).a: $($(module_name)_OBJS) | $(INTERMEDIATE)$(SEP)$(source_dir)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).a",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule arRule2 ( "\t$(ECHO_AR)\n"
+ "\t${ar} -rc $@ $($(module_name)_OBJS)\n",
+ NULL );
+Rule arHostRule2 ( "\t$(ECHO_AR)\n"
+ "\t${host_ar} -rc $@ $($(module_name)_OBJS)\n",
+ NULL );
+Rule gasRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_GAS)\n"
"\t${gcc} -x assembler-with-cpp -c $< -o $@ -D__ASM__ $($(module_name)_CFLAGS)\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule bootRule ( "$(module_output): $(source) $(module_rbuild) | $(OUTPUT)$(SEP)$(source_dir)\n"
+Rule bootRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(module_output): $(source)$(dependencies) | $(OUTPUT)$(SEP)$(source_dir)\n"
"\t$(ECHO_NASM)\n"
"\t$(Q)${nasm} -f win32 $< -o $@ $($(module_name)_NASMFLAGS)\n",
"$(OUTPUT)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule nasmRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) $(module_rbuild) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule nasmRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_NASM)\n"
"\t$(Q)${nasm} -f win32 $< -o $@ $($(module_name)_NASMFLAGS)\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule windresRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff: $(source) $(module_rbuild) $(WRC_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule windresRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff: $(source)$(dependencies) $(WRC_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir) $(TEMPORARY)\n"
"\t$(ECHO_WRC)\n"
"\t${gcc} -xc -E -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source) > $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp\n"
"\t$(Q)$(WRC_TARGET) ${$(module_name)_RCFLAGS} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp\n"
"\t$(ECHO_WMC)\n"
"\t$(Q)$(WMC_TARGET) -i -H $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h -o $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(source)\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc", "$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h", NULL );
-Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec.def: $(source) $(module_rbuild) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
- "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).spec.def --def -E $(source_path)$(SEP)$(source_name_noext).spec\n"
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).spec.def --def -E $(source)\n"
"$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
"\t$(ECHO_WINEBLD)\n"
- "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n",
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).stubs.c",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).stubs.o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule widlHeaderRule ( "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext).h: $(source) $(module_rbuild) $(WIDL_TARGET) | $(INTERMEDIATE)\\$(source_dir)\n"
+Rule widlHeaderRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WIDL)\n"
- "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext).h $(source)\n",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext).h",
- "$(INTERMEDIATE)\\$(source_dir)\\", NULL );
-Rule widlServerRule ( "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.c $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.h: $(source) $(module_rbuild) $(WIDL_TARGET) | $(INTERMEDIATE)\\$(source_dir)\n"
+ "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h $(source)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule widlServerRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WIDL)\n"
- "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.h -s -S $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.c $(source)\n",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.h",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_s.c",
- "$(INTERMEDIATE)\\$(source_dir)\\", NULL );
-Rule widlClientRule ( "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.c $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.h: $(source) $(module_rbuild) $(WIDL_TARGET) | $(INTERMEDIATE)\\$(source_dir)\n"
+ "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h -s -S $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(source)\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.o",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule widlClientRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WIDL)\n"
- "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.h -c -C $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.c $(source)\n",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.h",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_c.c",
- "$(INTERMEDIATE)\\$(source_dir)\\", NULL );
-Rule widlProxyRule ( "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.c $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.h: $(source) $(module_rbuild) $(WIDL_TARGET) | $(INTERMEDIATE)\\$(source_dir)\n"
+ "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h -c -C $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(source)\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.o",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule widlProxyRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WIDL)\n"
- "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.h -p -P $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.c $(source)\n",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.h",
- "$(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext)_p.c",
- "$(INTERMEDIATE)\\$(source_dir)\\", NULL );
-Rule widlTlbRule ( "$(OUTPUT)\\$(source_dir)\\$(module_name).tlb: $(source) $(module_rbuild) $(WIDL_TARGET) | $(INTERMEDIATE)\\$(source_dir)\n"
+ "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h -p -P $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(source)\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.o",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(module_name).tlb: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WIDL)\n"
- "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(INTERMEDIATE)\\$(source_dir)\\$(source_name_noext).tlb $(source)\n",
- "$(INTERMEDIATE)\\$(source_dir)\\", NULL );
+ "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).tlb $(source)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule gccRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) ${$(module_name)_precondition}$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL );
+Rule gccHostRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) ${$(module_name)_precondition}$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${host_gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL );
+Rule gppRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) ${$(module_name)_precondition}$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${gpp} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL );
+Rule gppHostRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source) ${$(module_name)_precondition}$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CC)\n"
+ "\t${host_gpp} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL );
+Rule emptyRule ( "", NULL );
void
MingwModuleHandler::GenerateGccCommand (
const FileLocation* sourceFile,
- const string& extraDependencies,
- const string& cc,
- const string& cflagsMacro )
+ const Rule *rule,
+ const string& extraDependencies )
{
const FileLocation *generatedSourceFileName = GetActualSourceFilename ( sourceFile );
const FileLocation *pchFilename = GetPrecompiledHeaderFilename ();
- string dependencies = backend->GetFullName ( *generatedSourceFileName );
+ string dependencies = extraDependencies;
+
+ string flags;
+ string extension = GetExtension ( *sourceFile );
+ if ( extension == ".cc" || extension == ".cpp" || extension == ".cxx" )
+ flags = GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags, CompilerTypeCPP );
+ else
+ flags = GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags, CompilerTypeCC );
- if ( extraDependencies != "" )
- dependencies += " " + extraDependencies;
if ( pchFilename )
+ {
dependencies += " " + backend->GetFullName ( *pchFilename );
+ delete pchFilename;
+ }
/* WIDL generated headers may be used */
vector<FileLocation> rpcDependencies;
GetRpcHeaderDependencies ( rpcDependencies );
- dependencies += " " + v2s ( backend, rpcDependencies, 5 );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
+ if ( rpcDependencies.size () > 0 )
+ dependencies += " " + v2s ( backend, rpcDependencies, 5 );
- const FileLocation *objectFilename = GetObjectFilename (
- sourceFile, module, &clean_files );
- fprintf ( fMakefile,
- "%s: %s | %s\n",
- backend->GetFullName ( *objectFilename ).c_str (),
- dependencies.c_str (),
- backend->GetFullPath ( *objectFilename ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_CC)\n" );
- fprintf ( fMakefile,
- "\t%s -c $< -o $@ %s\n",
- cc.c_str (),
- cflagsMacro.c_str () );
+ rule->Execute ( fMakefile, backend, module, generatedSourceFileName, clean_files, dependencies, flags );
- delete objectFilename;
delete generatedSourceFileName;
- if ( pchFilename )
- delete pchFilename;
}
string
void
MingwModuleHandler::GenerateCommands (
const CompilationUnit& compilationUnit,
- const string& extraDependencies,
- const string& cc,
- const string& cppc,
- const string& cflagsMacro,
- const string& nasmflagsMacro,
- const string& windresflagsMacro,
- const string& widlflagsMacro )
+ const string& extraDependencies )
{
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
{ HostDontCare, RpcProxy, ".idl", &widlProxyRule },
{ HostDontCare, EmbeddedTypeLib, ".idl", &widlTlbRule },
{ HostDontCare, TypeDontCare, ".idl", &widlHeaderRule },
+ { HostTrue, TypeDontCare, ".c", &gccHostRule },
+ { HostTrue, TypeDontCare, ".cc", &gppHostRule },
+ { HostTrue, TypeDontCare, ".cpp", &gppHostRule },
+ { HostTrue, TypeDontCare, ".cxx", &gppHostRule },
+ { HostFalse, TypeDontCare, ".c", &gccRule },
+ { HostFalse, TypeDontCare, ".cc", &gppRule },
+ { HostFalse, TypeDontCare, ".cpp", &gppRule },
+ { HostFalse, TypeDontCare, ".cxx", &gppRule },
+ { HostFalse, Cabinet, ".*", &emptyRule }
};
size_t i;
Rule *customRule = NULL;
continue;
if ( rules[i].type != TypeDontCare && rules[i].type != module.type )
continue;
- if ( rules[i].extension != extension )
+ if ( rules[i].extension != extension && rules[i].extension != ".*")
continue;
customRule = rules[i].rule;
break;
}
- if ( customRule )
- customRule->Execute ( fMakefile, backend, module, &sourceFile, clean_files );
-
- string flags = cflagsMacro;
- flags += " ";
- if ( extension == ".c" )
- {
- flags += GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags , CompilerTypeCC );
- GenerateGccCommand ( &sourceFile,
- GetCompilationUnitDependencies ( compilationUnit ) + extraDependencies,
- cc,
- flags );
- }
- else if ( extension == ".cc" ||
- extension == ".cpp" ||
- extension == ".cxx" )
- {
- flags += GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags , CompilerTypeCPP );
- GenerateGccCommand ( &sourceFile,
- GetCompilationUnitDependencies ( compilationUnit ) + extraDependencies,
- cppc,
- flags );
- }
- else if ( extension == ".spec" )
- {
- GenerateGccCommand ( &sourceFile,
- extraDependencies,
- cc,
- cflagsMacro );
- }
- else if ( extension == ".idl" &&
- (module.type == RpcServer) || (module.type == RpcClient) || (module.type == RpcProxy) )
+ if ( extension == ".c" || extension == ".cc" || extension == ".cpp" || extension == ".cxx" )
{
GenerateGccCommand ( &sourceFile,
- GetExtraDependencies ( &sourceFile ),
- cc,
- cflagsMacro );
+ customRule,
+ GetCompilationUnitDependencies ( compilationUnit ) + GetExtraDependencies ( &sourceFile ) + extraDependencies );
}
- else if ( !customRule )
+ else if ( customRule )
+ customRule->Execute ( fMakefile, backend, module, &sourceFile, clean_files );
+ else
{
throw InvalidOperationException ( __FILE__,
__LINE__,
{
CompilationUnit& compilationUnit = *data.compilationUnits[i];
const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
objectFiles.push_back ( *object_file );
delete object_file;
}
void
MingwModuleHandler::GenerateLinkerCommand (
const string& dependencies,
- const string& linker,
const string& linkerParameters,
- const string& objectsMacro,
- const string& libsMacro,
const string& pefixupParameters )
{
const FileLocation *target_file = GetTargetFilename ( module, NULL );
const FileLocation *definitionFilename = GetDefinitionFilename ();
+ string linker = module.cplusplus ? "${gpp}" : "${gcc}";
+ string objectsMacro = GetObjectsMacro ( module );
+ string libsMacro = GetLibsMacro ();
string target_macro ( GetTargetMacro ( module ) );
string target_folder ( backend->GetFullPath ( *target_file ) );
string linkerScriptArgument;
if ( module.linkerScript != NULL )
- linkerScriptArgument = ssprintf ( "-Wl,-T,%s", backend->GetFullName ( module.linkerScript->file ).c_str () );
+ linkerScriptArgument = ssprintf ( " -Wl,-T,%s", backend->GetFullName ( *module.linkerScript->file ).c_str () );
else
linkerScriptArgument = "";
fprintf ( fMakefile,
"%s: %s %s $(RSYM_TARGET) $(PEFIXUP_TARGET) | %s\n",
target_macro.c_str (),
- backend->GetFullName ( *definitionFilename ).c_str (),
+ definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
dependencies.c_str (),
target_folder.c_str () );
fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
if ( !module.IsDLL () )
{
fprintf ( fMakefile,
- "\t%s %s %s -o %s %s %s %s\n",
+ "\t%s %s%s -o %s %s %s %s\n",
linker.c_str (),
linkerParameters.c_str (),
linkerScriptArgument.c_str (),
CLEAN_FILE ( temp_exp );
fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s --output-exp %s %s %s\n",
+ "\t${dlltool} --dllname %s --def %s --output-exp %s%s%s\n",
targetName.c_str (),
- backend->GetFullName ( *definitionFilename ).c_str (),
+ definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
backend->GetFullName ( temp_exp ).c_str (),
- module.mangledSymbols ? "" : "--kill-at",
- module.underscoreSymbols ? "--add-underscore" : "" );
+ module.mangledSymbols ? "" : " --kill-at",
+ module.underscoreSymbols ? " --add-underscore" : "" );
fprintf ( fMakefile,
- "\t%s %s %s %s -o %s %s %s %s\n",
+ "\t%s %s%s %s -o %s %s %s %s\n",
linker.c_str (),
linkerParameters.c_str (),
linkerScriptArgument.c_str (),
GetLinkerMacro ().c_str () );
fprintf ( fMakefile,
- "\t$(Q)$(PEFIXUP_TARGET) %s -exports %s\n",
+ "\t$(Q)$(PEFIXUP_TARGET) %s -exports%s\n",
target_macro.c_str (),
pefixupParameters.c_str() );
//printf ( "%s will have all its functions exported\n",
// module.target->name.c_str () );
fprintf ( fMakefile,
- "\t%s %s %s -o %s %s %s %s\n",
+ "\t%s %s%s -o %s %s %s %s\n",
linker.c_str (),
linkerParameters.c_str (),
linkerScriptArgument.c_str (),
GenerateRunStripCode ();
GenerateCleanObjectsAsYouGoCode ();
- delete definitionFilename;
+ if ( definitionFilename )
+ delete definitionFilename;
delete target_file;
}
}
void
-MingwModuleHandler::GenerateObjectFileTargets (
- const IfableData& data,
- const string& cc,
- const string& cppc,
- const string& cflagsMacro,
- const string& nasmflagsMacro,
- const string& windresflagsMacro,
- const string& widlflagsMacro )
+MingwModuleHandler::GenerateObjectFileTargets ( const IfableData& data )
{
size_t i;
string moduleDependencies;
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module, NULL );
+ const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module );
if ( GetExtension ( *objectFilename ) == ".h" )
moduleDependencies += ssprintf ( " $(%s_HEADERS)", module.name.c_str () );
else if ( GetExtension ( *objectFilename ) == ".rc" )
for ( i = 0; i < compilationUnits.size (); i++ )
{
GenerateCommands ( *compilationUnits[i],
- moduleDependencies,
- cc,
- cppc,
- cflagsMacro,
- nasmflagsMacro,
- windresflagsMacro,
- widlflagsMacro );
+ moduleDependencies );
fprintf ( fMakefile,
"\n" );
}
const vector<If*>& ifs = data.ifs;
for ( i = 0; i < ifs.size(); i++ )
{
- GenerateObjectFileTargets ( ifs[i]->data,
- cc,
- cppc,
- cflagsMacro,
- nasmflagsMacro,
- windresflagsMacro,
- widlflagsMacro );
+ GenerateObjectFileTargets ( ifs[i]->data );
}
vector<CompilationUnit*> sourceCompilationUnits;
for ( i = 0; i < sourceCompilationUnits.size (); i++ )
{
GenerateCommands ( *sourceCompilationUnits[i],
- moduleDependencies,
- cc,
- cppc,
- cflagsMacro,
- nasmflagsMacro,
- windresflagsMacro,
- widlflagsMacro );
+ moduleDependencies );
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
}
void
-MingwModuleHandler::GenerateObjectFileTargets (
- const string& cc,
- const string& cppc,
- const string& cflagsMacro,
- const string& nasmflagsMacro,
- const string& windresflagsMacro,
- const string& widlflagsMacro )
+MingwModuleHandler::GenerateObjectFileTargets ()
{
const FileLocation *pchFilename = GetPrecompiledHeaderFilename ();
if ( pchFilename )
{
- const FileLocation& baseHeaderFile = module.pch->file;
+ string cc = ( module.host == HostTrue ? "${host_gcc}" : "${gcc}" );
+ string cppc = ( module.host == HostTrue ? "${host_gpp}" : "${gpp}" );
+
+ const FileLocation& baseHeaderFile = *module.pch->file;
CLEAN_FILE ( *pchFilename );
string dependencies = backend->GetFullName ( baseHeaderFile );
- string flags = cflagsMacro;
- CompilerType type = module.cplusplus ? CompilerTypeCPP : CompilerTypeCC;
- flags += " ";
- flags += GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags , type );
/* WIDL generated headers may be used */
vector<FileLocation> rpcDependencies;
GetRpcHeaderDependencies ( rpcDependencies );
- dependencies += " " + v2s ( backend, rpcDependencies, 5 );
+ if ( rpcDependencies.size () > 0 )
+ dependencies += " " + v2s ( backend, rpcDependencies, 5 );
fprintf ( fMakefile,
- "%s: %s | %s\n",
+ "%s: %s ${%s_precondition} | %s\n",
backend->GetFullName ( *pchFilename ).c_str(),
dependencies.c_str(),
+ module.name.c_str (),
backend->GetFullPath ( *pchFilename ).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(),
backend->GetFullName ( *pchFilename ).c_str(),
- flags.c_str(),
+ cflagsMacro.c_str(),
backend->GetFullName ( baseHeaderFile ).c_str() );
delete pchFilename;
}
- GenerateObjectFileTargets ( module.non_if_data,
- cc,
- cppc,
- cflagsMacro,
- nasmflagsMacro,
- windresflagsMacro,
- widlflagsMacro );
+ GenerateObjectFileTargets ( module.non_if_data );
fprintf ( fMakefile, "\n" );
}
/* caller needs to delete the returned object */
const FileLocation*
-MingwModuleHandler::GenerateArchiveTarget ( const string& ar,
- const string& objs_macro ) const
+MingwModuleHandler::GenerateArchiveTarget ()
{
const FileLocation *archiveFilename = GetModuleArchiveFilename ();
+ const FileLocation *definitionFilename = GetDefinitionFilename ();
- fprintf ( fMakefile,
- "%s: %s | %s\n",
- backend->GetFullName ( *archiveFilename ).c_str (),
- objs_macro.c_str (),
- backend->GetFullPath ( *archiveFilename ).c_str() );
+ arRule1.Execute ( fMakefile, backend, module, archiveFilename, clean_files );
- if ( module.type == StaticLibrary && module.importLibrary )
+ if ( IsStaticLibrary ( module ) && definitionFilename )
{
- const FileLocation *definitionFilename = GetDefinitionFilename ();
-
fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s --output-lib $@ %s %s\n",
+ "\t${dlltool} --dllname %s --def %s --output-lib $@%s%s\n",
module.importLibrary->dllname.c_str (),
backend->GetFullName ( *definitionFilename ).c_str (),
- module.mangledSymbols ? "" : "--kill-at",
- module.underscoreSymbols ? "--add-underscore" : "" );
-
- delete definitionFilename;
+ module.mangledSymbols ? "" : " --kill-at",
+ module.underscoreSymbols ? " --add-underscore" : "" );
}
- fprintf ( fMakefile, "\t$(ECHO_AR)\n" );
+ if ( definitionFilename )
+ delete definitionFilename;
- fprintf ( fMakefile,
- "\t%s -rc $@ %s\n",
- ar.c_str (),
- objs_macro.c_str ());
+ if(module.type == HostStaticLibrary)
+ arHostRule2.Execute ( fMakefile, backend, module, archiveFilename, clean_files );
+ else
+ arRule2.Execute ( fMakefile, backend, module, archiveFilename, clean_files );
GenerateCleanObjectsAsYouGoCode ();
&module.linkerFlags,
used_defs );
- GenerateMacros (
- "+=",
- module.project.non_if_data,
- NULL,
- used_defs );
+ if ( module.host == HostFalse )
+ {
+ GenerateMacros (
+ "+=",
+ module.project.non_if_data,
+ NULL,
+ used_defs );
+ }
vector<FileLocation> s;
if ( module.importLibrary )
fprintf ( fMakefile, "\n" );
}
- string globalCflags = "-g";
+ string globalCflags = "";
+ if ( module.host == HostFalse )
+ globalCflags += " $(PROJECT_CFLAGS)";
+ else
+ globalCflags += " -Wall -Wpointer-arith -D__REACTOS__";
+ globalCflags += " -g";
if ( backend->usePipe )
globalCflags += " -pipe";
if ( !module.allowWarnings )
if ( module.cplusplus )
globalCflags += " $(HOST_CPPFLAGS)";
else
- globalCflags += " $(HOST_CFLAGS)";
+ globalCflags += " -Wno-strict-aliasing $(HOST_CFLAGS)";
}
else
{
fprintf (
fMakefile,
- "%s += $(PROJECT_CFLAGS) %s\n",
+ "%s +=%s\n",
cflagsMacro.c_str (),
globalCflags.c_str () );
- fprintf (
- fMakefile,
- "%s += $(PROJECT_RCFLAGS)\n",
- windresflagsMacro.c_str () );
+ if ( module.host == HostFalse )
+ {
+ fprintf (
+ fMakefile,
+ "%s += $(PROJECT_RCFLAGS)\n",
+ windresflagsMacro.c_str () );
- fprintf (
- fMakefile,
- "%s += $(PROJECT_WIDLFLAGS) -I%s\n",
- widlflagsMacro.c_str (),
- module.output->relative_path.c_str () );
+ fprintf (
+ fMakefile,
+ "%s += $(PROJECT_WIDLFLAGS) -I%s\n",
+ widlflagsMacro.c_str (),
+ module.output->relative_path.c_str () );
- fprintf (
- fMakefile,
- "%s_LFLAGS += $(PROJECT_LFLAGS) -g\n",
- module.name.c_str () );
+ fprintf (
+ fMakefile,
+ "%s_LFLAGS += $(PROJECT_LFLAGS) -g\n",
+ module.name.c_str () );
+ }
+ else
+ {
+ fprintf (
+ fMakefile,
+ "%s_LFLAGS += $(HOST_LFLAGS)\n",
+ module.name.c_str () );
+ }
fprintf (
fMakefile,
linkerflags.c_str () );
}
- if ( module.type == StaticLibrary && module.isStartupLib )
+ if ( IsStaticLibrary ( module ) && module.isStartupLib )
{
fprintf ( fMakefile,
"%s += -Wno-main\n\n",
void
MingwModuleHandler::GenerateRules ()
{
- string cc = ( module.host == HostTrue ? "${host_gcc}" : "${gcc}" );
- string cppc = ( module.host == HostTrue ? "${host_gpp}" : "${gpp}" );
- string ar = ( module.host == HostTrue ? "${host_ar}" : "${ar}" );
-
string targetMacro = GetTargetMacro ( module );
//CLEAN_FILE ( targetMacro );
CLEAN_FILE ( FileLocation ( SourceDirectory, "", targetMacro ) );
if ( !ReferenceObjects ( module ) )
{
- const FileLocation* ar_target = GenerateArchiveTarget ( ar, objectsMacro );
- CLEAN_FILE ( *ar_target );
+ const FileLocation* ar_target = GenerateArchiveTarget ();
delete ar_target;
}
- GenerateObjectFileTargets ( cc,
- cppc,
- cflagsMacro,
- nasmflagsMacro,
- windresflagsMacro,
- widlflagsMacro );
+ GenerateObjectFileTargets ();
}
void
string_list& dependencies ) const
{
/* Avoid circular dependency */
- if ( module.type != BuildTool
- && module.name != "zlib"
- && module.name != "hostzlib" )
-
- dependencies.push_back ( "$(INIT)" );
-
- if ( module.type != BuildTool
- && module.name != "psdk" )
+ if ( module.host == HostTrue )
+ return;
- dependencies.push_back ( "$(PSDK_TARGET) $(psdk_HEADERS)" );
+ if ( module.name != "psdk" )
+ dependencies.push_back ( "$(PSDK_TARGET) $(psdk_HEADERS)" );
- /* Check if any dependent library relays on the generated headers */
+ /* Check if any dependent library relies on the generated headers */
for ( size_t i = 0; i < module.project.modules.size (); i++ )
{
const Module& m = *module.project.modules[i];
string extension = GetExtension ( sourceFile );
if (extension == ".mc" || extension == ".MC" )
{
- string dependency = ssprintf ( " $(%s_MCHEADERS)", m.name.c_str () );
+ string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () );
dependencies.push_back ( dependency );
}
}
fprintf ( fMakefile, "\n\n" );
}
- for ( size_t i = 0; i < sourceFilenames.size(); i++ )
- {
- fprintf ( fMakefile,
- "%s: ${%s}\n",
- backend->GetFullName ( sourceFilenames[i] ).c_str (),
- preconditionDependenciesName.c_str ());
- }
fprintf ( fMakefile, "\n" );
}
const FileLocation*
MingwModuleHandler::GetDefinitionFilename () const
{
- if ( module.importLibrary != NULL )
- {
- DirectoryLocation directory;
- if ( IsWineModule () )
- directory = IntermediateDirectory;
- else
- directory = SourceDirectory;
+ if ( module.importLibrary == NULL )
+ return NULL;
- return new FileLocation ( directory,
- module.importLibrary->source->relative_path,
- module.importLibrary->source->name );
- }
+ DirectoryLocation directory;
+ if ( IsWineModule () )
+ directory = IntermediateDirectory;
else
- return new FileLocation ( SourceDirectory, "tools" + sSep + "rbuild", "empty.def" );
+ directory = SourceDirectory;
+
+ return new FileLocation ( directory,
+ module.importLibrary->source->relative_path,
+ module.importLibrary->source->name );
}
void
{
const FileLocation *library_target = GetImportLibraryFilename ( module, &clean_files );
const FileLocation *defFilename = GetDefinitionFilename ();
+ string empty = "tools" + sSep + "rbuild" + sSep + "empty.def";
vector<FileLocation> deps;
GetDefinitionDependencies ( deps );
fprintf ( fMakefile, "# IMPORT LIBRARY RULE:\n" );
- fprintf ( fMakefile, "%s: %s",
- backend->GetFullName ( *library_target ).c_str (),
- backend->GetFullName ( *defFilename ).c_str () );
+ fprintf ( fMakefile, "%s:",
+ backend->GetFullName ( *library_target ).c_str () );
+
+ if ( defFilename )
+ {
+ fprintf ( fMakefile, " %s",
+ backend->GetFullName ( *defFilename ).c_str () );
+ }
size_t i, iend = deps.size();
for ( i = 0; i < iend; i++ )
fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" );
fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s --output-lib %s %s %s\n\n",
+ "\t${dlltool} --dllname %s --def %s --output-lib %s%s%s\n\n",
module.output->name.c_str (),
- backend->GetFullName ( *defFilename ).c_str (),
+ defFilename ? backend->GetFullName ( *defFilename ).c_str ()
+ : empty.c_str (),
backend->GetFullName ( *library_target ).c_str (),
- module.mangledSymbols ? "" : "--kill-at",
- module.underscoreSymbols ? "--add-underscore" : "" );
+ module.mangledSymbols ? "" : " --kill-at",
+ module.underscoreSymbols ? " --add-underscore" : "" );
- delete defFilename;
+ if ( defFilename )
+ delete defFilename;
delete library_target;
}
}
{
string targetMacro ( GetTargetMacro ( module ) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s",
- module.GetEntryPoint(true).c_str (),
+ module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (),
module.baseaddress.c_str () );
+
GenerateLinkerCommand ( dependencies,
- "${gcc}",
- linkerParameters + " $(NTOSKRNL_SHARED)",
- objectsMacro,
- libsMacro,
- "-sections" );
+ linkerParameters + " $(NTOSKRNL_SHARED)",
+ " -sections" );
}
else
{
}
+MingwHostStaticLibraryModuleHandler::MingwHostStaticLibraryModuleHandler (
+ const Module& module_ )
+
+ : MingwModuleHandler ( module_ )
+{
+}
+
+void
+MingwHostStaticLibraryModuleHandler::Process ()
+{
+ GenerateHostStaticLibraryModuleTarget ();
+}
+
+void
+MingwHostStaticLibraryModuleHandler::GenerateHostStaticLibraryModuleTarget ()
+{
+ GenerateRules ();
+}
+
+
MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler (
const Module& module_ )
{
string targetMacro ( GetTargetMacro ( module ) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- "${gcc}",
linkerParameters,
- objectsMacro,
- libsMacro,
- "-sections" );
+ " -sections" );
}
else
{
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ();
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- "${gcc}",
linkerParameters,
- objectsMacro,
- libsMacro,
- "-sections" );
+ " -sections" );
}
else
{
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- "${gcc}",
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- "${gcc}",
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linker;
- if ( module.cplusplus )
- linker = "${gpp}";
- else
- linker = "${gcc}";
-
string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- linker,
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linker;
- if ( module.cplusplus )
- linker = "${gpp}";
- else
- linker = "${gcc}";
-
string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- linker,
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linker;
- if ( module.cplusplus )
- linker = "${gpp}";
- else
- linker = "${gcc}";
-
string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- linker,
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
{
string targetMacro ( GetTargetMacro (module) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linker;
- if ( module.cplusplus )
- linker = "${gpp}";
- else
- linker = "${gcc}";
-
string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- linker,
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
- if (Environment::GetArch() == "arm")
- {
- fprintf ( fMakefile,
- "\t${gcc} -Wl,--subsystem,native -Wl,--section-start,startup=0x8000 -o %s %s %s %s\n",
- backend->GetFullName ( junk_tmp ).c_str (),
- objectsMacro.c_str (),
- linkDepsMacro.c_str (),
- GetLinkerMacro ().c_str ());
- }
- else
- {
- fprintf ( fMakefile,
- "\t${gcc} -Wl,--subsystem,native -Wl,-Ttext,0x8000 -o %s %s %s %s\n",
- backend->GetFullName ( junk_tmp ).c_str (),
- objectsMacro.c_str (),
- linkDepsMacro.c_str (),
- GetLinkerMacro ().c_str ());
- }
+ if (Environment::GetArch() == "arm")
+ {
+ fprintf ( fMakefile,
+ "\t${gcc} -Wl,--subsystem,native -Wl,--section-start,startup=0x8000 -o %s %s %s %s\n",
+ backend->GetFullName ( junk_tmp ).c_str (),
+ objectsMacro.c_str (),
+ linkDepsMacro.c_str (),
+ GetLinkerMacro ().c_str ());
+ }
+ else
+ {
+ fprintf ( fMakefile,
+ "\t${gcc} -Wl,--subsystem,native -Wl,-Ttext,0x8000 -o %s %s %s %s\n",
+ backend->GetFullName ( junk_tmp ).c_str (),
+ objectsMacro.c_str (),
+ linkDepsMacro.c_str (),
+ GetLinkerMacro ().c_str ());
+ }
fprintf ( fMakefile,
"\t${objcopy} -O binary %s $@\n",
backend->GetFullName ( junk_tmp ).c_str () );
FileLocation reactosInf ( bootcdReactos.directory,
bootcdReactos.relative_path,
"reactos.inf" );
- FileLocation vgafontsCab( bootcdReactos.directory,
- bootcdReactos.relative_path,
- "vgafonts.cab");
- FileLocation vgafontsDir( SourceDirectory,
- "media" + sSep + "vgafonts",
- "" );
vSourceFiles.push_back ( reactosDff );
sourceFiles.c_str (),
cdFiles.c_str (),
cdDirectories.c_str () );
- fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" );
- fprintf ( fMakefile,
- "\t$(Q)$(CABMAN_TARGET) -M raw -S %s %s\\*.bin\n", // Escape the asterisk for Make
- backend->GetFullName ( vgafontsCab ).c_str (),
- backend->GetFullName ( vgafontsDir ).c_str ());
fprintf ( fMakefile,
"\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I -P $(OUTPUT)\n",
backend->GetFullName ( reactosDff ).c_str (),
{
string targetMacro ( GetTargetMacro ( module ) );
string workingDirectory = GetWorkingDirectory ( );
- string objectsMacro = GetObjectsMacro ( module );
string linkDepsMacro = GetLinkingDependenciesMacro ();
- string libsMacro = GetLibsMacro ();
GenerateImportLibraryTargetIfNeeded ();
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linker;
- if ( module.cplusplus )
- linker = "${gpp}";
- else
- linker = "${gcc}";
-
string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
- linker,
linkerParameters,
- objectsMacro,
- libsMacro,
"" );
}
else
GenerateRules ();
}
+MingwCabinetModuleHandler::MingwCabinetModuleHandler (
+ const Module& module_ )
+
+ : MingwModuleHandler ( module_ )
+{
+}
+
+void
+MingwCabinetModuleHandler::Process ()
+{
+ string targetMacro ( GetTargetMacro (module) );
+
+ GenerateRules ();
+
+ const FileLocation *target_file = GetTargetFilename ( module, NULL );
+ fprintf ( fMakefile, "%s: | %s\n",
+ targetMacro.c_str (),
+ backend->GetFullPath ( *target_file ).c_str () );
+
+ fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" );
+ fprintf ( fMakefile,
+ "\t$(Q)$(cabman_TARGET) -M raw -S %s $(%s_SOURCES)\n", // Escape the asterisk for Make
+ targetMacro.c_str (),
+ module.name.c_str());
+}
+
MingwElfExecutableModuleHandler::MingwElfExecutableModuleHandler (
const Module& module_ )