From d742309c669f45a0f65746248442d0fa6d2c97a9 Mon Sep 17 00:00:00 2001 From: Sebastian Wittlich Date: Tue, 7 Oct 2025 13:18:54 +0200 Subject: [PATCH 1/5] Set Version to 0.7.2-SNAPSHOT --- src/OneWare.CologneChip/OneWare.CologneChip.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OneWare.CologneChip/OneWare.CologneChip.csproj b/src/OneWare.CologneChip/OneWare.CologneChip.csproj index e02900a..379696d 100644 --- a/src/OneWare.CologneChip/OneWare.CologneChip.csproj +++ b/src/OneWare.CologneChip/OneWare.CologneChip.csproj @@ -1,7 +1,7 @@  - 0.7.1 + 0.7.2-SNAPSHOT net9.0 enable enable From 20e95a9000b27f038b8539df24c75193c0a30e52 Mon Sep 17 00:00:00 2001 From: Sebastian Wittlich Date: Wed, 29 Oct 2025 14:43:04 +0100 Subject: [PATCH 2/5] Add feature #22 --- src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs | 7 +++++-- .../Services/CcNextpnrCompileStrategy.cs | 4 ++-- .../Services/CcProprietaryCompileStrategy.cs | 2 +- .../Services/CologneChipConstantService.cs | 2 ++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs index 9666409..d5bb0c1 100644 --- a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs +++ b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs @@ -90,11 +90,14 @@ public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel f public async Task PrAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) { var start = DateTime.Now; + var properties = FpgaSettingsParser.LoadSettings(project, fpgaModel.Fpga.Name); + var ccDevice = properties.GetValueOrDefault(CologneChipConstantService.DeviceFPGASettingsKey) + ?? CologneChipConstantService.DeviceFPGASettingsDefault; var topHeader = project.TopEntity?.Header ?? throw new Exception("TopEntity not set!"); var (topName, topLang) = SplitTop(topHeader); var ccfFile = CologneChipSettingsHelper.GetConstraintFile(project); - var (exe, args) = BuildPrCommand(topName, topLang, ccfFile); + var (exe, args) = BuildPrCommand(topName, topLang, ccfFile, ccDevice); var success = (await Proc.ExecuteShellAsync(exe, args, $"{project.FullPath}/build", $"Running P_R...", AppState.Loading, true, null, s => @@ -119,7 +122,7 @@ protected abstract IEnumerable BuildYosysArgs( string topName, string topLang, string topHeader, string yosysSynthTool, string? preSynthVerilog); protected abstract (string exe, List args) BuildPrCommand( - string topName, string topLang, string ccfFile); + string topName, string topLang, string ccfFile, string device); protected virtual IEnumerable GetIncludedExtensions(string topLang) => topLang == "v" ? new[] { ".v", ".sv" } : Array.Empty(); diff --git a/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs b/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs index 5c7e97c..7bdbad6 100644 --- a/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs +++ b/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs @@ -42,11 +42,11 @@ protected override IEnumerable BuildYosysArgs( }; } - protected override (string exe, List args) BuildPrCommand(string topName, string topLang, string ccfFile) + protected override (string exe, List args) BuildPrCommand(string topName, string topLang, string ccfFile, string device) { return ("nextpnr-himbaechel", new List { - "--device=CCGM1A1", + $"--device={device}", "--json", $"{topName}.json", "-o", $"ccf=./../{ccfFile}", "-o", $"out={topName}_impl.txt", diff --git a/src/OneWare.CologneChip/Services/CcProprietaryCompileStrategy.cs b/src/OneWare.CologneChip/Services/CcProprietaryCompileStrategy.cs index 8553d22..3d78663 100644 --- a/src/OneWare.CologneChip/Services/CcProprietaryCompileStrategy.cs +++ b/src/OneWare.CologneChip/Services/CcProprietaryCompileStrategy.cs @@ -36,7 +36,7 @@ protected override IEnumerable BuildYosysArgs( }; } - protected override (string exe, List args) BuildPrCommand(string topName, string topLang, string ccfFile) + protected override (string exe, List args) BuildPrCommand(string topName, string topLang, string ccfFile, string device) { return ("p_r", new List { "-i", $"{topName}_synth.v", "-o", topName, $"-ccf ./../{ccfFile} -cCP" }); } diff --git a/src/OneWare.CologneChip/Services/CologneChipConstantService.cs b/src/OneWare.CologneChip/Services/CologneChipConstantService.cs index 5ca66d9..1b4e6f7 100644 --- a/src/OneWare.CologneChip/Services/CologneChipConstantService.cs +++ b/src/OneWare.CologneChip/Services/CologneChipConstantService.cs @@ -24,6 +24,8 @@ private CologneChipConstantService() {} public static string CologneChipDefaultConstraintFile => "project.ccf"; public const string ToolChainSettingsKey = "cologneChipToolchain"; + public const string DeviceFPGASettingsKey = "cologneChipDevice"; + public const string DeviceFPGASettingsDefault = "CCGM1A1"; public static readonly string[] Toolchains = ["p_r", "nextpnr"]; public static readonly string[] ToolchainsProject = ["p_r", "nextpnr", ProjectOverrideValue]; public const string ToolChainDefault = "nextpnr"; From d47fff1ef18d37db650acd1e6dbcc7b025841b81 Mon Sep 17 00:00:00 2001 From: Sebastian Wittlich Date: Wed, 18 Feb 2026 15:08:12 +0100 Subject: [PATCH 3/5] ows 1.0 --- src/OneWare.CologneChip/CologneChipLoader.cs | 9 ++-- .../CologneChipToolchain.cs | 8 ++-- .../Helpers/CologneChipSettingsHelper.cs | 23 +++++---- .../OneWare.CologneChip.csproj | 8 ++-- .../OneWareCologneChipModule.cs | 34 ++++++------- .../Services/CcCompileStrategyBase.cs | 48 ++++++++++--------- .../Services/CcCustomLogger.cs | 25 ---------- .../Services/CcNextpnrCompileStrategy.cs | 3 +- .../Services/CcUtilsService.cs | 10 ++-- .../Services/CologneChipService.cs | 4 +- ...logneChipLoaderWindowExtensionViewModel.cs | 9 ++-- .../OneWare.CologneChip.UnitTests.csproj | 2 +- 12 files changed, 82 insertions(+), 101 deletions(-) delete mode 100644 src/OneWare.CologneChip/Services/CcCustomLogger.cs diff --git a/src/OneWare.CologneChip/CologneChipLoader.cs b/src/OneWare.CologneChip/CologneChipLoader.cs index 78c00bd..0c7df87 100644 --- a/src/OneWare.CologneChip/CologneChipLoader.cs +++ b/src/OneWare.CologneChip/CologneChipLoader.cs @@ -1,11 +1,10 @@ +using Microsoft.Extensions.Logging; using OneWare.CologneChip.Services; using OneWare.Essentials.Enums; using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Parser; using OneWare.UniversalFpgaProjectSystem.Services; -using Prism.Ioc; -using ILogger = OneWare.Essentials.Services.ILogger; namespace OneWare.CologneChip; @@ -14,6 +13,8 @@ public class CologneChipLoader(IChildProcessService childProcessService, ISettin { public string Name => "CologneChip"; + public string Id => "cologneChip"; + private enum ProgrammerState { JTagFlash, @@ -102,11 +103,11 @@ private ProgrammerState GetProgrammerState(Dictionary properties public async Task DownloadAsync(UniversalFpgaProjectRoot project) { - var top = project.TopEntity?.Header ?? throw new Exception("TopEntity not set!"); + var top = project.TopEntity ?? throw new Exception("TopEntity not set!"); var topName = top.Split(".").First(); var outputDir = project.FullPath; - var fpga = project.GetProjectProperty("Fpga"); + var fpga = project.Properties.GetString("fpga"); var properties = FpgaSettingsParser.LoadSettings(project, fpga!); var useWsl = bool.Parse(properties.GetValueOrDefault(CologneChipConstantService.CologneChipSettingsUseWsl) ?? "false"); diff --git a/src/OneWare.CologneChip/CologneChipToolchain.cs b/src/OneWare.CologneChip/CologneChipToolchain.cs index 6b8831a..d17e697 100644 --- a/src/OneWare.CologneChip/CologneChipToolchain.cs +++ b/src/OneWare.CologneChip/CologneChipToolchain.cs @@ -1,10 +1,10 @@ using System.Text.RegularExpressions; +using Microsoft.Extensions.Logging; using OneWare.CologneChip.Helpers; using OneWare.CologneChip.Services; using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Services; -using Prism.Ioc; namespace OneWare.CologneChip; @@ -12,7 +12,9 @@ namespace OneWare.CologneChip; public class CologneChipToolchain(CologneChipService cologneChipService) : IFpgaToolchain { - public string Name => "CologneChip"; + public string Name => "CologneChip Toolchain"; + + public string Id => "cologneChipToolchain"; private static string Pattern => @"NET\s+""(?[^""]+)""\s+Loc\s+=\s+""(?[^""]+)""(?:\s*\|\s*(?[^;]*))?;"; @@ -22,7 +24,7 @@ public void OnProjectCreated(UniversalFpgaProjectRoot project) var file = Directory.GetParent(project.ProjectFilePath)?.FullName + @"\" + CologneChipSettingsHelper.GetConstraintFile(project); File.WriteAllText(file, CologneChipConstantService.CcfTemplate); - project.ImportFile(file, false); + // project.ImportFile(file, false); } public void LoadConnections(UniversalFpgaProjectRoot project, FpgaModel fpga) diff --git a/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs b/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs index c772094..a1bbb64 100644 --- a/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs +++ b/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs @@ -2,14 +2,13 @@ using System.Text.Json.Nodes; using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml.Styling; using Avalonia.Media; using Avalonia.Styling; using OneWare.CologneChip.Services; using OneWare.Essentials.Models; +using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem; using OneWare.UniversalFpgaProjectSystem.Models; -using Prism.Ioc; namespace OneWare.CologneChip.Helpers; @@ -72,16 +71,22 @@ public static void UpdateProjectOverlay(UniversalFpgaProjectRoot root) var ccfFile = GetConstraintFile(root); - foreach (var projectFile in root.Files) + foreach (var projectFileString in root.GetFiles("*.ccf")) { + var projectFile = root.GetFile(projectFileString)!; + if (icon != null) { + /* + TODO: Fix Iconoverlays!! + projectFile.IconOverlays.Remove(icon); if (projectFile.RelativePath == ccfFile) { projectFile.IconOverlays.Add(icon); } + */ } } } @@ -92,17 +97,17 @@ public static Task UpdateProjectProperties(IProjectFile file) return Task.CompletedTask; var path = GetConstraintFile(universalFpgaProjectRoot); - - // var icon = Application.Current!.FindResource(ThemeVariant.Dark, "VsImageLib.Test") as IImage; - - foreach (var projectFile in file.Root.Files) + + + /* + foreach (var projectFile in file.Root.GetFiles("*.ccf")) { if (icon != null) projectFile.IconOverlays.Remove(icon); } - + if (icon != null && !file.IconOverlays.Contains(icon)) file.IconOverlays.Add(icon); - + */ if (file.RelativePath == path) return Task.CompletedTask; diff --git a/src/OneWare.CologneChip/OneWare.CologneChip.csproj b/src/OneWare.CologneChip/OneWare.CologneChip.csproj index 379696d..4624ac7 100644 --- a/src/OneWare.CologneChip/OneWare.CologneChip.csproj +++ b/src/OneWare.CologneChip/OneWare.CologneChip.csproj @@ -2,7 +2,7 @@ 0.7.2-SNAPSHOT - net9.0 + net10.0 enable enable true @@ -15,9 +15,9 @@ - - - + + + diff --git a/src/OneWare.CologneChip/OneWareCologneChipModule.cs b/src/OneWare.CologneChip/OneWareCologneChipModule.cs index fa1c8ab..fabb113 100644 --- a/src/OneWare.CologneChip/OneWareCologneChipModule.cs +++ b/src/OneWare.CologneChip/OneWareCologneChipModule.cs @@ -3,6 +3,8 @@ using Avalonia.Layout; using Avalonia.Markup.Xaml.Styling; using CommunityToolkit.Mvvm.Input; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using OneWare.CologneChip.Helpers; using OneWare.CologneChip.Services; using OneWare.CologneChip.ViewModels; @@ -12,26 +14,24 @@ using OneWare.Essentials.Services; using OneWare.Essentials.ViewModels; using OneWare.UniversalFpgaProjectSystem.Models; -using Prism.Ioc; -using Prism.Modularity; using OneWare.UniversalFpgaProjectSystem.Services; namespace OneWare.CologneChip; -public class OneWareCologneChipModule : IModule +public class OneWareCologneChipModule : OneWareModuleBase { - public void RegisterTypes(IContainerRegistry containerRegistry) + public override void RegisterServices(IServiceCollection containerRegistry) { - containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); + containerRegistry.AddSingleton(); + containerRegistry.AddSingleton(); + containerRegistry.AddSingleton(); + containerRegistry.AddSingleton(); + containerRegistry.AddSingleton(); - containerRegistry.RegisterSingleton(); + // containerRegistry.AddSingleton(); } - public void OnInitialized(IContainerProvider containerProvider) + public override void Initialize(IServiceProvider containerProvider) { var settingsService = containerProvider.Resolve(); var projectExplorerService = containerProvider.Resolve(); @@ -53,7 +53,7 @@ public void OnInitialized(IContainerProvider containerProvider) if (ccf.Root is UniversalFpgaProjectRoot universalFpgaProjectRoot) { if (CologneChipSettingsHelper.GetConstraintFile(universalFpgaProjectRoot) == ccf.RelativePath) { - l.Add(new MenuItemViewModel("ccf") + l.Add(new MenuItemModel("ccf") { Header = "Unset as Projects Constraint File", Command = new AsyncRelayCommand(() => CologneChipSettingsHelper.UpdateProjectProperties(ccf)), @@ -61,18 +61,17 @@ public void OnInitialized(IContainerProvider containerProvider) } else { - l.Add(new MenuItemViewModel("ccf") + l.Add(new MenuItemModel("ccf") { Header = "Set as Projects Constraint File", Command = new AsyncRelayCommand(() => CologneChipSettingsHelper.UpdateProjectProperties(ccf)), - }); } } } }); - containerProvider.Resolve().RegisterUiExtension("UniversalFpgaToolBar_DownloaderConfigurationExtension", new UiExtension(x => + containerProvider.Resolve().RegisterUiExtension("UniversalFpgaToolBar_DownloaderConfigurationExtension", new OneWareUiExtension(x => { if (x is not UniversalFpgaProjectRoot cm) return null; return new CologneChipLoaderWindowExtensionView() @@ -84,6 +83,7 @@ public void OnInitialized(IContainerProvider containerProvider) containerProvider.Resolve().RegisterToolchain(); containerProvider.Resolve().RegisterLoader(); + containerProvider.Resolve().Projects.CollectionChanged += CologneChipSettingsHelper.OnCollectionChanged; containerProvider.Resolve().RegisterPackage(CologneChipConstantService.CologneChipPackage); @@ -154,10 +154,10 @@ public void OnInitialized(IContainerProvider containerProvider) containerProvider.Resolve().RegisterUiExtension("UniversalFpgaToolBar_CompileMenuExtension", - new UiExtension( + new OneWareUiExtension( x => { - if (x is not UniversalFpgaProjectRoot { Toolchain: CologneChipToolchain } root) return null; + if (x is not UniversalFpgaProjectRoot { Toolchain: "cologneChip" } root) return null; var name = root.Properties["Fpga"]?.ToString(); var fpgaPackage = fpgaService.FpgaPackages.FirstOrDefault(obj => obj.Name == name); diff --git a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs index d5bb0c1..0d95ea3 100644 --- a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs +++ b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs @@ -1,4 +1,5 @@ using Avalonia.Styling; +using Microsoft.Extensions.Logging; using OneWare.Essentials.Models; using OneWare.GhdlExtension.Services; @@ -11,11 +12,10 @@ namespace OneWare.CologneChip.Services; using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Parser; -using Prism.Ioc; public abstract class CcCompileStrategyBase : ICologneChipCompileStrategy { - protected readonly IDockService Dock; + protected readonly IMainDockService Dock; protected readonly IChildProcessService Proc; protected readonly ILogger Log; protected readonly IOutputService Out; @@ -23,7 +23,7 @@ public abstract class CcCompileStrategyBase : ICologneChipCompileStrategy protected CcCompileStrategyBase() { - Dock = ContainerLocator.Container.Resolve(); + Dock = ContainerLocator.Container.Resolve(); Proc = ContainerLocator.Container.Resolve(); Log = ContainerLocator.Container.Resolve(); Out = ContainerLocator.Container.Resolve(); @@ -35,7 +35,7 @@ public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel f try { var properties = FpgaSettingsParser.LoadSettings(project, fpgaModel.Fpga.Name); - var topHeader = project.TopEntity?.Header ?? throw new Exception("TopEntity not set!"); + var topHeader = project.TopEntity ?? throw new Exception("TopEntity not set!"); var (topName, topLang) = SplitTop(topHeader); var buildDir = Path.Combine(project.FullPath, "build"); @@ -50,12 +50,17 @@ public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel f preSynthVerilog = await PreSynthesizeVhdlToVerilogAsync(project, topName, topHeader); if (preSynthVerilog is null) return false; } - + + /* var included = project.Files .Where(f => GetIncludedExtensions(topLang).Contains(f.Extension)) .Where(f => !project.CompileExcluded.Contains(f)) .Where(f => !project.TestBenches.Contains(f)) - .Select(f => $"./../{f.RelativePath}"); + .Select(f => $"./../{f.RelativePath}"); */ + + var included = project.GetFiles("*.v").Concat(project.GetFiles("*.sv")) + .Where(x => !project.IsCompileExcluded(x)) + .Where(x => !project.IsTestBench(x)); var yosysFlags = (properties.GetValueOrDefault("yosysToolchainYosysFlags") ?? string.Empty) .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); @@ -93,7 +98,7 @@ public async Task PrAsync(UniversalFpgaProjectRoot project, FpgaModel fpga var properties = FpgaSettingsParser.LoadSettings(project, fpgaModel.Fpga.Name); var ccDevice = properties.GetValueOrDefault(CologneChipConstantService.DeviceFPGASettingsKey) ?? CologneChipConstantService.DeviceFPGASettingsDefault; - var topHeader = project.TopEntity?.Header ?? throw new Exception("TopEntity not set!"); + var topHeader = project.TopEntity ?? throw new Exception("TopEntity not set!"); var (topName, topLang) = SplitTop(topHeader); var ccfFile = CologneChipSettingsHelper.GetConstraintFile(project); @@ -195,28 +200,25 @@ protected bool MaybeIgnoreSynthExitCode(bool success) protected async Task PreSynthesizeVhdlToVerilogAsync( UniversalFpgaProjectRoot project, string topName, string topHeader) { - var buildDir = Path.Combine(project.FullPath, "build"); - - var vhdlFiles = project.Files - .Where(f => GetVhdlExtensions().Contains(f.Extension)) - .Where(f => !project.CompileExcluded.Contains(f)) - .Where(f => !project.TestBenches.Contains(f)) - .Select(f => $"./../{f.RelativePath}") - .ToList(); + // var buildDir = Path.Combine(project.FullPath, "build"); + + var included = project.GetFiles("*.v").Concat(project.GetFiles("*.sv")) + .Where(x => !project.IsCompileExcluded(x)) + .Where(x => !project.IsTestBench(x)); - if (vhdlFiles.Count == 0) + if (!included.Any()) { Log.Error("No VHDL sources found for external GHDL synthesis."); return null; } + + if (project.TopEntity == null) + throw new Exception($"Could not find matching operation for object type: {project.GetType().Name}"); - if (project.TopEntity is IProjectFile projectFile) - { - await ContainerLocator.Container.Resolve().SynthAsync(projectFile,"verilog", "build" ); - return $"{topName}.v"; - } - - throw new Exception($"Could not find matching operation for object type: {project.GetType().Name}"); + await ContainerLocator.Container.Resolve() + .SynthAsync(Path.Combine(project.FullPath, project.TopEntity), "verilog", "build"); + return $"{topName}.v"; + } protected virtual IEnumerable GetVhdlExtensions() => new[] { ".vhd", ".vhdl" }; diff --git a/src/OneWare.CologneChip/Services/CcCustomLogger.cs b/src/OneWare.CologneChip/Services/CcCustomLogger.cs deleted file mode 100644 index b8f393d..0000000 --- a/src/OneWare.CologneChip/Services/CcCustomLogger.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Media; -using OneWare.Essentials.Services; -namespace OneWare.CologneChip.Services; - -public class CcCustomLogger(ILogger logger) : ICcCustomLogger -{ - private const ConsoleColor LogMessageConsoleColor = ConsoleColor.Cyan; - - private static readonly IBrush LogMessageBrush = - (Application.Current!.GetResourceObservable("ThemeAccentBrush") as IBrush)!; - - private readonly string _assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name!; - - public void Log(string message, bool showOutput = false) - { - logger.Log("[" + _assemblyName + "]: " + message, LogMessageConsoleColor, showOutput, LogMessageBrush); - } - - public void Error(string message, bool showOutput = true) - { - logger.Error("[" + _assemblyName + "]: " + message, null, showOutput); - } -} \ No newline at end of file diff --git a/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs b/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs index 7bdbad6..7816285 100644 --- a/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs +++ b/src/OneWare.CologneChip/Services/CcNextpnrCompileStrategy.cs @@ -5,7 +5,6 @@ using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Parser; -using Prism.Ioc; namespace OneWare.CologneChip.Services; @@ -57,7 +56,7 @@ protected override (string exe, List args) BuildPrCommand(string topName public override async Task PackAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) { var start = DateTime.Now; - var (topName, _) = SplitTop(project.TopEntity?.Header ?? throw new Exception("TopEntity not set!")); + var (topName, _) = SplitTop(project.TopEntity ?? throw new Exception("TopEntity not set!")); var (success, _) = await ExecWithOutput( "gmpack", diff --git a/src/OneWare.CologneChip/Services/CcUtilsService.cs b/src/OneWare.CologneChip/Services/CcUtilsService.cs index 62db2b2..ae9d102 100644 --- a/src/OneWare.CologneChip/Services/CcUtilsService.cs +++ b/src/OneWare.CologneChip/Services/CcUtilsService.cs @@ -25,7 +25,7 @@ public class CcUtilsService(IPackageService packageService, ISettingsService set foreach ((string dependencyId, Version minVersion) in dependencyIDs) { - PackageModel? dependencyModel = packageService.Packages.GetValueOrDefault(dependencyId); + IPackageState? dependencyModel = packageService.Packages.GetValueOrDefault(dependencyId); Package? dependencyPackage = dependencyModel?.Package; if (dependencyPackage == null) @@ -54,11 +54,7 @@ public class CcUtilsService(IPackageService packageService, ISettingsService set // If the version is not compatible or the download fails, try the previous version foreach (PackageVersion packageVersion in dependencyPackage.Versions!.Reverse()) { - // Skip incompatible versions - if (!(await dependencyModel!.CheckCompatibilityAsync(packageVersion)).IsCompatible) - { - continue; - } + PackageVersion? installedVersion = dependencyModel.InstalledVersion; @@ -73,7 +69,7 @@ public class CcUtilsService(IPackageService packageService, ISettingsService set break; } - localSuccess = await dependencyModel.DownloadAsync(packageVersion); + // localSuccess = await dependencyModel.DownloadAsync(packageVersion); // Stop trying, if install has been successful if (localSuccess) diff --git a/src/OneWare.CologneChip/Services/CologneChipService.cs b/src/OneWare.CologneChip/Services/CologneChipService.cs index 27414b6..6b0b837 100644 --- a/src/OneWare.CologneChip/Services/CologneChipService.cs +++ b/src/OneWare.CologneChip/Services/CologneChipService.cs @@ -1,9 +1,9 @@ using Avalonia.Media; +using Microsoft.Extensions.Logging; using OneWare.CologneChip.Helpers; using OneWare.Essentials.Models; using OneWare.Essentials.Services; using OneWare.UniversalFpgaProjectSystem.Models; -using Prism.Ioc; namespace OneWare.CologneChip.Services; @@ -11,7 +11,7 @@ public class CologneChipService( IChildProcessService childProcessService, ILogger logger, IOutputService outputService, - IDockService dockService, + IMainDockService dockService, ISettingsService settingsService) { public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) diff --git a/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs b/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs index 15d3162..0306ccb 100644 --- a/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs +++ b/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs @@ -1,12 +1,12 @@ using Avalonia.Controls; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; +using Microsoft.Extensions.Logging; using OneWare.Essentials.Services; using OneWare.CologneChip.Views; using OneWare.UniversalFpgaProjectSystem.Fpga; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Services; -using Prism.Ioc; namespace OneWare.CologneChip.ViewModels; @@ -25,9 +25,10 @@ public CologneChipLoaderWindowExtensionViewModel(UniversalFpgaProjectRoot projec _windowService = windowService; _projectRoot = projectRoot; - _fpga = fpgaService.FpgaPackages.FirstOrDefault(x => x.Name == projectRoot.GetProjectProperty("Fpga"))?.LoadFpga(); - - IsVisible = projectRoot.Loader is CologneChipLoader; + _fpga = fpgaService.FpgaPackages.FirstOrDefault(x => x.Name == projectRoot.Properties.GetString("Fpga"))?.LoadFpga(); + + // TODO: Prüfen ob das so richtig ist + IsVisible = projectRoot.Loader is "cologneChip"; IsEnabled = _fpga != null; } diff --git a/tests/OneWare.CologneChip.UnitTests/OneWare.CologneChip.UnitTests.csproj b/tests/OneWare.CologneChip.UnitTests/OneWare.CologneChip.UnitTests.csproj index 3a16a2f..4a49bfe 100644 --- a/tests/OneWare.CologneChip.UnitTests/OneWare.CologneChip.UnitTests.csproj +++ b/tests/OneWare.CologneChip.UnitTests/OneWare.CologneChip.UnitTests.csproj @@ -1,7 +1,7 @@  - net9.0 + net10.0 Library False True From d566d312663441f243c860b0f94f98a11dd8af13 Mon Sep 17 00:00:00 2001 From: Sebastian Wittlich Date: Wed, 18 Feb 2026 16:52:01 +0100 Subject: [PATCH 4/5] Working Toolchain --- src/OneWare.CologneChip/CologneChipLoader.cs | 12 ++--- .../Helpers/CologneChipSettingsHelper.cs | 7 +-- .../OneWareCologneChipModule.cs | 54 ++++++++++--------- .../Services/CcCompileStrategyBase.cs | 4 +- .../Services/CcUtilsService.cs | 6 +-- .../Services/CologneChipConstantService.cs | 12 ++--- .../Services/CologneChipService.cs | 10 ++-- ...logneChipLoaderWindowExtensionViewModel.cs | 3 +- 8 files changed, 52 insertions(+), 56 deletions(-) diff --git a/src/OneWare.CologneChip/CologneChipLoader.cs b/src/OneWare.CologneChip/CologneChipLoader.cs index 0c7df87..d58c833 100644 --- a/src/OneWare.CologneChip/CologneChipLoader.cs +++ b/src/OneWare.CologneChip/CologneChipLoader.cs @@ -11,9 +11,9 @@ namespace OneWare.CologneChip; public class CologneChipLoader(IChildProcessService childProcessService, ISettingsService settingsService, ILogger logger) : IFpgaLoader { - public string Name => "CologneChip"; + public string Name => "CologneChip Loader"; - public string Id => "cologneChip"; + public string Id => "cologneChipLoader"; private enum ProgrammerState { @@ -118,10 +118,10 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project) switch (toolchain) { case "p_r": - bitStreamPath = $"{CologneChipConstantService.Instance.GetBuildPath(project.RelativePath)}{topName}_00.cfg.bit"; + bitStreamPath = $"{CologneChipConstantService.GetInstance.GetBuildPath(project.RelativePath)}{topName}_00.cfg.bit"; break; case "nextpnr": - bitStreamPath = $"{CologneChipConstantService.Instance.GetBuildPath(project.RelativePath)}{topName}.bit"; + bitStreamPath = $"{CologneChipConstantService.GetInstance.GetBuildPath(project.RelativePath)}{topName}.bit"; break; } @@ -167,7 +167,7 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project) if (!useWsl) { // C:\Users\sebas\OneWareStudio\Packages\NativeTools\colognechip\cc-toolchain-win - var execPath = ResolveOpenFPGALoaderPath(project); + var execPath = ResolveOpenFpgaLoaderPath(project); await childProcessService.ExecuteShellAsync(execPath, fpgaArgs, outputDir, "Running OpenFPGALoader (Short-Term)...", AppState.Loading, true); @@ -182,7 +182,7 @@ await childProcessService.ExecuteShellAsync("wsl", args, } } - protected virtual string ResolveOpenFPGALoaderPath(UniversalFpgaProjectRoot project) + protected virtual string ResolveOpenFpgaLoaderPath(UniversalFpgaProjectRoot project) { var src = ContainerLocator.Container.Resolve() .GetSetting(CologneChipConstantService.YosysSourceSettingsKey, project); diff --git a/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs b/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs index a1bbb64..dda06e7 100644 --- a/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs +++ b/src/OneWare.CologneChip/Helpers/CologneChipSettingsHelper.cs @@ -74,20 +74,17 @@ public static void UpdateProjectOverlay(UniversalFpgaProjectRoot root) foreach (var projectFileString in root.GetFiles("*.ccf")) { var projectFile = root.GetFile(projectFileString)!; - + /* if (icon != null) { - /* - TODO: Fix Iconoverlays!! - projectFile.IconOverlays.Remove(icon); if (projectFile.RelativePath == ccfFile) { projectFile.IconOverlays.Add(icon); } - */ } + */ } } diff --git a/src/OneWare.CologneChip/OneWareCologneChipModule.cs b/src/OneWare.CologneChip/OneWareCologneChipModule.cs index fabb113..080cff5 100644 --- a/src/OneWare.CologneChip/OneWareCologneChipModule.cs +++ b/src/OneWare.CologneChip/OneWareCologneChipModule.cs @@ -12,12 +12,12 @@ using OneWare.Essentials.Helpers; using OneWare.Essentials.Models; using OneWare.Essentials.Services; -using OneWare.Essentials.ViewModels; using OneWare.UniversalFpgaProjectSystem.Models; using OneWare.UniversalFpgaProjectSystem.Services; namespace OneWare.CologneChip; +// ReSharper disable once UnusedType.Global public class OneWareCologneChipModule : OneWareModuleBase { public override void RegisterServices(IServiceCollection containerRegistry) @@ -27,14 +27,11 @@ public override void RegisterServices(IServiceCollection containerRegistry) containerRegistry.AddSingleton(); containerRegistry.AddSingleton(); containerRegistry.AddSingleton(); - - // containerRegistry.AddSingleton(); } public override void Initialize(IServiceProvider containerProvider) { var settingsService = containerProvider.Resolve(); - var projectExplorerService = containerProvider.Resolve(); var cologneChipService = containerProvider.Resolve(); var fpgaService = containerProvider.Resolve(); @@ -71,6 +68,21 @@ public override void Initialize(IServiceProvider containerProvider) } }); + fpgaService.RegisterProjectEntryModification(x => + { + if (x.Root is not UniversalFpgaProjectRoot universalFpgaProjectRoot) return; + + if (x is IProjectFile file && CologneChipSettingsHelper.GetConstraintFile(universalFpgaProjectRoot) == + file.RelativePath) + { + x.Icon?.AddOverlay("CologneChip", "ForkAwesome.Check"); + } + else + { + x.Icon?.RemoveOverlay("CologneChip"); + } + }); + containerProvider.Resolve().RegisterUiExtension("UniversalFpgaToolBar_DownloaderConfigurationExtension", new OneWareUiExtension(x => { if (x is not UniversalFpgaProjectRoot cm) return null; @@ -91,13 +103,13 @@ public override void Initialize(IServiceProvider containerProvider) new FolderPathSetting("CologneChip Toolchain Path", defaultCologneChipPath, null, null, IsCologneChipPathValid)); settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.ToolChainSettingsKey, - new ComboBoxSetting("Place & Route", CologneChipConstantService.ToolChainDefault, CologneChipConstantService.Toolchains)); + new ComboBoxSetting("Place & Route", CologneChipConstantService.ToolChainDefault, CologneChipConstantService.Toolchains.Cast().ToArray())); - settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.OpenFPGALoaderSourceSettingsKey, - new ComboBoxSetting("openFPGALoader Source", CologneChipConstantService.OpenFPGALoaderSourceDefault, CologneChipConstantService.BinarySources)); + settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.OpenFpgaLoaderSourceSettingsKey, + new ComboBoxSetting("openFPGALoader Source", CologneChipConstantService.OpenFpgaLoaderSourceDefault, CologneChipConstantService.BinarySources.Cast().ToArray())); settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.YosysSourceSettingsKey, - new ComboBoxSetting("Yosys Source", CologneChipConstantService.OpenFPGALoaderSourceDefault, CologneChipConstantService.BinarySources)); + new ComboBoxSetting("Yosys Source", CologneChipConstantService.OpenFpgaLoaderSourceDefault, CologneChipConstantService.BinarySources.Cast().ToArray())); settingsService.GetSettingObservable(CologneChipConstantService.CcPathSetting).Subscribe(x => { @@ -109,19 +121,14 @@ public override void Initialize(IServiceProvider containerProvider) return; } - var yosys = Path.Combine(x, "bin/yosys"); - var pr = Path.Combine(x, "bin/p_r"); - var openFpgaLoader = Path.Combine(x, "bin/openFPGALoader"); - - // ContainerLocator.Container.Resolve().SetPath("CC_yosys", yosys); - ContainerLocator.Container.Resolve().SetPath("CC_p_r", pr); - // ContainerLocator.Container.Resolve().SetPath("CC_openFPGALoader", openFpgaLoader); + ContainerLocator.Container.Resolve().SetPath("CC_p_r", Path.Combine(x, "bin/p_r")); + }); var projectSettingsService = containerProvider.Resolve(); projectSettingsService.AddProjectSetting(new ProjectSettingBuilder() .WithSetting(new ComboBoxSetting("Place & Route", CologneChipConstantService.ProjectOverrideValue, - CologneChipConstantService.ToolchainsProject)) + CologneChipConstantService.ToolchainsProject.Cast().ToArray())) .WithCategory("CologneChip") .WithKey(CologneChipConstantService.ToolChainSettingsKey) .Build()); @@ -129,15 +136,15 @@ public override void Initialize(IServiceProvider containerProvider) projectSettingsService.AddProjectSetting(new ProjectSettingBuilder() .WithSetting(new ComboBoxSetting("openFPGALoader Source", CologneChipConstantService.ProjectOverrideValue, - CologneChipConstantService.BinarySourcesProject)) + CologneChipConstantService.BinarySourcesProject.Cast().ToArray())) .WithCategory("CologneChip") - .WithKey(CologneChipConstantService.OpenFPGALoaderSourceSettingsKey) + .WithKey(CologneChipConstantService.OpenFpgaLoaderSourceSettingsKey) .Build()); projectSettingsService.AddProjectSetting(new ProjectSettingBuilder() .WithSetting(new ComboBoxSetting("Yosys Source", CologneChipConstantService.ProjectOverrideValue, - CologneChipConstantService.BinarySourcesProject)) + CologneChipConstantService.BinarySourcesProject.Cast().ToArray())) .WithCategory("CologneChip") .WithKey(CologneChipConstantService.YosysSourceSettingsKey) .Build()); @@ -150,8 +157,6 @@ public override void Initialize(IServiceProvider containerProvider) containerProvider.Resolve().RegisterSetting("Tools", "CologneChip", CologneChipConstantService.AutoDownloadBinariesKey, new CheckBoxSetting("Auto Download Binaries", true)); - - containerProvider.Resolve().RegisterUiExtension("UniversalFpgaToolBar_CompileMenuExtension", new OneWareUiExtension( @@ -173,7 +178,6 @@ public override void Initialize(IServiceProvider containerProvider) Header = "Run Synthesis", Command = new AsyncRelayCommand(async () => { - // await projectExplorerService.SaveOpenFilesForProjectAsync(root); await cologneChipService.SynthAsync(root, new FpgaModel(fpga!)); }, () => fpga != null) }, @@ -182,8 +186,7 @@ public override void Initialize(IServiceProvider containerProvider) Header = "Run Place and Route", Command = new AsyncRelayCommand(async () => { - // await projectExplorerService.SaveOpenFilesForProjectAsync(root); - await cologneChipService.PrAysnc(root, new FpgaModel(fpga!)); + await cologneChipService.PrAsync(root, new FpgaModel(fpga!)); }, () => fpga != null) }, new MenuItem() @@ -191,8 +194,7 @@ public override void Initialize(IServiceProvider containerProvider) Header = "Run Packing", Command = new AsyncRelayCommand(async () => { - // await projectExplorerService.SaveOpenFilesForProjectAsync(root); - await cologneChipService.PackAysnc(root, new FpgaModel(fpga!)); + await cologneChipService.PackAsync(root, new FpgaModel(fpga!)); }, () => fpga != null) }, } diff --git a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs index 0d95ea3..509ca80 100644 --- a/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs +++ b/src/OneWare.CologneChip/Services/CcCompileStrategyBase.cs @@ -96,8 +96,8 @@ public async Task PrAsync(UniversalFpgaProjectRoot project, FpgaModel fpga { var start = DateTime.Now; var properties = FpgaSettingsParser.LoadSettings(project, fpgaModel.Fpga.Name); - var ccDevice = properties.GetValueOrDefault(CologneChipConstantService.DeviceFPGASettingsKey) - ?? CologneChipConstantService.DeviceFPGASettingsDefault; + var ccDevice = properties.GetValueOrDefault(CologneChipConstantService.DeviceFpgaSettingsKey) + ?? CologneChipConstantService.DeviceFpgaSettingsDefault; var topHeader = project.TopEntity ?? throw new Exception("TopEntity not set!"); var (topName, topLang) = SplitTop(topHeader); diff --git a/src/OneWare.CologneChip/Services/CcUtilsService.cs b/src/OneWare.CologneChip/Services/CcUtilsService.cs index ae9d102..f7f673b 100644 --- a/src/OneWare.CologneChip/Services/CcUtilsService.cs +++ b/src/OneWare.CologneChip/Services/CcUtilsService.cs @@ -7,7 +7,7 @@ namespace OneWare.CologneChip.Services; public class CcUtilsService(IPackageService packageService, ISettingsService settingsService, IApplicationStateService applicationStateService, ICcCustomLogger logger) { - private async Task<(bool success, bool needsRestart)> InstallDependenciesAsync() + private Task<(bool success, bool needsRestart)> InstallDependenciesAsync() { ApplicationProcess checkProc = applicationStateService.AddState("Checking dependencies", AppState.Loading); @@ -56,7 +56,7 @@ public class CcUtilsService(IPackageService packageService, ISettingsService set { - PackageVersion? installedVersion = dependencyModel.InstalledVersion; + PackageVersion? installedVersion = dependencyModel?.InstalledVersion; if (installedVersion == packageVersion) { @@ -137,6 +137,6 @@ public class CcUtilsService(IPackageService packageService, ISettingsService set applicationStateService.RemoveState(checkProc); - return (globalSuccess, restartRequired); + return Task.FromResult((globalSuccess, restartRequired)); } } \ No newline at end of file diff --git a/src/OneWare.CologneChip/Services/CologneChipConstantService.cs b/src/OneWare.CologneChip/Services/CologneChipConstantService.cs index 1b4e6f7..403cb49 100644 --- a/src/OneWare.CologneChip/Services/CologneChipConstantService.cs +++ b/src/OneWare.CologneChip/Services/CologneChipConstantService.cs @@ -5,10 +5,10 @@ namespace OneWare.CologneChip.Services; public sealed class CologneChipConstantService { - private static readonly Lazy _instance = new Lazy(() => new CologneChipConstantService()); + private static readonly Lazy Instance = new Lazy(() => new CologneChipConstantService()); private CologneChipConstantService() {} - public static CologneChipConstantService Instance => _instance.Value; + public static CologneChipConstantService GetInstance => Instance.Value; public static string CologneChipShortTermModeKey => "cologneChipProgrammerShortTermMode"; public static string CologneChipLongTermModeKey => "cologneChipProgrammerLongTermMode"; @@ -24,18 +24,18 @@ private CologneChipConstantService() {} public static string CologneChipDefaultConstraintFile => "project.ccf"; public const string ToolChainSettingsKey = "cologneChipToolchain"; - public const string DeviceFPGASettingsKey = "cologneChipDevice"; - public const string DeviceFPGASettingsDefault = "CCGM1A1"; + public const string DeviceFpgaSettingsKey = "cologneChipDevice"; + public const string DeviceFpgaSettingsDefault = "CCGM1A1"; public static readonly string[] Toolchains = ["p_r", "nextpnr"]; public static readonly string[] ToolchainsProject = ["p_r", "nextpnr", ProjectOverrideValue]; public const string ToolChainDefault = "nextpnr"; public const string ProjectOverrideValue = "Global"; - public const string OpenFPGALoaderSourceSettingsKey = "cologneChipOpenFPGALoaderSource"; + public const string OpenFpgaLoaderSourceSettingsKey = "cologneChipOpenFPGALoaderSource"; public const string YosysSourceSettingsKey = "cologneChipYosysSource"; public static readonly string[] BinarySources = ["CologneChip", "OSSCAD Suite"]; public static readonly string[] BinarySourcesProject = ["CologneChip", "OSSCAD Suite", ProjectOverrideValue]; - public const string OpenFPGALoaderSourceDefault = "CologneChip"; + public const string OpenFpgaLoaderSourceDefault = "CologneChip"; public const string CcfTemplate = @"# # ##### Important ##### diff --git a/src/OneWare.CologneChip/Services/CologneChipService.cs b/src/OneWare.CologneChip/Services/CologneChipService.cs index 6b0b837..c30a063 100644 --- a/src/OneWare.CologneChip/Services/CologneChipService.cs +++ b/src/OneWare.CologneChip/Services/CologneChipService.cs @@ -9,9 +9,7 @@ namespace OneWare.CologneChip.Services; public class CologneChipService( IChildProcessService childProcessService, - ILogger logger, IOutputService outputService, - IMainDockService dockService, ISettingsService settingsService) { public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) @@ -27,7 +25,7 @@ public async Task SynthAsync(UniversalFpgaProjectRoot project, FpgaModel f }; } - public async Task PrAysnc(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) + public async Task PrAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) { var toolchain = settingsService.GetSettingValue(CologneChipConstantService.ToolChainSettingsKey); return toolchain switch @@ -40,7 +38,7 @@ public async Task PrAysnc(UniversalFpgaProjectRoot project, FpgaModel fpga }; } - public async Task PackAysnc(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) + public async Task PackAsync(UniversalFpgaProjectRoot project, FpgaModel fpgaModel) { var toolchain = settingsService.GetSettingValue(CologneChipConstantService.ToolChainSettingsKey); return toolchain switch @@ -141,8 +139,8 @@ public async Task CompileAsync(UniversalFpgaProjectRoot project, FpgaModel settingsService.GetSettingValue(CologneChipConstantService.ToolChainSettingsKey)})\n==============="); var success = await SynthAsync(project, fpga); - success &= await PrAysnc(project, fpga); - success &= await PackAysnc(project, fpga); + success &= await PrAsync(project, fpga); + success &= await PackAsync(project, fpga); var endTime = DateTime.Now - start; if (success) diff --git a/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs b/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs index 0306ccb..7aaf0f2 100644 --- a/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs +++ b/src/OneWare.CologneChip/ViewModels/CologneChipLoaderWindowExtensionViewModel.cs @@ -27,8 +27,7 @@ public CologneChipLoaderWindowExtensionViewModel(UniversalFpgaProjectRoot projec _fpga = fpgaService.FpgaPackages.FirstOrDefault(x => x.Name == projectRoot.Properties.GetString("Fpga"))?.LoadFpga(); - // TODO: Prüfen ob das so richtig ist - IsVisible = projectRoot.Loader is "cologneChip"; + IsVisible = projectRoot.Loader is "cologneChipLoader"; IsEnabled = _fpga != null; } From c45011279b094486951f6768ee64c4676e5f73a1 Mon Sep 17 00:00:00 2001 From: Sebastian Wittlich Date: Wed, 18 Feb 2026 16:54:10 +0100 Subject: [PATCH 5/5] Release 1.0.0 --- Release.md | 3 +++ oneware-extension.json | 8 ++++++++ src/OneWare.CologneChip/OneWare.CologneChip.csproj | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Release.md b/Release.md index db62ed1..b87d162 100644 --- a/Release.md +++ b/Release.md @@ -1,5 +1,8 @@ # OneWare.CologneChip +## Release 1.0.0 +- Support OWS 1.x.x + ## Release 0.7.1 - nextpnr support (OSSCAD Suite needed) - Global and project support for changing the toolchain diff --git a/oneware-extension.json b/oneware-extension.json index ec368d9..98db024 100644 --- a/oneware-extension.json +++ b/oneware-extension.json @@ -83,6 +83,14 @@ "target": "all" } ] + }, + { + "version": "1.0.0", + "targets": [ + { + "target": "all" + } + ] } ] } diff --git a/src/OneWare.CologneChip/OneWare.CologneChip.csproj b/src/OneWare.CologneChip/OneWare.CologneChip.csproj index 4624ac7..bd04b90 100644 --- a/src/OneWare.CologneChip/OneWare.CologneChip.csproj +++ b/src/OneWare.CologneChip/OneWare.CologneChip.csproj @@ -1,7 +1,7 @@  - 0.7.2-SNAPSHOT + 1.0.0 net10.0 enable enable