aboutsummaryrefslogtreecommitdiffstats
path: root/src/mhdlsim/mhdlsim.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/mhdlsim/mhdlsim.adb')
-rw-r--r--src/mhdlsim/mhdlsim.adb71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mhdlsim/mhdlsim.adb b/src/mhdlsim/mhdlsim.adb
new file mode 100644
index 000000000..ba4a07700
--- /dev/null
+++ b/src/mhdlsim/mhdlsim.adb
@@ -0,0 +1,71 @@
+with Types; use Types;
+with Options;
+with Name_Table;
+with Iirs; use Iirs;
+with Libraries;
+with Errorout;
+with Ghdlcomp;
+with Ghdlsimul;
+
+package body Mhdlsim is
+ -- Top unit to elaborate or simulate. Might not be a VHDL unit.
+ Top_Name : Name_Id;
+ Top_Unit : Iir;
+
+ function Process_Param (Opt : Ghdl_C_String; Len : Natural)
+ return Integer is
+ begin
+ if Len > 3 and then Opt (1 .. 3) = "-e " then
+ -- Unit to elaborate
+ Top_Name := Name_Table.Get_Identifier (Opt (4 .. Len));
+ return 0;
+ elsif Options.Parse_Option (Opt (1 .. Len)) then
+ -- Ok.
+ return 0;
+ else
+ -- Error.
+ return 1;
+ end if;
+ end Process_Param;
+
+ procedure Analyze_Init is
+ begin
+ -- Load libraries...
+ Ghdlcomp.Compile_Analyze_Init (False);
+ end Analyze_Init;
+
+ function Analyze_File (File : Ghdl_C_String; Len : Natural)
+ return Integer is
+ begin
+ Ghdlcomp.Compile_Analyze_File (File (1 .. Len));
+ if Errorout.Nbr_Errors > 0 then
+ return 1;
+ else
+ return 0;
+ end if;
+ end Analyze_File;
+
+ function Known_Top_Unit return Integer
+ is
+ use Libraries;
+ begin
+ Top_Unit := Find_Primary_Unit (Work_Library, Top_Name);
+ return Boolean'Pos (Top_Unit /= Null_Iir);
+ end Known_Top_Unit;
+
+ procedure Elaborate is
+ begin
+ Ghdlcomp.Compile_Elaborate (new String'(Name_Table.Image (Top_Name)));
+ end Elaborate;
+
+ procedure Run is
+ begin
+ Ghdlcomp.Compile_Run;
+ end Run;
+
+ Gnat_Version : constant String := "unknown compiler version" & ASCII.NUL;
+ pragma Export (C, Gnat_Version, "__gnat_version");
+begin
+ -- TODO: set program name.
+ Ghdlsimul.Compile_Init;
+end Mhdlsim;