From 159e0bfdbb135e74aac10e54c7a499e9e34aa5a2 Mon Sep 17 00:00:00 2001 From: 1138-4EB <1138-4EB@users.noreply.github.com> Date: Mon, 17 Jun 2019 03:38:27 +0200 Subject: Rework libghdl build/install procedure (#840) * feat(libghdl): add libghdl_pkg.py, add option to generate libghdl-py.tgz with dist/travis/build.sh * libghdl*.so is now part of GHDL * move python sources to python/libghdl and python/pnodes * rename src/vhdl/python to src/vhdl/libghdl * add generation of tarball for libghdl-py to the makefile * deprecate --enable-python and --disable-python * add configuration option --disable-libghdl * feat(python/libghdl): add support for LIBGHDL_PREFIX (#844) * fix(travis): disable libghdl on mac * feat(python/libghdl): add support for GHDL_BIN_PATH and VUNIT_GHDL_PATH --- src/vhdl/libghdl/grt-modules.adb | 41 +++++++++++++++ src/vhdl/libghdl/libghdl.adb | 106 +++++++++++++++++++++++++++++++++++++++ src/vhdl/libghdl/libghdl.ads | 33 ++++++++++++ 3 files changed, 180 insertions(+) create mode 100644 src/vhdl/libghdl/grt-modules.adb create mode 100644 src/vhdl/libghdl/libghdl.adb create mode 100644 src/vhdl/libghdl/libghdl.ads (limited to 'src/vhdl/libghdl') diff --git a/src/vhdl/libghdl/grt-modules.adb b/src/vhdl/libghdl/grt-modules.adb new file mode 100644 index 000000000..7f40b0536 --- /dev/null +++ b/src/vhdl/libghdl/grt-modules.adb @@ -0,0 +1,41 @@ +-- GHDL Run Time (GRT) - Modules. +-- Copyright (C) 2005 - 2014 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GCC; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. +-- +-- As a special exception, if other files instantiate generics from this +-- unit, or you link this unit with other files to produce an executable, +-- this unit does not by itself cause the resulting executable to be +-- covered by the GNU General Public License. This exception does not +-- however invalidate any other reasons why the executable file might be +-- covered by the GNU Public License. +with Grt.Vital_Annotate; +with Grt.Disp_Tree; +with Grt.Disp_Rti; +with Grt.Psl; +with Grt.Backtraces; + +package body Grt.Modules is + procedure Register_Modules is + begin + -- List of modules to be registered. + Grt.Disp_Tree.Register; + Grt.Vital_Annotate.Register; + Grt.Disp_Rti.Register; + Grt.Psl.Register; + Grt.Backtraces.Register; + end Register_Modules; +end Grt.Modules; diff --git a/src/vhdl/libghdl/libghdl.adb b/src/vhdl/libghdl/libghdl.adb new file mode 100644 index 000000000..7226e5295 --- /dev/null +++ b/src/vhdl/libghdl/libghdl.adb @@ -0,0 +1,106 @@ +-- Library interface for the analyzer. +-- Copyright (C) 2017 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GHDL; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. + +with GNAT.OS_Lib; use GNAT.OS_Lib; +with Ghdllocal; +with Ghdlcomp; +with Errorout.Memory; +with Files_Map.Editor; +with Vhdl.Formatters; +pragma Unreferenced (Errorout.Memory); -- At least from Ada code. +pragma Unreferenced (Files_Map.Editor); +pragma Unreferenced (Vhdl.Formatters); + +package body Libghdl is + function Set_Option (Opt : Thin_String_Ptr; Len : Natural) return Integer is + begin + if Ghdllocal.Decode_Driver_Option (Opt (1 .. Len)) then + -- Ok. + return 0; + else + -- Error. + return 1; + end if; + end Set_Option; + + procedure Compile_Init (Analyze_Only : Boolean) is + begin + if Analyze_Only then + return; + end if; + + Ghdllocal.Setup_Libraries (True); + end Compile_Init; + + procedure Compile_Elab + (Cmd_Name : String; Args : Argument_List; Opt_Arg : out Natural) is + begin + null; + end Compile_Elab; + + -- Set options. + procedure Set_Run_Options (Args : Argument_List) is + begin + null; + end Set_Run_Options; + + procedure Run is + begin + null; + end Run; + + function Decode_Option (Option : String) return Boolean + is + pragma Unreferenced (Option); + begin + return False; + end Decode_Option; + + procedure Disp_Long_Help is + begin + null; + end Disp_Long_Help; + + procedure Set_Hooks is + begin + Ghdlcomp.Hooks := (Compile_Init'Access, + Compile_Elab'Access, + Set_Run_Options'Access, + Run'Access, + Decode_Option'Access, + Disp_Long_Help'Access); + end Set_Hooks; + + procedure Analyze_Init is + begin + -- Load libraries... + Compile_Init (False); + end Analyze_Init; + + function Analyze_File (File : Thin_String_Ptr; Len : Natural) return Iir is + begin + return Ghdlcomp.Compile_Analyze_File2 (File (1 .. Len)); + end Analyze_File; + + Gnat_Version : constant String := "unknown compiler version" & ASCII.NUL; + pragma Export (C, Gnat_Version, "__gnat_version"); +begin + -- TODO: set program name. + Ghdllocal.Compile_Init; + Set_Hooks; +end Libghdl; diff --git a/src/vhdl/libghdl/libghdl.ads b/src/vhdl/libghdl/libghdl.ads new file mode 100644 index 000000000..dbc6b260e --- /dev/null +++ b/src/vhdl/libghdl/libghdl.ads @@ -0,0 +1,33 @@ +-- Library interface for the analyzer. +-- Copyright (C) 2017 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GHDL; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. + +with Types; use Types; +with Vhdl.Nodes; use Vhdl.Nodes; + +package Libghdl is + -- To be called before Analyze_Init to set command line options. + -- This decodes a driver option (so handle all analyzer options, and + -- --ieee). Return 0 for success. + function Set_Option (Opt : Thin_String_Ptr; Len : Natural) return Integer; + + -- To be called before Analyze_File to initialize analysis. + procedure Analyze_Init; + + -- Analyze one file. + function Analyze_File (File : Thin_String_Ptr; Len : Natural) return Iir; +end Libghdl; -- cgit v1.2.3