protected override bool ValidateParameters() { _createPDBCommand = CompilationEntry.GetMetadata("CreatePDBCommand"); if (CrossgenTool == null && Crossgen2Tool == null) { return(false); } if (IsPdbCompilation && CrossgenTool == null) { // We need the crossgen tool for now to emit native symbols. Crossgen2 does not yet support this feature return(false); } if (CrossgenTool != null) { if (!File.Exists(CrossgenTool.ItemSpec) || !File.Exists(CrossgenTool.GetMetadata("JitPath"))) { return(false); } } if (Crossgen2Tool != null) { if (!File.Exists(Crossgen2Tool.ItemSpec) || !File.Exists(Crossgen2Tool.GetMetadata("JitPath"))) { return(false); } } if (IsPdbCompilation) { _outputR2RImage = CompilationEntry.ItemSpec; _outputPDBImage = CompilationEntry.GetMetadata("OutputPDBImage"); if (!String.IsNullOrEmpty(DiaSymReader) && !File.Exists(DiaSymReader)) { return(false); } // R2R image has to be created before emitting native symbols (crossgen needs this as an input argument) if (String.IsNullOrEmpty(_outputPDBImage) || !File.Exists(_outputR2RImage)) { return(false); } } else { _inputAssembly = CompilationEntry.ItemSpec; _outputR2RImage = CompilationEntry.GetMetadata("OutputR2RImage"); if (!File.Exists(_inputAssembly)) { return(false); } } return(true); }
protected override bool ValidateParameters() { _crossgenPath = CrossgenTool.ItemSpec; _clrjitPath = CrossgenTool.GetMetadata("JitPath"); _diasymreaderPath = CrossgenTool.GetMetadata("DiaSymReader"); if (!File.Exists(_crossgenPath) || !File.Exists(_clrjitPath)) { return(false); } _createPDBCommand = CompilationEntry.GetMetadata("CreatePDBCommand"); if (IsPdbCompilation) { _outputR2RImage = CompilationEntry.ItemSpec; _outputPDBImage = CompilationEntry.GetMetadata("OutputPDBImage"); if (!String.IsNullOrEmpty(_diasymreaderPath) && !File.Exists(_diasymreaderPath)) { return(false); } // R2R image has to be created before emitting native symbols (crossgen needs this as an input argument) if (String.IsNullOrEmpty(_outputPDBImage) || !File.Exists(_outputR2RImage)) { return(false); } } else { _inputAssembly = CompilationEntry.ItemSpec; _outputR2RImage = CompilationEntry.GetMetadata("OutputR2RImage"); if (!File.Exists(_inputAssembly)) { return(false); } } return(true); }
protected override bool ValidateParameters() { string emitSymbolsMetadata = CompilationEntry.GetMetadata(MetadataKeys.EmitSymbols); _emitSymbols = !string.IsNullOrEmpty(emitSymbolsMetadata) && bool.Parse(emitSymbolsMetadata); _createPDBCommand = CompilationEntry.GetMetadata(MetadataKeys.CreatePDBCommand); string createCompositeImageMetadata = CompilationEntry.GetMetadata(MetadataKeys.CreateCompositeImage); _createCompositeImage = !string.IsNullOrEmpty(createCompositeImageMetadata) && bool.Parse(createCompositeImageMetadata); if (IsPdbCompilation && CrossgenTool == null) { // PDB compilation is a step specific to Crossgen1 and 5.0 Crossgen2 // which didn't support PDB generation. 6.0 Crossgen2 produces symbols // directly during native compilation. Log.LogError(Strings.CrossgenToolMissingInPDBCompilationMode); return(false); } if (ActuallyUseCrossgen2) { if (Crossgen2Tool == null) { Log.LogError(Strings.Crossgen2ToolMissingWhenUseCrossgen2IsSet); return(false); } if (!File.Exists(Crossgen2Tool.ItemSpec)) { Log.LogError(Strings.Crossgen2ToolExecutableNotFound, Crossgen2Tool.ItemSpec); return(false); } string hostPath = DotNetHostPath; if (!string.IsNullOrEmpty(hostPath) && !File.Exists(hostPath)) { Log.LogError(Strings.DotNetHostExecutableNotFound, hostPath); return(false); } string jitPath = Crossgen2Tool.GetMetadata(MetadataKeys.JitPath); if (!string.IsNullOrEmpty(jitPath)) { if (!File.Exists(jitPath)) { Log.LogError(Strings.JitLibraryNotFound, jitPath); return(false); } } else if (Crossgen2IsVersion5) { // We expect JitPath to be set for .NET 5 and {TargetOS, TargetArch} to be set for .NET 6 and later Log.LogError(Strings.Crossgen2MissingRequiredMetadata, MetadataKeys.JitPath); return(false); } else { // For smooth switchover we accept both JitPath and TargetOS / TargetArch in .NET 6 Crossgen2 if (string.IsNullOrEmpty(Crossgen2Tool.GetMetadata(MetadataKeys.TargetOS))) { Log.LogError(Strings.Crossgen2MissingRequiredMetadata, MetadataKeys.TargetOS); return(false); } if (string.IsNullOrEmpty(Crossgen2Tool.GetMetadata(MetadataKeys.TargetArch))) { Log.LogError(Strings.Crossgen2MissingRequiredMetadata, MetadataKeys.TargetArch); return(false); } } } else { if (CrossgenTool == null) { Log.LogError(Strings.CrossgenToolMissingWhenUseCrossgen2IsNotSet); return(false); } if (!File.Exists(CrossgenTool.ItemSpec)) { Log.LogError(Strings.CrossgenToolExecutableNotFound, CrossgenTool.ItemSpec); return(false); } if (!File.Exists(CrossgenTool.GetMetadata(MetadataKeys.JitPath))) { Log.LogError(Strings.JitLibraryNotFound, MetadataKeys.JitPath); return(false); } } _outputPDBImage = CompilationEntry.GetMetadata(MetadataKeys.OutputPDBImage); if (IsPdbCompilation) { _outputR2RImage = CompilationEntry.ItemSpec; if (!string.IsNullOrEmpty(DiaSymReader) && !File.Exists(DiaSymReader)) { Log.LogError(Strings.DiaSymReaderLibraryNotFound, DiaSymReader); return(false); } // R2R image has to be created before emitting native symbols (crossgen needs this as an input argument) if (string.IsNullOrEmpty(_outputPDBImage)) { Log.LogError(Strings.MissingOutputPDBImagePath); } if (!File.Exists(_outputR2RImage)) { Log.LogError(Strings.PDBGeneratorInputExecutableNotFound, _outputR2RImage); return(false); } } else { _outputR2RImage = CompilationEntry.GetMetadata(MetadataKeys.OutputR2RImage); if (!_createCompositeImage) { _inputAssembly = CompilationEntry.ItemSpec; if (!File.Exists(_inputAssembly)) { Log.LogError(Strings.InputAssemblyNotFound, _inputAssembly); return(false); } } else { _inputAssembly = "CompositeImage"; } if (string.IsNullOrEmpty(_outputR2RImage)) { Log.LogError(Strings.MissingOutputR2RImageFileName); return(false); } if (_emitSymbols && string.IsNullOrEmpty(_outputPDBImage)) { Log.LogError(Strings.MissingOutputPDBImagePath); } } return(true); }