Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 33 additions & 45 deletions src/OneWare.GhdlExtension/GhdlExtensionModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
using Avalonia.Media;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OneWare.Essentials.Models;
using OneWare.Essentials.PackageManager;
using OneWare.Essentials.Services;
Expand All @@ -17,12 +19,10 @@
using OneWare.UniversalFpgaProjectSystem.Models;
using OneWare.UniversalFpgaProjectSystem.Services;
using OneWare.UniversalFpgaProjectSystem.ViewModels;
using Prism.Ioc;
using Prism.Modularity;

namespace OneWare.GhdlExtension;

public class GhdlExtensionModule : IModule
public class GhdlExtensionModule : OneWareModuleBase
{
public static readonly Package GhdlPackage = new()
{
Expand Down Expand Up @@ -255,48 +255,36 @@

IProjectExplorerService? _projectExplorerService;

public void RegisterTypes(IContainerRegistry containerRegistry)
public override void RegisterServices(IServiceCollection containerRegistry)
{
containerRegistry.RegisterSingleton<GhdlService>();
containerRegistry.RegisterSingleton<GhdlToolchainService>();
containerRegistry.AddSingleton<GhdlService>();
containerRegistry.AddSingleton<GhdlToolchainService>();
containerRegistry.AddSingleton<GhdlVhdlToVerilogPreCompileStep>();
}

public void OnInitialized(IContainerProvider containerProvider)
public override void Initialize(IServiceProvider serviceProvider)
{
var windowService = containerProvider.Resolve<IWindowService>();
var projectExplorerService = containerProvider.Resolve<IProjectExplorerService>();
var fpgaService = containerProvider.Resolve<FpgaService>();
var windowService = serviceProvider.Resolve<IWindowService>();
var projectExplorerService = serviceProvider.Resolve<IProjectExplorerService>();
var fpgaService = serviceProvider.Resolve<FpgaService>();
var toolService = serviceProvider.Resolve<IToolService>();



containerProvider.Resolve<IPackageService>().RegisterPackage(GhdlPackage);
serviceProvider.Resolve<IPackageService>().RegisterPackage(GhdlPackage);

containerProvider.Resolve<ISettingsService>().RegisterTitledFilePath("Simulator", "GHDL", GhdlPathSetting,
serviceProvider.Resolve<ISettingsService>().RegisterTitledFilePath("Simulator", "GHDL", GhdlPathSetting,

Check warning on line 276 in src/OneWare.GhdlExtension/GhdlExtensionModule.cs

View workflow job for this annotation

GitHub Actions / build

'ISettingsService.RegisterTitledFilePath(string, string, string, string, string, string, string?, string?, Func<string, bool>?, params FilePickerFileType[])' is obsolete: 'Use RegisterSetting instead'

Check warning on line 276 in src/OneWare.GhdlExtension/GhdlExtensionModule.cs

View workflow job for this annotation

GitHub Actions / build

'ISettingsService.RegisterTitledFilePath(string, string, string, string, string, string, string?, string?, Func<string, bool>?, params FilePickerFileType[])' is obsolete: 'Use RegisterSetting instead'
"GHDL Path", "Path for GHDL executable", "",
null, containerProvider.Resolve<IPaths>().NativeToolsDirectory, File.Exists);
null, serviceProvider.Resolve<IPaths>().NativeToolsDirectory, File.Exists);

var ghdlService = containerProvider.Resolve<GhdlService>();
var ghdlToolchainService = containerProvider.Resolve<GhdlToolchainService>();
var ghdlService = serviceProvider.Resolve<GhdlService>();
var ghdlToolchainService = serviceProvider.Resolve<GhdlToolchainService>();

containerProvider.Resolve<GhdlToolchainService>().SubscribeToSettings();


// containerProvider.Resolve<IWindowService>().RegisterMenuItem("MainWindow_MainMenu/Ghdl",
// new MenuItemViewModel("SimulateGHDL")
// {
// Header = "Simulate project with GHDL",
// Command = ghdlService.SimulateCommand,
// });

// containerProvider.Resolve<IWindowService>()
// .RegisterUiExtension("MainWindow_LeftToolBarExtension", new UiExtension(x => new GhdlMainWindowToolBarExtension()
// {
// DataContext = ghdlService
// }));
serviceProvider.Resolve<GhdlToolchainService>().SubscribeToSettings();

containerProvider.Resolve<FpgaService>().RegisterSimulator<GhdlSimulator>();
serviceProvider.Resolve<FpgaService>().RegisterSimulator<GhdlSimulator>();

containerProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu((x,l) =>
serviceProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu((x,l) =>
{
if (x is [IProjectFile { Extension: ".vhd" or ".vhdl" } file])
{
Expand Down Expand Up @@ -328,7 +316,7 @@
}
});

containerProvider.Resolve<IProjectSettingsService>().AddProjectSetting("GHDL_Libraries", new ListBoxSetting("GHDL libraries", []),
serviceProvider.Resolve<IProjectSettingsService>().AddProjectSetting("GHDL_Libraries", new ListBoxSetting("GHDL libraries", []),

Check warning on line 319 in src/OneWare.GhdlExtension/GhdlExtensionModule.cs

View workflow job for this annotation

GitHub Actions / build

'IProjectSettingsService.AddProjectSetting(string, TitledSetting, Func<IProjectRootWithFile, bool>)' is obsolete: 'Use AddProjectSetting(ProjectSetting projectSetting) instead.'

Check warning on line 319 in src/OneWare.GhdlExtension/GhdlExtensionModule.cs

View workflow job for this annotation

GitHub Actions / build

'IProjectSettingsService.AddProjectSetting(string, TitledSetting, Func<IProjectRootWithFile, bool>)' is obsolete: 'Use AddProjectSetting(ProjectSetting projectSetting) instead.'
file =>
{
if (file is UniversalFpgaProjectRoot root)
Expand All @@ -341,7 +329,7 @@
}
});

containerProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu(((list, models) =>
serviceProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu(((list, models) =>
{
if (list[0] is IProjectFile {Extension: ".vhd" or ".vhdl", Root: UniversalFpgaProjectRoot root } file)
{
Expand Down Expand Up @@ -400,7 +388,7 @@
}
}));

containerProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu(((list, models) =>
serviceProvider.Resolve<IProjectExplorerService>().RegisterConstructContextMenu(((list, models) =>
{
if (list[0] is IProjectFolder { Root: UniversalFpgaProjectRoot root } folder && folder.Children.Any(x => x is IProjectFile file))
{
Expand Down Expand Up @@ -430,30 +418,30 @@
}
} ));

containerProvider.Resolve<FpgaService>().RegisterPreCompileStep<GhdlVhdlToVerilogPreCompileStep>();
serviceProvider.Resolve<FpgaService>().RegisterPreCompileStep<GhdlVhdlToVerilogPreCompileStep>();

_projectExplorerService = containerProvider.Resolve<IProjectExplorerService>();
_projectExplorerService = serviceProvider.Resolve<IProjectExplorerService>();

containerProvider.Resolve<FpgaService>().RegisterToolchain<GhdlYosysToolchain>();
serviceProvider.Resolve<FpgaService>().RegisterToolchain<GhdlYosysToolchain>();



containerProvider.Resolve<IWindowService>().RegisterUiExtension("CompileWindow_TopRightExtension",
new UiExtension(x =>
serviceProvider.Resolve<IWindowService>().RegisterUiExtension("CompileWindow_TopRightExtension",
new OneWareUiExtension(x =>
{
if (x is not UniversalFpgaProjectPinPlannerViewModel cm) return null;
return new GhdlYosysCompileWindowExtensionView
{
DataContext =
containerProvider.Resolve<GhdlYosysCompileWindowExtensionViewModel>((
serviceProvider.Resolve<GhdlYosysCompileWindowExtensionViewModel>((
typeof(UniversalFpgaProjectPinPlannerViewModel), cm))
};
}));


var ghdlPreCompiler = containerProvider.Resolve<GhdlVhdlToVerilogPreCompileStep>();
containerProvider.Resolve<IWindowService>().RegisterUiExtension("UniversalFpgaToolBar_CompileMenuExtension",
new UiExtension(
var ghdlPreCompiler = serviceProvider.Resolve<GhdlVhdlToVerilogPreCompileStep>();
serviceProvider.Resolve<IWindowService>().RegisterUiExtension("UniversalFpgaToolBar_CompileMenuExtension",
new OneWareUiExtension(
x =>
{
if (x is not UniversalFpgaProjectRoot { Toolchain: GhdlYosysToolchain } root) return null;
Expand Down Expand Up @@ -516,7 +504,7 @@

if (selectedFpgaPackage == null)
{
containerProvider.Resolve<ILogger>()
serviceProvider.Resolve<ILogger>()
.Warning("No FPGA Selected. Open Pin Planner first!");
return;
}
Expand Down
4 changes: 2 additions & 2 deletions src/OneWare.GhdlExtension/GhdlSimulator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ public class GhdlSimulator : IFpgaSimulator
private readonly GhdlService _ghdlService;
public string Name => "GHDL";

public UiExtension? TestBenchToolbarTopUiExtension { get; }
public OneWareUiExtension? TestBenchToolbarTopUiExtension { get; }

public GhdlSimulator(GhdlService ghdlService)
{
_ghdlService = ghdlService;

TestBenchToolbarTopUiExtension = new UiExtension(x =>
TestBenchToolbarTopUiExtension = new OneWareUiExtension(x =>
{
if (x is TestBenchContext tb)
{
Expand Down
3 changes: 2 additions & 1 deletion src/OneWare.GhdlExtension/GhdlVhdlToVerilogPreCompileStep.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using OneWare.Essentials.Services;
using Microsoft.Extensions.Logging;
using OneWare.Essentials.Services;
using OneWare.GhdlExtension.Services;
using OneWare.UniversalFpgaProjectSystem.Models;
using OneWare.UniversalFpgaProjectSystem.Services;
Expand Down
30 changes: 5 additions & 25 deletions src/OneWare.GhdlExtension/GhdlYosysToolchain.cs
Original file line number Diff line number Diff line change
@@ -1,37 +1,17 @@
using OneWare.Essentials.Services;
using OneWare.GhdlExtension;
using OneWare.GhdlExtension.Services;
using OneWare.GhdlExtension.Services;
using OneWare.UniversalFpgaProjectSystem.Models;
using OneWare.UniversalFpgaProjectSystem.Services;
using OneWare.OssCadSuiteIntegration.Yosys;
using Prism.Ioc;
using SkiaSharp;


namespace OneWare.GhdlExtension;


public class GhdlYosysToolchain(GhdlToolchainService ghdlToolchainService, YosysToolchain yosysToolchain) : IFpgaToolchain
public class GhdlYosysToolchain(GhdlToolchainService ghdlToolchainService, YosysService yosysService) : YosysToolchain(yosysService)
{

public void OnProjectCreated(UniversalFpgaProjectRoot project)
{
yosysToolchain.OnProjectCreated(project);
}

public void LoadConnections(UniversalFpgaProjectRoot project, FpgaModel fpga)
{
yosysToolchain.LoadConnections(project, fpga);
}

public void SaveConnections(UniversalFpgaProjectRoot project, FpgaModel fpga)
{
yosysToolchain.SaveConnections(project, fpga);
}

public async Task<bool> CompileAsync(UniversalFpgaProjectRoot project, FpgaModel fpga)
public override async Task<bool> CompileAsync(UniversalFpgaProjectRoot project, FpgaModel fpga)
{
return await ghdlToolchainService.CompileAsync(project, fpga);
}

public string Name => "GHDL_Yosys";
public override string Name => "GHDL_Yosys";
}
6 changes: 3 additions & 3 deletions src/OneWare.GhdlExtension/OneWare.GhdlExtension.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="OneWare.Essentials" Version="0.11.11" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.UniversalFpgaProjectSystem" Version="0.41.11" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.OssCadSuiteIntegration" Version="0.41.11" Private="true" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.Essentials" Version="0.99.3.0" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.UniversalFpgaProjectSystem" Version="0.99.3.0" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.OssCadSuiteIntegration" Version="0.99.3.0" Private="true" ExcludeAssets="runtime;Native" />
</ItemGroup>

<Target Name="GenerateCompatibilityFile" AfterTargets="Build">
Expand Down
6 changes: 4 additions & 2 deletions src/OneWare.GhdlExtension/Services/GhdlService.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Text;
using CommunityToolkit.Mvvm.Input;
using DynamicData.Binding;
using Microsoft.Extensions.Logging;
using OneWare.Essentials.Enums;
using OneWare.Essentials.Models;
using OneWare.Essentials.Services;
Expand All @@ -14,7 +15,7 @@ namespace OneWare.GhdlExtension.Services;
public class GhdlService
{
private readonly ILogger _logger;
private readonly IDockService _dockService;
private readonly IMainDockService _dockService;
private readonly IPackageService _packageService;
private readonly IChildProcessService _childProcessService;
private readonly IEnvironmentService _environmentService;
Expand All @@ -30,7 +31,8 @@ public class GhdlService

private string _path = string.Empty;

public GhdlService(ILogger logger, IDockService dockService, ISettingsService settingsService, IPackageService packageService, IChildProcessService childProcessService, IEnvironmentService environmentService,
public GhdlService(ILogger logger, IMainDockService dockService, ISettingsService settingsService,
IPackageService packageService, IChildProcessService childProcessService, IEnvironmentService environmentService,
IOutputService outputService, IProjectExplorerService projectExplorerService)
{
_logger = logger;
Expand Down
4 changes: 2 additions & 2 deletions src/OneWare.GhdlExtension/Services/GhdlToolchainService.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using OneWare.Essentials.Services;
using Microsoft.Extensions.Logging;
using OneWare.Essentials.Services;
using OneWare.OssCadSuiteIntegration.Yosys;
using OneWare.UniversalFpgaProjectSystem.Models;
using Prism.Ioc;

namespace OneWare.GhdlExtension.Services;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
using DynamicData.Binding;
using Microsoft.Extensions.Logging;
using OneWare.Essentials.Services;
using OneWare.OssCadSuiteIntegration.ViewModels;
using OneWare.OssCadSuiteIntegration.Views;
using OneWare.UniversalFpgaProjectSystem.Models;
using OneWare.UniversalFpgaProjectSystem.Services;
using OneWare.UniversalFpgaProjectSystem.ViewModels;
using Prism.Ioc;

namespace OneWare.GhdlExtension.ViewModels;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
<Image Source="{DynamicResource BoxIcons.RegularMenu}" Width="14" />
</Button>

<StackPanel DockPanel.Dock="Left" Classes="HToolBar" ClipToBounds="True">
<StackPanel DockPanel.Dock="Left" Classes="ToolBar" ClipToBounds="True">
<TextBlock VerticalAlignment="Center" Text="VHDL Standard"
ToolTip.Tip="Select the VHDL standard expected by GHDL" />
<Border Classes="RoundToolBar">
Expand Down
Loading