public void TransfromDirectory(string projectDirectory) { using (var scope = _containerFactory.CreateScope()) { var logStream = scope.Resolve <ILogStream>(); var projectTransformation = scope.Resolve <IQuokkaProjectTransformation>(); var config = QuokkaConfigLoader.Load(projectDirectory); var projectPath = CSharpProject.GetSingleProjectFromFolder(projectDirectory); var projectReferences = CSharpProject.RecursiveCollectProjectReferences(projectPath); var projectFolders = projectReferences.Select(p => Path.GetDirectoryName(p)); var codeFiles = projectFolders.Select(folder => { var allFiles = new List <string>(); CSharpProject.CollectFiles(folder, allFiles); return(allFiles.Select(f => { var content = ""; FileTools.TryReadAllText(f, out content); return new SourceFileSnapshot() { ProjectName = CSharpProject.GetSingleProjectFromFolder(folder), FullPath = f, Content = content }; })); }).SelectMany(s => s); var transformedCode = new SourceCodeSnapshot( projectTransformation.Transform( new TransformationRequest() { Sources = codeFiles.ToList(), Configurations = config.Configurations }).Result.Result); new QuartusProjectTools(logStream).SaveCodeSnapshot( transformedCode, config.Project, config.ProjectLocation, config.Configurations.Select(c => c.Name).ToHashSet()); } }
public void Run() { _logStream.WriteLine(DirectoryLogging.Summary, $"QRV32 translation completed"); _logStream.WriteLine(DirectoryLogging.Summary, $"Source location: {_runtimeConfiguration.SourceLocation}"); _logStream.WriteLine(DirectoryLogging.Summary, $"Config name: {_runtimeConfiguration.ConfigName}"); var config = QuokkaConfigLoader.Load(Path.Combine(_runtimeConfiguration.SourceLocation, _runtimeConfiguration.ConfigName)); var generatedFilesLocation = FileTools.ToAbsolutePath(Path.Combine(_runtimeConfiguration.SourceLocation, config.ProjectLocation)); _logStream.WriteLine(DirectoryLogging.Summary, $"Generated files location: {generatedFilesLocation}"); var hdlLocation = Path.Combine(Path.GetDirectoryName(_runtimeConfiguration.SourceLocation), "QRV32.HDL"); var qsfPath = Path.Combine(hdlLocation, "Verilog.qsf"); _logStream.WriteLine(DirectoryLogging.Summary, $"Updating quartus files: {qsfPath}"); if (File.Exists(qsfPath)) { var generatedFiles = _virtualFS .RecursiveFileNames .Where(f => Path.GetFileNameWithoutExtension(f) != "Quokka") .Select(f => Path.Combine(generatedFilesLocation, f)) .OrderBy(f => f) .ToList(); foreach (var fileName in generatedFiles) { _logStream.WriteLine(DirectoryLogging.Summary, $"Generated file: {fileName}"); } _quartusTools.RemoveGeneratedFiles(qsfPath); _quartusTools.AddFiles(qsfPath, generatedFiles); } else { _logStream.WriteLine(DirectoryLogging.Summary, $"Project not found"); } _logStream.WriteLine(DirectoryLogging.Summary, $"======================================"); }
public void WatchDirectory(string projectDirectory) { var projectPath = CSharpProject.GetSingleProjectFromFolder(projectDirectory); _logStream.WriteLine(eContentDomain.Public, $"Watching {projectPath}"); QuokkaConfigLoader.Validate(projectDirectory); _logStream.WriteLine(eContentDomain.Public, $"Configration validated"); Subject <string> fileSteam = new Subject <string>(); using (var sourceCodeWatcher = new SourceCodeWatcher(_logStream)) { sourceCodeWatcher.SnaphostsStream .Throttle(TimeSpan.FromMilliseconds(500)) .Subscribe(codeSnapshot => { try { using (var scope = _containerFactory.CreateScope()) { var logStream = scope.Resolve <ILogStream>(); var projectTransformation = scope.Resolve <IQuokkaProjectTransformation>(); codeSnapshot.SourceFiles.ForEach(p => logStream.WriteLine(eContentDomain.Public, p.FullPath)); var config = QuokkaConfigLoader.Load(projectDirectory); logStream.WriteLine(eContentDomain.Public, $"{DateTime.Now}, Transforming"); var result = projectTransformation.Transform(new TransformationRequest() { Sources = codeSnapshot.SourceFiles.ToList(), Configurations = config.Configurations }).Result; if (result.Result.Any()) { new QuartusProjectTools(logStream) .SaveCodeSnapshot( new SourceCodeSnapshot(result.Result), config.Project, config.ProjectLocation, config.Configurations.Select(c => c.Name).ToHashSet()); } else { logStream.WriteLine(eContentDomain.Public, $"Transformation failed"); } } } catch (Exception ex) { Exceptions.RethrowSystemException(ex); _logStream.Log(ex); } }); using (var projectWatcher = new CSharpProjectWatcher(_logStream)) { projectWatcher.FoldersStream.Subscribe(s => { s.ForEach(f => _logStream.WriteLine(eContentDomain.Public, f)); sourceCodeWatcher.WatchProjectFolders(s); }); projectWatcher.WatchProject(projectPath); Console.ReadLine(); } } }