case Win32GUI:
handler = new MingwWin32GUIModuleHandler ( module );
break;
+ case KeyboardLayout:
case KernelModeDLL:
handler = new MingwKernelModeDLLModuleHandler ( module );
break;
case Alias:
handler = new MingwAliasModuleHandler ( module );
break;
+ case MessageHeader:
+ handler = new MingwMessageHeaderModuleHandler (module);
+ break;
case IdlHeader:
handler = new MingwIdlHeaderModuleHandler ( module );
break;
return "";
}
-/* caller needs to delete the returned object */
-const FileLocation*
-MingwModuleHandler::GetActualSourceFilename (
- const FileLocation* file ) const
-{
- string filename = file->name;
-
- string extension = GetExtension ( *file );
- if ( extension == ".spec" || extension == ".SPEC" )
- {
- const FileLocation *objectFile = GetObjectFilename ( file, module );
- FileLocation *sourceFile = new FileLocation (
- objectFile->directory,
- objectFile->relative_path,
- ReplaceExtension ( objectFile->name, ".c" ) );
- delete objectFile;
- return sourceFile;
- }
- else if ( ( extension == ".idl" || extension == ".IDL" ) &&
- ( module.type == RpcServer || module.type == RpcClient || module.type == RpcProxy ) )
- {
- const FileLocation *objectFile = GetObjectFilename ( file, module );
- FileLocation *sourceFile = new FileLocation (
- objectFile->directory,
- objectFile->relative_path,
- ReplaceExtension ( objectFile->name, ".c" ) );
- delete objectFile;
- return sourceFile;
- }
- else if ( extension == ".mc" || extension == ".MC" )
- {
- const FileLocation *objectFile = GetObjectFilename ( file, module );
- FileLocation *sourceFile = new FileLocation (
- objectFile->directory,
- objectFile->relative_path,
- ReplaceExtension ( objectFile->name, ".rc" ) );
- delete objectFile;
- return sourceFile;
- }
- else
- return new FileLocation ( *file );
-}
-
string
MingwModuleHandler::GetExtraDependencies (
const FileLocation *file ) const
return true;
if ( module.type == IdlHeader )
return true;
+ if ( module.type == MessageHeader)
+ return true;
return false;
}
}
}
-void
-MingwModuleHandler::GetSourceFilenames ( vector<FileLocation>& list,
- bool includeGeneratedFiles ) const
-{
- size_t i;
-
- const vector<CompilationUnit*>& compilationUnits = module.non_if_data.compilationUnits;
- for ( i = 0; i < compilationUnits.size (); i++ )
- {
- if ( includeGeneratedFiles || !compilationUnits[i]->IsGeneratedFile () )
- {
- const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
- const FileLocation* sourceFileLocation = GetActualSourceFilename ( &compilationName );
- list.push_back ( *sourceFileLocation );
- delete sourceFileLocation;
- }
- }
- // intentionally make a copy so that we can append more work in
- // the middle of processing without having to go recursive
- vector<If*> v = module.non_if_data.ifs;
- for ( i = 0; i < v.size (); i++ )
- {
- size_t j;
- If& rIf = *v[i];
- // check for sub-ifs to add to list
- const vector<If*>& ifs = rIf.data.ifs;
- for ( j = 0; j < ifs.size (); j++ )
- v.push_back ( ifs[j] );
- const vector<CompilationUnit*>& compilationUnits = rIf.data.compilationUnits;
- for ( j = 0; j < compilationUnits.size (); j++ )
- {
- CompilationUnit& compilationUnit = *compilationUnits[j];
- if ( includeGeneratedFiles || !compilationUnit.IsGeneratedFile () )
- {
- const FileLocation& compilationName = compilationUnit.GetFilename ();
- const FileLocation* sourceFileLocation = GetActualSourceFilename ( &compilationName );
- list.push_back ( *sourceFileLocation );
- delete sourceFileLocation;
- }
- }
- }
-}
-
-void
-MingwModuleHandler::GetSourceFilenamesWithoutGeneratedFiles (
- vector<FileLocation>& list ) const
-{
- GetSourceFilenames ( list, false );
-}
-
/* caller needs to delete the returned object */
const FileLocation*
MingwModuleHandler::GetObjectFilename (
size_t i;
bool generateAssignment;
+ generateAssignment = (use_pch && module.pch != NULL ) || data.includes.size () > 0 || data.defines.size () > 0;
if ( generatingCompilerMacro )
- generateAssignment = (use_pch && module.pch != NULL ) || data.includes.size () > 0 || data.defines.size () > 0 || data.compilerFlags.size () > 0;
- else
- generateAssignment = (use_pch && module.pch != NULL ) || data.includes.size () > 0 || data.defines.size () > 0;
+ generateAssignment |= data.compilerFlags.size () > 0;
if ( generateAssignment )
{
fprintf ( fMakefile,
return NULL;
return new FileLocation ( IntermediateDirectory,
module.pch->file->relative_path,
- ReplaceExtension ( module.pch->file->name, "_" + module.name + ".gch" ) );
+ module.pch->file->name + ".gch" );
}
Rule arRule1 ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).a: $($(module_name)_OBJS) | $(INTERMEDIATE)$(SEP)$(source_dir)\n",
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",
+ "\t${gcc} -x assembler-with-cpp -o $@ -D__ASM__ $($(module_name)_CFLAGS) -c $<\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule bootRule ( "$(source): ${$(module_name)_precondition}\n"
"\t-@${rm} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp 2>$(NUL)\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET) $(source)\n"
+Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET) $(source) | $(INTERMEDIATE)$(SEP)$(source_dir)\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 );
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc",
+ "$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
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)\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",
+ "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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",
"\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",
+ "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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",
"\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",
+ "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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",
"\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",
+ "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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",
"\t$(ECHO_WIDL)\n"
"\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"
+Rule gccRule ( "$(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_CC)\n"
- "\t${gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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"
+Rule gccHostRule ( "$(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_CC)\n"
- "\t${host_gcc} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "\t${host_gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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"
+Rule gppRule ( "$(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_CC)\n"
- "\t${gpp} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "\t${gpp} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\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"
+Rule gppHostRule ( "$(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_CC)\n"
- "\t${host_gpp} -c $< -o $@ $($(module_name)_CFLAGS)$(compiler_flags)\n",
+ "\t${host_gpp} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL );
Rule emptyRule ( "", NULL );
const Rule *rule,
const string& extraDependencies )
{
- const FileLocation *generatedSourceFileName = GetActualSourceFilename ( sourceFile );
const FileLocation *pchFilename = GetPrecompiledHeaderFilename ();
string dependencies = extraDependencies;
if ( rpcDependencies.size () > 0 )
dependencies += " " + v2s ( backend, rpcDependencies, 5 );
- rule->Execute ( fMakefile, backend, module, generatedSourceFileName, clean_files, dependencies, flags );
-
- delete generatedSourceFileName;
+ rule->Execute ( fMakefile, backend, module, sourceFile, clean_files, dependencies, flags );
}
string
void
MingwModuleHandler::GenerateRunRsymCode () const
{
+ fprintf ( fMakefile,
+ "ifneq ($(ROS_GENERATE_RSYM),no)\n" );
fprintf ( fMakefile,
"\t$(ECHO_RSYM)\n" );
fprintf ( fMakefile,
"\t$(Q)$(RSYM_TARGET) $@ $@\n\n" );
+ fprintf ( fMakefile,
+ "endif\n" );
}
void
{
const FileLocation *target_file = GetTargetFilename ( module, NULL );
const FileLocation *definitionFilename = GetDefinitionFilename ();
- string linker = module.cplusplus ? "${gpp}" : "${gcc}";
+ string linker = "${ld}";
string objectsMacro = GetObjectsMacro ( module );
string libsMacro = GetLibsMacro ();
string linkerScriptArgument;
if ( module.linkerScript != NULL )
- linkerScriptArgument = ssprintf ( " -Wl,-T,%s", backend->GetFullName ( *module.linkerScript->file ).c_str () );
+ linkerScriptArgument = ssprintf ( " -T %s", backend->GetFullName ( *module.linkerScript->file ).c_str () );
else
linkerScriptArgument = "";
fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
string targetName ( module.output->name );
- if ( !module.IsDLL () )
+ /* HACK: if we have C++ in kernel, link it with some user mode dlls (kernel32 + msvcrt) ... */
+ static const string libsCppKernel = " '$(shell ${TARGET_CC} -print-file-name=libkernel32.a)' '$(shell ${TARGET_CC} -print-file-name=libmsvcrt.a)'";
+
+ if ( !module.HasImportLibrary() )
{
fprintf ( fMakefile,
- "\t%s %s%s -o %s %s %s %s\n",
+ "\t%s %s%s %s %s%s %s %s -o %s\n",
linker.c_str (),
linkerParameters.c_str (),
linkerScriptArgument.c_str (),
- target_macro.c_str (),
objectsMacro.c_str (),
+ module.cplusplus ? "$(PROJECT_LPPFLAGS) " : "",
+ module.cplusplus && (module.type == KernelModeDLL || module.type == KernelModeDriver) ? libsCppKernel.c_str () : "",
libsMacro.c_str (),
- GetLinkerMacro ().c_str () );
+ GetLinkerMacro ().c_str (),
+ target_macro.c_str () );
}
- else if ( module.HasImportLibrary () )
+ else
{
FileLocation temp_exp ( TemporaryDirectory,
"",
module.underscoreSymbols ? " --add-underscore" : "" );
fprintf ( fMakefile,
- "\t%s %s%s %s -o %s %s %s %s\n",
+ "\t%s %s%s %s %s %s%s %s %s -o %s\n",
linker.c_str (),
linkerParameters.c_str (),
linkerScriptArgument.c_str (),
backend->GetFullName ( temp_exp ).c_str (),
- target_macro.c_str (),
objectsMacro.c_str (),
+ module.cplusplus ? "$(PROJECT_LPPFLAGS) " : "",
+ module.cplusplus && (module.type == KernelModeDLL || module.type == KernelModeDriver) ? libsCppKernel.c_str () : "",
libsMacro.c_str (),
- GetLinkerMacro ().c_str () );
+ GetLinkerMacro ().c_str (),
+ target_macro.c_str () );
fprintf ( fMakefile,
"\t$(Q)$(PEFIXUP_TARGET) %s -exports%s\n",
"\t-@${rm} %s 2>$(NUL)\n",
backend->GetFullName ( temp_exp ).c_str () );
}
- else
- {
- /* XXX: need to workaround binutils bug, which exports
- * all functions in a dll if no .def file or an empty
- * one has been provided... */
- /* See bug 1244 */
- //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",
- linker.c_str (),
- linkerParameters.c_str (),
- linkerScriptArgument.c_str (),
- target_macro.c_str (),
- objectsMacro.c_str (),
- libsMacro.c_str (),
- GetLinkerMacro ().c_str () );
- }
GenerateBuildMapCode ();
GenerateBuildNonSymbolStrippedCode ();
if ( rpcDependencies.size () > 0 )
dependencies += " " + v2s ( backend, rpcDependencies, 5 );
fprintf ( fMakefile,
- "%s: %s ${%s_precondition} | %s\n",
+ "%s: %s | %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,
dependencies.push_back ( "$(DXSDK_TARGET) $(dxsdk_HEADERS)" );
}
- /* Check if any dependent library relies on the generated headers */
- for ( size_t i = 0; i < module.project.modules.size (); i++ )
+ if (module.name != "errcodes" &&
+ module.name != "bugcodes" &&
+ module.name != "ntstatus")
{
- const Module& m = *module.project.modules[i];
- for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ )
- {
- CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j];
- const FileLocation& sourceFile = compilationUnit.GetFilename ();
- string extension = GetExtension ( sourceFile );
- if (extension == ".mc" || extension == ".MC" )
- {
- string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () );
- dependencies.push_back ( dependency );
- }
- }
+ dependencies.push_back ( "$(ERRCODES_TARGET) $(ERRCODES_MCHEADERS)" );
+ dependencies.push_back ( "$(BUGCODES_TARGET) $(BUGCODES_MCHEADERS)" );
+ dependencies.push_back ( "$(NTSTATUS_TARGET) $(NTSTATUS_MCHEADERS)" );
}
+
+ ///* 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];
+ // for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ )
+ // {
+ // CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j];
+ // const FileLocation& sourceFile = compilationUnit.GetFilename ();
+ // string extension = GetExtension ( sourceFile );
+ // if (extension == ".mc" || extension == ".MC" )
+ // {
+ // string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () );
+ // dependencies.push_back ( dependency );
+ // }
+ // }
+ //}
}
void
MingwModuleHandler::GeneratePreconditionDependencies ()
{
string preconditionDependenciesName = GetPreconditionDependenciesName ();
- vector<FileLocation> sourceFilenames;
- GetSourceFilenamesWithoutGeneratedFiles ( sourceFilenames );
string_list dependencies;
GetDefaultDependencies ( dependencies );
GetModuleDependencies ( dependencies );
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s",
+ string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s",
module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (),
module.baseaddress.c_str () );
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -shared",
+ string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -shared",
+ string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -shared",
+ string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib",
+ string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
&& module.type != Win32OCX
&& module.type != Win32CUI
&& module.type != Win32GUI
- && module.type != Win32SCR )
+ && module.type != Win32SCR)
{
// no implicit libraries
return;
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -shared",
+ string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -shared",
+ string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
+ string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
+ string linkerParameters = ssprintf ( "-subsystem=windows -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
vSourceFiles.push_back ( srcunattend );
// bootsector
- const Module* bootModule;
- bootModule = module.project.LocateModule ( module.type == IsoRegTest
- ? "isobtrt"
- : "isoboot" );
+ const Module* bootModule = module.bootSector->bootSectorModule;
+
+ if (!bootModule)
+ {
+ throw InvalidOperationException ( module.node.location.c_str(),
+ 0,
+ "Invalid bootsector. module '%s' requires <bootsector>",
+ module.name.c_str ());
+ }
+
const FileLocation *isoboot = bootModule->output;
vSourceFiles.push_back ( *isoboot );
vSourceFiles.push_back ( reactosDff );
- string IsoName;
-
- if (module.type == IsoRegTest)
- IsoName = "ReactOS-RegTest.iso";
- else
- IsoName = "ReactOS.iso";
-
+ /*
+ We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule.
+ Iso/LiveIso outputs are generated in code base root
+ */
+ string IsoName = module.output->name;
string sourceFiles = v2s ( backend, vSourceFiles, 5 );
string IsoName;
- const Module* bootModule;
- bootModule = module.project.LocateModule ( module.name == "livecdregtest"
- ? "isobtrt"
- : "isoboot" );
+ // bootsector
+ const Module* bootModule = module.bootSector->bootSectorModule;
+
+ if (!bootModule)
+ {
+ throw InvalidOperationException ( module.node.location.c_str(),
+ 0,
+ "Invalid bootsector. module '%s' requires <bootsector>",
+ module.name.c_str ());
+ }
+
const FileLocation *isoboot = bootModule->output;
- if (module.name == "livecdregtest")
- IsoName = "ReactOS-LiveCD-RegTest.iso";
- else
- IsoName = "ReactOS-LiveCD.iso";
+
+ /*
+ We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule.
+ Iso/LiveIso outputs are generated in code base root
+ */
+ IsoName = module.output->name;
string reactosDirectory = "reactos";
string livecdReactosNoFixup = livecdDirectory + sSep + reactosDirectory;
string dependencies = linkDepsMacro + " " + objectsMacro;
- string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",
+ string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000",
module.GetEntryPoint(true).c_str (),
module.baseaddress.c_str () );
GenerateLinkerCommand ( dependencies,
{
}
+MingwMessageHeaderModuleHandler::MingwMessageHeaderModuleHandler (
+ const Module& module_ )
+
+ : MingwModuleHandler ( module_ )
+{
+}
+
+void
+MingwMessageHeaderModuleHandler::Process ()
+{
+ GenerateRules ();
+}
+
MingwIdlHeaderModuleHandler::MingwIdlHeaderModuleHandler (
const Module& module_ )