From 3fddf1c59fd7a8fcd260bb9e05c611bef3dd141b Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Wed, 5 Nov 2014 05:11:00 +0100 Subject: Move files and dirs from translate/ --- dist/gcc/ANNOUNCE | 21 ++ dist/gcc/INSTALL | 24 ++ dist/gcc/Make-lang.in | 190 +++++++++++ dist/gcc/Makefile.in | 299 ++++++++++++++++ dist/gcc/README | 87 +++++ dist/gcc/config-lang.in | 38 +++ dist/gcc/dist-common.sh | 337 ++++++++++++++++++ dist/gcc/dist.sh | 471 ++++++++++++++++++++++++++ dist/gcc/lang-options.h | 29 ++ dist/gcc/lang-specs.h | 28 ++ dist/mcode/Makefile.in | 54 +++ dist/mcode/README | 47 +++ dist/mcode/dist.sh | 506 ++++++++++++++++++++++++++++ dist/mcode/winbuild.bat | 18 + dist/mcode/windows/compile.bat | 24 ++ dist/mcode/windows/complib.bat | 68 ++++ dist/mcode/windows/default_pathes.ads | 8 + dist/mcode/windows/ghdl.nsi | 455 +++++++++++++++++++++++++ dist/mcode/windows/ghdlfilter.adb | 58 ++++ dist/mcode/windows/ghdlversion.adb | 30 ++ dist/mcode/windows/grt-modules.adb | 37 ++ dist/mcode/windows/ortho_code-x86-flags.ads | 2 + dist/mcode/windows/windows_default_path.adb | 45 +++ dist/mcode/windows/windows_default_path.ads | 5 + 24 files changed, 2881 insertions(+) create mode 100644 dist/gcc/ANNOUNCE create mode 100644 dist/gcc/INSTALL create mode 100644 dist/gcc/Make-lang.in create mode 100644 dist/gcc/Makefile.in create mode 100644 dist/gcc/README create mode 100644 dist/gcc/config-lang.in create mode 100644 dist/gcc/dist-common.sh create mode 100755 dist/gcc/dist.sh create mode 100644 dist/gcc/lang-options.h create mode 100644 dist/gcc/lang-specs.h create mode 100644 dist/mcode/Makefile.in create mode 100644 dist/mcode/README create mode 100755 dist/mcode/dist.sh create mode 100644 dist/mcode/winbuild.bat create mode 100644 dist/mcode/windows/compile.bat create mode 100644 dist/mcode/windows/complib.bat create mode 100644 dist/mcode/windows/default_pathes.ads create mode 100644 dist/mcode/windows/ghdl.nsi create mode 100644 dist/mcode/windows/ghdlfilter.adb create mode 100755 dist/mcode/windows/ghdlversion.adb create mode 100644 dist/mcode/windows/grt-modules.adb create mode 100644 dist/mcode/windows/ortho_code-x86-flags.ads create mode 100644 dist/mcode/windows/windows_default_path.adb create mode 100644 dist/mcode/windows/windows_default_path.ads (limited to 'dist') diff --git a/dist/gcc/ANNOUNCE b/dist/gcc/ANNOUNCE new file mode 100644 index 000000000..7b1060e20 --- /dev/null +++ b/dist/gcc/ANNOUNCE @@ -0,0 +1,21 @@ +I am happy to introduce GHDL. + +GHDL is a GCC front-end for the VHDL (IEEE 1076) language, an hardware design +language. + +Currently, GHDL implements most of VHDL-1987 and some features of +VHDL-1993. It is mature enough to compile and run some complex design (such +as a DLX processor and leon1, a SPARCv7 processor) + +GHDL has been developped on a GNU/Linux x86 system, and only this configuration +has been tested (porting to other processor or system should not be an hard +task, but there are system dependent files in the run time). + +GHDL is written in Ada95 (using GNAT) and relies on agcc, an Ada +binding for GCC. It also includes a run-time library (written in Ada), named +grt. The front-end and the library are both distributed under the GPL licence. + +For sources, binary tarballs, or for more information, go to +http://ghdl.free.fr + +Tristan Gingold. diff --git a/dist/gcc/INSTALL b/dist/gcc/INSTALL new file mode 100644 index 000000000..e710f9110 --- /dev/null +++ b/dist/gcc/INSTALL @@ -0,0 +1,24 @@ +Install file for the binary distribution of GHDL. + +GHDL is Copyright 2002 - 2010 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 of the License, or +(at your option) any later version. + +The binary are installed in /usr/local directory. You cannot change this +default location, unless you set links. + +You must be root to install this distribution. + +To install ghdl: +$ su +# tar -C / -jxvf @TARFILE@.tar.bz2 + +Note: you must also have a C compiler and zlib installed. + +There is a mailing list for any questions. You can subscribe via: + https://mail.gna.org/listinfo/ghdl-discuss/ + +Tristan Gingold. + diff --git a/dist/gcc/Make-lang.in b/dist/gcc/Make-lang.in new file mode 100644 index 000000000..cde3e6c07 --- /dev/null +++ b/dist/gcc/Make-lang.in @@ -0,0 +1,190 @@ +# Top level -*- makefile -*- fragment for vhdl (GHDL). +# Copyright (C) 2002 +# Free Software Foundation, Inc. + +#This file is part of GNU CC. + +#GNU CC 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. + +#GNU CC 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 GNU CC; see the file COPYING. If not, write to +#the Free Software Foundation, 59 Temple Place - Suite 330, +#Boston, MA 02111-1307, USA. + +# This file provides the language dependent support in the main Makefile. +# Each language makefile fragment must provide the following targets: +# +# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, +# foo.info, foo.dvi, +# foo.install-normal, foo.install-common, foo.install-info, foo.install-man, +# foo.uninstall, foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean, +# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 +# +# where `foo' is the name of the language. +# +# It should also provide rules for: +# +# - making any compiler driver (eg: g++) +# - the compiler proper (eg: cc1plus) +# - define the names for selecting the language in LANGUAGES. +# tool definitions +MV = mv +RM = rm -f + +# Extra flags to pass to recursive makes. +GHDL_ADAFLAGS= -Wall -gnata +VHDL_LIB_DIR=$(libsubdir)/vhdl +GNATBIND = gnatbind +GNATMAKE = gnatmake +VHDL_FLAGS_TO_PASS = \ + "GHDL_ADAFLAGS=$(GHDL_ADAFLAGS)" \ + "GNATMAKE=$(GNATMAKE)" \ + "GNATBIND=$(GNATBIND)" \ + "CFLAGS=$(CFLAGS)" \ + "VHDL_LIB_DIR=$(VHDL_LIB_DIR)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "libexecsubdir=$(libexecsubdir)" + +MAKE_IN_VHDL=$(MAKE) -C vhdl $(FLAGS_TO_PASS) $(VHDL_FLAGS_TO_PASS) + +# Define the names for selecting vhdl in LANGUAGES. +vhdl VHDL: ghdl1$(exeext) ghdl$(exeext) ghdllib + +# Tell GNU Make to ignore these, if they exist. +.PHONY: vhdl VHDL ghdllib + +#ortho-lang.o: $(agcc_srcdir)/ortho-lang.c \ +# $(AGCC_GCCOBJ_DIR)gcc/gtype-vhdl.h \ +# $(AGCC_GCCOBJ_DIR)gcc/gt-vhdl-ortho-lang.h +# $(COMPILER) -c -o $@ $< $(AGCC_CFLAGS) $(INCLUDES) + +GHDL1_OBJS = attribs.o vhdl/ortho-lang.o + +# To be put in ALL_HOST_FRONTEND_OBJS, so that generated files are created +# before. +vhdl_OBJS=vhdl/ortho-lang.o + +# The compiler proper. +# It is compiled into the vhdl/ subdirectory to avoid file name clashes but +# linked in in gcc directory to be able to access to gcc object files. +ghdl1$(exeext): force $(GHDL1_OBJS) $(BACKEND) $(LIBDEPS) + CURDIR=`pwd`; cd $(srcdir)/vhdl; VHDLSRCDIR=`pwd`; cd $$CURDIR/vhdl; \ + $(GNATMAKE) -c -aI$$VHDLSRCDIR ortho_gcc-main \ + -cargs $(CFLAGS) $(GHDL_ADAFLAGS) + $(GNATMAKE) -o $@ -aI$(srcdir)/vhdl -aOvhdl ortho_gcc-main \ + -bargs -E -cargs $(CFLAGS) $(GHDL_ADAFLAGS) \ + -largs --LINK=$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GHDL1_OBJS) \ + $(filter-out main.o,$(BACKEND)) $(LIBS) $(BACKENDLIBS) + +# The driver for ghdl. +ghdl$(exeext): force + $(MAKE_IN_VHDL) ../ghdl$(exeext) + +# Ghdl libraries. +ghdllib: ghdl$(exeext) ghdl1$(exeext) $(GCC_PASSES) force + $(MAKE_IN_VHDL) GRT_FLAGS="-O -g" $(FLAGS_TO_PASS) \ + ADAC=$(COMPILER_FOR_BUILD) ghdllib + +# Build hooks: + +vhdl.all.build: + +vhdl.all.cross: + @echo "No support for building vhdl cross-compiler" + exit 1 + +vhdl.start.encap: +vhdl.rest.encap: + +# Documentation hooks +doc/ghdl.info: vhdl/ghdl.texi + -rm -f doc/ghdl.info* + $(MAKEINFO) $(MAKEINFOFLAGS) -o $@ $< + +doc/ghdl.dvi: vhdl/ghdl.texi + $(TEXI2DVI) -o $@ $< + +vhdl.info: doc/ghdl.info + +vhdl.man: + +vhdl.dvi: doc/ghdl.dvi + +vhdl.generated-manpages: + +# Install hooks: +# ghdl1 is installed elsewhere as part of $(COMPILERS). + +vhdl.install-normal: + +vhdl.install-plugin: + +# Install the driver program as ghdl. +vhdl.install-common: ghdl$(exeext) + -mkdir $(DESTDIR)$(bindir) + -$(RM) $(DESTDIR)$(bindir)/ghdl$(exeext) + $(INSTALL_PROGRAM) ghdl$(exeext) $(DESTDIR)$(bindir)/ghdl$(exeext) +# Install the library + $(MAKE_IN_VHDL) install-ghdllib + +install-info:: $(DESTDIR)$(infodir)/ghdl.info + +vhdl.install-info: doc/ghdl.info + -rm -rf $(infodir)/ghdl.info* + $(INSTALL_DATA) doc/ghdl.info* $(DESTDIR)$(infodir) + -chmod a-x $(DESTDIR)$(infodir)/ghdl.info* + +install-ghdllib: + $(MAKE) -f vhdl/Makefile $(FLAGS_TO_PASS) $(VHDL_FLAGS_TO_PASS) install-ghdllib + +vhdl.install-man: $(DESTDIR)$(man1dir)/ghdl$(man1ext) + +$(DESTDIR)$(man1dir)/ghdl$(man1ext): $(srcdir)/vhdl/ghdl.1 + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +vhdl.uninstall: + -$(RM) $(DESTDIR)$(bindir)/ghdl$(exeext) + + +# Clean hooks: +# A lot of the ancillary files are deleted by the main makefile. +# We just have to delete files specific to us. + +vhdl.mostlyclean: + -$(RM) vhdl/*$(objext) vhdl/*.ali vhdl/b_*.c +vhdl.clean: + -$(RM) vhdl/*$(objext) +vhdl.distclean: + -$(RM) vhdl/Makefile + -$(RM) ghdl$(exeext) +vhdl.extraclean: + +vhdl.maintainer-clean: + + +# Stage hooks: +# The main makefile has already created stage?/vhdl + +vhdl.stage1: + -$(MV) vhdl/*$(objext) vhdl/*.ali vhdl/b_*.c stage1/vhdl + -$(MV) vhdl/stamp-* stage1/vhdl +vhdl.stage2: + -$(MV) vhdl/*$(objext) vhdl/*.ali vhdl/b_*.c stage2/vhdl + -$(MV) vhdl/stamp-* stage2/vhdl +vhdl.stage3: + -$(MV) vhdl/*$(objext) vhdl/*.ali vhdl/b_*.c stage3/vhdl + -$(MV) vhdl/stamp-* stage3/vhdl +vhdl.stage4: + -$(MV) vhdl/*$(objext) vhdl/*.ali vhdl/b_*.c stage4/vhdl + -$(MV) vhdl/stamp-* stage4/vhdl diff --git a/dist/gcc/Makefile.in b/dist/gcc/Makefile.in new file mode 100644 index 000000000..13f329660 --- /dev/null +++ b/dist/gcc/Makefile.in @@ -0,0 +1,299 @@ +# Makefile for GNU vhdl Compiler (GHDL). +# Copyright (C) 2002 Free Software Foundation, Inc. + +#This file is part of GNU CC. + +#GNU CC 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. + +#GNU CC 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 GNU CC; see the file COPYING. If not, write to +#the Free Software Foundation, 59 Temple Place - Suite 330, +#Boston, MA 02111-1307, USA. + +# The makefile built from this file lives in the language subdirectory. +# It's purpose is to provide support for: +# +# 1) recursion where necessary, and only then (building .o's), and +# 2) building and debugging cc1 from the language subdirectory, and +# 3) nothing else. +# +# The parent makefile handles all other chores, with help from the +# language makefile fragment, of course. +# +# The targets for external use are: +# all, TAGS, ???mostlyclean, ???clean. + +# This makefile will only work with Gnu make. +# The rules are written assuming a minimum subset of tools are available: +# +# Required: +# MAKE: Only Gnu make will work. +# MV: Must accept (at least) one, maybe wildcard, source argument, +# a file or directory destination, and support creation/ +# modification date preservation. Gnu mv -f works. +# RM: Must accept an arbitrary number of space separated file +# arguments, or one wildcard argument. Gnu rm works. +# RMDIR: Must delete a directory and all its contents. Gnu rm -rf works. +# ECHO: Must support command line redirection. Any Unix-like +# shell will typically provide this, otherwise a custom version +# is trivial to write. +# LN: ln -s works, cp should work bu was not tested. +# CP: GNU cp -p works. +# AR: Gnu ar works. +# MKDIR: Gnu mkdir works. +# CHMOD: Gnu chmod works. +# true: Does nothing and returns a normal successful return code. +# pwd: Prints the current directory on stdout. +# cd: Change directory. + +# Tell GNU make 3.79 not to run this directory in parallel. +# Not all of the required dependencies are present. +.NOTPARALLEL: + +# Variables that exist for you to override. +# See below for how to change them for certain systems. + +ALLOCA = +# Various ways of specifying flags for compilations: +# CFLAGS is for the user to override to, e.g., do a bootstrap with -O2. +# BOOT_CFLAGS is the value of CFLAGS to pass +# to the stage2 and stage3 compilations +# XCFLAGS is used for most compilations but not when using the GCC just built. +XCFLAGS = +CFLAGS = -g +BOOT_CFLAGS = -O $(CFLAGS) +# These exists to be overridden by the x-* and t-* files, respectively. +X_CFLAGS = +T_CFLAGS = + +X_CPPFLAGS = +T_CPPFLAGS = + +X_ADAFLAGS = +T_ADAFLAGS = + +ADAC = $(CC) + +ECHO = echo +CHMOD = chmod +CP = cp -p +MV = mv -f +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir -p +LN = ln -s +AR = ar +# How to invoke ranlib. +RANLIB = ranlib +# Test to use to see whether ranlib exists on the system. +RANLIB_TEST = [ -f /usr/bin/ranlib -o -f /bin/ranlib ] +SHELL = /bin/sh +INSTALL_DATA = install -m 644 +MAKEINFO = makeinfo +TEXI2DVI = texi2dvi +GNATBIND = gnatbind +GNATMAKE = gnatmake +ADA_CFLAGS = $(CFLAGS) +GHDL_ADAFLAGS = -Wall -gnata + +objext = .o +exeext = +arext = .a +soext = .so +shext = + +HOST_CC=$(CC) +HOST_CFLAGS=$(ALL_CFLAGS) +HOST_CLIB=$(CLIB) +HOST_LDFLAGS=$(LDFLAGS) +HOST_CPPFLAGS=$(ALL_CPPFLAGS) +HOST_ALLOCA=$(ALLOCA) +HOST_MALLOC=$(MALLOC) +HOST_OBSTACK=$(OBSTACK) + +# We don't use cross-make. Instead we use the tools from the build tree, +# if they are available. +# program_transform_name and objdir are set by configure.in. +program_transform_name = +objdir = . + +target=@target@ +target_alias=@target_alias@ +target_noncanonical:=@target_noncanonical@ +xmake_file=@dep_host_xmake_file@ +tmake_file=@dep_tmake_file@ +#version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c` +#mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c` + +# Directory where sources are, from where we are. +srcdir = @srcdir@ +VPATH = @srcdir@ + +# Top build directory, relative to here. +top_builddir = .. + +version := $(shell cat $(srcdir)/../BASE-VER) + +# End of variables for you to override. + +# Definition of `all' is here so that new rules inserted by sed +# do not specify the default target. +all: all.indirect + +# This tells GNU Make version 3 not to put all variables in the environment. +.NOEXPORT: + +# Now figure out from those variables how to compile and link. + +all.indirect: Makefile + +# This tells GNU make version 3 not to export all the variables +# defined in this file into the environment. +.NOEXPORT: + +Makefile: $(srcdir)/Makefile.in $(srcdir)/../configure + cd ..; $(SHELL) config.status + +force: + +SED=sed + +drvdir/default_pathes.ads: drvdir Makefile + echo "-- DO NOT EDIT" > tmp-dpathes.ads + echo "-- This file is created by Makefile" >> tmp-dpathes.ads + echo "package Default_Pathes is" >> tmp-dpathes.ads + echo " -- Accept long lines." >> tmp-dpathes.ads + echo " pragma Style_Checks (\"M999\");" >> tmp-dpathes.ads + echo " Install_Prefix : constant String :=" >> tmp-dpathes.ads + echo " \"$(exec_prefix)\";" >> tmp-dpathes.ads + echo " Compiler_Gcc : constant String :=" >> tmp-dpathes.ads + echo " \"libexec/gcc/$(target_noncanonical)/$(version)/ghdl1$(exeext)\";" >> tmp-dpathes.ads + echo " Compiler_Debug : constant String := \"\";" >> tmp-dpathes.ads + echo " Compiler_Mcode : constant String := \"\";" >> tmp-dpathes.ads + echo " Compiler_Llvm : constant String := \"\";" >> tmp-dpathes.ads + echo " Post_Processor : constant String := \"\";" >> tmp-dpathes.ads + echo " Lib_Prefix : constant String :=">> tmp-dpathes.ads + echo " \"lib/gcc/$(target_noncanonical)/$(version)/vhdl/lib/\";" >> tmp-dpathes.ads + echo "end Default_Pathes;" >> tmp-dpathes.ads + $(srcdir)/../../move-if-change tmp-dpathes.ads $@ + +../ghdl$(exeext): drvdir drvdir/default_pathes.ads force + CURDIR=`pwd`; cd $(srcdir); SRCDIR=`pwd`; cd $$CURDIR/drvdir; \ + $(GNATMAKE) -o ../$@ -aI$$SRCDIR/ghdldrv -aI$$SRCDIR -aO.. ghdl_gcc \ + -bargs -E -cargs $(ADA_CFLAGS) $(GHDL_ADAFLAGS) -largs $(LIBS) + +drvdir: + mkdir $@ + +clean: grt-clean ghdllibs-clean force + $(RM) *.o *.ali + $(RM) default_pathes.ads + +# Additionnal rules + +LIB87_DIR:=./lib/v87 +LIB93_DIR:=./lib/v93 +LIB08_DIR:=./lib/v08 +LIBSRC_DIR:=$(srcdir)/libraries +ANALYZE=../ghdl -a --GHDL1=../ghdl1 --ieee=none + +$(LIB93_DIR) $(LIB87_DIR): + $(srcdir)/../../mkinstalldirs $@ + +####libraries Makefile.inc + +std87_standard.o: $(GHDL1) + $(GHDL1) --std=87 -quiet -o std_standard.s --compile-standard + ../xgcc -c -o std_standard.o std_standard.s + $(MV) std_standard.o $@ + +std93_standard.o: $(GHDL1) + $(GHDL1) --std=93 -quiet -o std_standard.s --compile-standard + ../xgcc -c -o std_standard.o std_standard.s + $(MV) std_standard.o $@ + +std08_standard.o: $(GHDL1) + $(GHDL1) --std=08 -quiet -o std_standard.s --compile-standard + ../xgcc -c -o std_standard.o std_standard.s + $(MV) std_standard.o $@ + +ghdllib: std87_standard.o std93_standard.o std08_standard.o libgrt.a + +ghdllibs-clean: force + $(RM) -rf $(LIB87_DIR) $(LIB93_DIR) $(LIB08_DIR) + +PHONY: ghdllib ghdllibs-clean + +GHDL1=../ghdl1 +GRTSRCDIR=$(srcdir)/grt +GRT_RANLIB=$(RANLIB) + +####grt Makefile.inc + +install-ghdllib: ghdllib grt.lst $(STD93_SRCS) $(STD87_SRCS) \ + $(IEEE93_SRCS) $(IEEE87_SRCS) $(SYNOPSYS_SRCS) \ + $(STD08_SRCS) $(IEEE08_SRCS) + $(RM) -rf $(DESTDIR)$(VHDL_LIB_DIR) + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR) +# Install libgrt + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/lib + $(INSTALL_DATA) libgrt.a $(DESTDIR)$(VHDL_LIB_DIR)/lib/libgrt.a + $(INSTALL_DATA) grt.lst $(DESTDIR)$(VHDL_LIB_DIR)/lib/grt.lst + $(INSTALL_DATA) $(GRTSRCDIR)/grt.ver $(DESTDIR)$(VHDL_LIB_DIR)/lib/grt.ver +# Install VHDL sources. + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/std + for i in $(STD93_SRCS) $(STD87_SRCS) $(STD08_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/std; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/ieee + for i in $(IEEE93_SRCS) $(IEEE87_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/ieee; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/vital95 + for i in $(VITAL95_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/vital95; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/vital2000 + for i in $(VITAL2000_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/vital2000; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/synopsys + for i in $(SYNOPSYS_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/synopsys; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/mentor + for i in $(MENTOR93_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/mentor; \ + done + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/src/ieee2008 + for i in $(IEEE08_SRCS); do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(VHDL_LIB_DIR)/src/ieee2008; \ + done +# Create library dirs + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/lib/v93 + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/lib/v87 + $(MKDIR) $(DESTDIR)$(VHDL_LIB_DIR)/lib/v08 +# Compile in place. + PDIR=`pwd` && cd $(DESTDIR)$(VHDL_LIB_DIR) && \ + $(MAKE) -f $$PDIR/Makefile REL_DIR=../../.. LIBSRC_DIR="src" \ + LIB93_DIR=lib/v93 LIB87_DIR=lib/v87 LIB08_DIR=lib/v08 \ + ANALYZE="$$PDIR/../ghdl -a --GHDL1=$$PDIR/../ghdl1 --ieee=none" \ + std.v87 ieee.v87 synopsys.v87 \ + std.v93 ieee.v93 synopsys.v93 mentor.v93 \ + std.v08 ieee.v08 +# Copy std_standard (this is done after libraries, since they remove dirs). + $(INSTALL_DATA) std87_standard.o \ + $(DESTDIR)$(VHDL_LIB_DIR)/lib/v87/std/std_standard.o + $(INSTALL_DATA) std93_standard.o \ + $(DESTDIR)$(VHDL_LIB_DIR)/lib/v93/std/std_standard.o + $(INSTALL_DATA) std08_standard.o \ + $(DESTDIR)$(VHDL_LIB_DIR)/lib/v08/std/std_standard.o diff --git a/dist/gcc/README b/dist/gcc/README new file mode 100644 index 000000000..1152e9908 --- /dev/null +++ b/dist/gcc/README @@ -0,0 +1,87 @@ +This is the README from the source distribution of GHDL. + +To get the binary distribution or more information, go to http://ghdl.free.fr + +Copyright: +********** +GHDL is copyright (c) 2002 - 2010 Tristan Gingold. +See the GHDL manual for more details. + +This program 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 of the License, or +(at your option) any later version. + +This program 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 this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + + +Building GHDL from sources: +*************************** + +Required: +* the sources of @GCCVERSION@ (at least the core part). + Note: other versions of gcc sources have not been tested. +* the Ada95 GNAT compiler (GNAT GPL 2008 are known to work; + Ada compilers in most Linux distributions are more or less buggy) +* GNU/Linux for ix86 (pc systems) (porting is necessary for other systems) + +Procedure: +* Check your Ada compiler. On some systems (or with some distribution), the + GNAT compiler seems broken. Try this very simple example, using file + example.adb +<<<<<<<<<<<<<<<<<< +procedure Example is +begin + null; +end Example; +<<<<<<<<<<<<<<<<<< + Compile with + $ gnatmake example + It should create an executable, 'example'. + If this doesn't work, your GNAT installation is broken. It may be a PATH + problem or something else. +* untar the gcc tarball +* untar the ghdl tarball (this sould have been done, since you are reading a + file from it). +* move or copy the vhdl directory of ghdl into the gcc subdirectory of + the gcc distribution. + You should have a @GCCVERSION@/gcc/vhdl directory. +* configure gcc with the --enable-languages=vhdl option. You may of course + add other languages. Also you'd better to disable bootstraping using + --disable-bootstrap. + Refer to the gcc installation documentation. +* compile gcc. + 'make CFLAGS="-O"' is OK +* install gcc. This installs the ghdl driver too. + 'make install' is OK. + +There is a mailing list for any questions. You can subscribe via: + https://mail.gna.org/listinfo/ghdl-discuss/ +Please report bugs on https://gna.org/bugs/?group=ghdl + +If you cannot compile, please report the gcc version, GNAT version and gcc +source version. + +* Note for ppc64 (and AIX ?) platform: +The object file format contains an identifier for the source language. Because +gcc doesn't know about the VHDL, gcc crashes very early. This could be fixed +with a very simple change in gcc/config/rs6000/rs6000.c, +function rs6000_output_function_epilogue (as of gcc 4.8): + else if (! strcmp (language_string, "GNU Objective-C")) + i = 14; + else +- gcc_unreachable (); ++ i = 0; + fprintf (file, "%d,", i); + + /* 8 single bit fields: global linkage (not set for C extern linkage, + +Tristan Gingold. diff --git a/dist/gcc/config-lang.in b/dist/gcc/config-lang.in new file mode 100644 index 000000000..7010b1127 --- /dev/null +++ b/dist/gcc/config-lang.in @@ -0,0 +1,38 @@ +# Top level configure fragment for GNU vhdl (GHDL). +# Copyright (C) 1994-2001 Free Software Foundation, Inc. + +#This file is part of GNU CC. + +#GNU CC 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. + +#GNU CC 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 GNU CC; see the file COPYING. If not, write to +#the Free Software Foundation, 59 Temple Place - Suite 330, +#Boston, MA 02111-1307, USA. + +# Configure looks for the existence of this file to auto-config each language. +# We define several parameters used by configure: +# +# language - name of language as it would appear in $(LANGUAGES) +# boot_language - "yes" if we need to build this language in stage1 +# compilers - value to add to $(COMPILERS) +# stagestuff - files to add to $(STAGESTUFF) + +language="vhdl" +boot_language=no + +compilers="ghdl1\$(exeext)" + +stagestuff="ghdl\$(exeext) ghdl1\$(exeext)" + +outputs=vhdl/Makefile + +gtfiles="\$(srcdir)/vhdl/ortho-lang.c" diff --git a/dist/gcc/dist-common.sh b/dist/gcc/dist-common.sh new file mode 100644 index 000000000..ad2229734 --- /dev/null +++ b/dist/gcc/dist-common.sh @@ -0,0 +1,337 @@ +# ghdl core files +cfiles=" +evaluation.adb +evaluation.ads +scanner.ads +scanner.adb +scanner-scan_literal.adb +back_end.ads +back_end.adb +files_map.adb +files_map.ads +sem.adb +sem.ads +sem_expr.adb +sem_expr.ads +sem_names.adb +sem_names.ads +sem_scopes.adb +sem_scopes.ads +sem_decls.ads +sem_decls.adb +sem_inst.ads +sem_inst.adb +sem_specs.ads +sem_specs.adb +sem_stmts.ads +sem_stmts.adb +sem_types.ads +sem_types.adb +sem_assocs.ads +sem_assocs.adb +sem_psl.ads +sem_psl.adb +canon.adb +canon.ads +canon_psl.ads +canon_psl.adb +flags.adb +flags.ads +configuration.adb +configuration.ads +nodes.ads +nodes.adb +nodes_gc.ads +nodes_gc.adb +nodes_meta.ads +nodes_meta.adb +options.ads +options.adb +psl-errors.ads +lists.ads +lists.adb +iirs.adb +iirs.ads +iir_chains.ads +iir_chains.adb +iir_chain_handling.ads +iir_chain_handling.adb +iirs_walk.ads +iirs_walk.adb +std_names.adb +std_names.ads +disp_tree.adb +disp_tree.ads +iirs_utils.adb +iirs_utils.ads +std_package.adb +std_package.ads +disp_vhdl.adb +disp_vhdl.ads +libraries.adb +libraries.ads +tokens.adb +tokens.ads +name_table.adb +name_table.ads +str_table.ads +str_table.adb +types.ads +version.ads +errorout.adb +errorout.ads +parse.adb +parse.ads +parse_psl.ads +parse_psl.adb +post_sems.ads +post_sems.adb +ieee.ads +ieee-std_logic_1164.ads +ieee-std_logic_1164.adb +ieee-vital_timing.ads +ieee-vital_timing.adb +xrefs.ads +xrefs.adb +bug.ads +bug.adb +" + +# translation file +tfiles=" +translation.adb +ortho_front.adb +translation.ads +trans_decls.ads +trans_be.ads +trans_be.adb +trans_analyzes.ads +trans_analyzes.adb" + +ortho_files=" +ortho_front.ads" + +ortho_gcc_files=" +lang.opt +ortho-lang.c +ortho_gcc-main.adb +ortho_gcc-main.ads +ortho_gcc.adb +ortho_gcc.ads +ortho_gcc_front.ads +ortho_ident.adb +ortho_ident.ads +ortho_nodes.ads +" + +ghdl_files=" +ghdl_gcc.adb +ghdldrv.ads +ghdldrv.adb +ghdlprint.ads +ghdlprint.adb +ghdllocal.ads +ghdllocal.adb +ghdlmain.ads +ghdlmain.adb +" + +libraries_files=" +std/textio.vhdl +std/textio_body.vhdl +std/env.vhdl +std/env_body.vhdl +ieee/README.ieee +ieee/numeric_bit-body.vhdl +ieee/numeric_bit.vhdl +ieee/numeric_std-body.vhdl +ieee/numeric_std.vhdl +ieee/std_logic_1164.vhdl +ieee/std_logic_1164_body.vhdl +ieee/math_real.vhdl +ieee/math_real-body.vhdl +ieee/math_complex.vhdl +ieee/math_complex-body.vhdl +ieee2008/README.ieee +ieee2008/fixed_float_types.vhdl +ieee2008/fixed_generic_pkg-body.vhdl +ieee2008/fixed_generic_pkg.vhdl +ieee2008/fixed_pkg.vhdl +ieee2008/float_generic_pkg-body.vhdl +ieee2008/float_generic_pkg.vhdl +ieee2008/float_pkg.vhdl +ieee2008/math_complex-body.vhdl +ieee2008/math_complex.vhdl +ieee2008/math_real-body.vhdl +ieee2008/math_real.vhdl +ieee2008/numeric_bit-body.vhdl +ieee2008/numeric_bit.vhdl +ieee2008/numeric_bit_unsigned-body.vhdl +ieee2008/numeric_bit_unsigned.vhdl +ieee2008/numeric_std-body.vhdl +ieee2008/numeric_std.vhdl +ieee2008/numeric_std_unsigned-body.vhdl +ieee2008/numeric_std_unsigned.vhdl +ieee2008/std_logic_1164-body.vhdl +ieee2008/std_logic_1164.vhdl +ieee2008/std_logic_textio.vhdl +vital95/vital_primitives.vhdl +vital95/vital_primitives_body.vhdl +vital95/vital_timing.vhdl +vital95/vital_timing_body.vhdl +vital2000/memory_b.vhdl +vital2000/memory_p.vhdl +vital2000/prmtvs_b.vhdl +vital2000/prmtvs_p.vhdl +vital2000/timing_b.vhdl +vital2000/timing_p.vhdl +synopsys/std_logic_arith.vhdl +synopsys/std_logic_misc.vhdl +synopsys/std_logic_misc-body.vhdl +synopsys/std_logic_signed.vhdl +synopsys/std_logic_textio.vhdl +synopsys/std_logic_unsigned.vhdl +mentor/std_logic_arith.vhdl +mentor/std_logic_arith_body.vhdl +" + +grt_files=" +grt-cbinding.c +grt-cvpi.c +grt.adc +grt-astdio.ads +grt-astdio.adb +grt-avhpi.adb +grt-avhpi.ads +grt-avls.ads +grt-avls.adb +grt-c.ads +grt-disp.adb +grt-disp.ads +grt-disp_rti.adb +grt-disp_rti.ads +grt-disp_tree.adb +grt-disp_tree.ads +grt-disp_signals.adb +grt-disp_signals.ads +grt-errors.adb +grt-errors.ads +grt-files.adb +grt-files.ads +grt-hooks.adb +grt-hooks.ads +grt-images.adb +grt-images.ads +grt-lib.adb +grt-lib.ads +grt-main.adb +grt-main.ads +grt-modules.ads +grt-modules.adb +grt-names.adb +grt-names.ads +grt-options.adb +grt-options.ads +grt-processes.adb +grt-processes.ads +grt-rtis.ads +grt-rtis.adb +grt-rtis_addr.adb +grt-rtis_addr.ads +grt-rtis_utils.adb +grt-rtis_utils.ads +grt-rtis_binding.ads +grt-rtis_types.ads +grt-rtis_types.adb +grt-sdf.adb +grt-sdf.ads +grt-shadow_ieee.ads +grt-shadow_ieee.adb +grt-signals.adb +grt-signals.ads +grt-stack2.adb +grt-stack2.ads +grt-stacks.adb +grt-stacks.ads +grt-stats.ads +grt-stats.adb +grt-stdio.ads +grt-table.ads +grt-table.adb +grt-types.ads +grt-unithread.ads +grt-unithread.adb +grt-values.adb +grt-values.ads +grt-vcd.adb +grt-vcd.ads +grt-vcdz.adb +grt-vcdz.ads +grt-vital_annotate.adb +grt-vital_annotate.ads +grt-vpi.adb +grt-vpi.ads +grt-vstrings.adb +grt-vstrings.ads +grt-waves.ads +grt-waves.adb +grt-zlib.ads +grt-threads.ads +grt-arch_none.ads +grt-arch_none.adb +grt-std_logic_1164.ads +grt-std_logic_1164.adb +grt.ads +main.adb +main.ads +ghdl_main.ads +ghdl_main.adb +ghwlib.h +ghwlib.c +ghwdump.c +grt.ver +" + +grt_config_files=" +i386.S +sparc.S +ppc.S +ia64.S +amd64.S +times.c +clock.c +linux.c +pthread.c +win32.c" + +psl_files=" +psl.ads +psl-build.adb +psl-build.ads +psl-cse.adb +psl-cse.ads +psl-disp_nfas.adb +psl-disp_nfas.ads +psl-dump_tree.adb +psl-dump_tree.ads +psl-hash.adb +psl-hash.ads +psl-nfas.adb +psl-nfas.ads +psl-nfas-utils.adb +psl-nfas-utils.ads +psl-nodes.adb +psl-nodes.ads +psl-optimize.adb +psl-optimize.ads +psl-prints.adb +psl-prints.ads +psl-priorities.ads +psl-qm.adb +psl-qm.ads +psl-rewrites.adb +psl-rewrites.ads +psl-subsets.adb +psl-subsets.ads +psl-tprint.adb +psl-tprint.ads" diff --git a/dist/gcc/dist.sh b/dist/gcc/dist.sh new file mode 100755 index 000000000..8632dc574 --- /dev/null +++ b/dist/gcc/dist.sh @@ -0,0 +1,471 @@ +#!/bin/sh + +# Script used to create tar balls. +# Copyright (C) 2002, 2003, 2004, 2005, 2006 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. + +# Building a distribution: +# * update the 'version' variable in ../../Makefile +# * Regenerate version.ads: make -f ../../Makefile version.ads +# * Check NEWS, README and INSTALL files. +# * Check version and copyright years in doc/ghdl.texi, ghdlmain.adb +# * Check GCCVERSION below. +# * Check lists of exported files in this file. +# * Create source tar and build binaries: ./dist.sh dist_phase1 +# * su root +# * Build binary tar: HOME=~user ./dist.sh dist_phase2 +# * Run the testsuites: GHDL=ghdl ./testsuite.sh gcc +# * Update website/index.html (./dist.sh website helps) +# * upload (./dist upload) +# * CVS commit, tag + cd image. +# * remove previous version in /usr/local + +## DO NOT MODIFY this file while it is running... + +set -e + +# GCC version +GCCVERSION=4.9.2 +# Machine name used by GCC +MACHINE=${MACHINE:i686-pc-linux-gnu} +# Directory where GCC sources (and objects) stay. +DISTDIR=${DISTDIR:-$HOME/dist} +# GTKWave version. +GTKWAVE_VERSION=3.3.50 + +# GHDL version (extracted from version.ads) +VERSION=`sed -n -e 's/.*GHDL \([0-9.a-z]*\) (.*/\1/p' ../../version.ads` + +CWD=`pwd` + +distdir=ghdl-$VERSION +tarfile=$distdir.tar + +GTKWAVE_BASE=$HOME/devel/gtkwave-$GTKWAVE_VERSION + +GCCDIST=$DISTDIR/gcc-$GCCVERSION +GCCDISTOBJ=$GCCDIST-objs +PREFIX=/usr/local +GCCLIBDIR=$PREFIX/lib/gcc/$MACHINE/$GCCVERSION +GCCLIBEXECDIR=$PREFIX/libexec/gcc/$MACHINE/$GCCVERSION +bindirname=ghdl-$VERSION-$MACHINE +TARINSTALL=$DISTDIR/$bindirname.tar.bz2 +VHDLDIR=$distdir/vhdl +DOWNLOAD_HTML=../../website/download.html +DESTDIR=$CWD/ +UNSTRIPDIR=${distdir}-unstripped + +PATH=/usr/gnat/bin:$PATH + +do_clean () +{ + rm -rf $VHDLDIR + mkdir $VHDLDIR + mkdir $VHDLDIR/ghdldrv + mkdir $VHDLDIR/libraries + mkdir $VHDLDIR/libraries/std $VHDLDIR/libraries/ieee + mkdir $VHDLDIR/libraries/vital95 $VHDLDIR/libraries/vital2000 + mkdir $VHDLDIR/libraries/synopsys $VHDLDIR/libraries/mentor + mkdir $VHDLDIR/libraries/ieee2008 + mkdir $VHDLDIR/grt + mkdir $VHDLDIR/grt/config +} + +# Build Makefile +do_Makefile () +{ + sed -e "/^####libraries Makefile.inc/r ../../libraries/Makefile.inc" \ + -e "/^####grt Makefile.inc/r ../grt/Makefile.inc" \ + < Makefile.in > $VHDLDIR/Makefile.in + cp Make-lang.in $VHDLDIR/Make-lang.in +} + +# Copy (or link) sources files into $VHDLDIR +do_files () +{ +. ./dist-common.sh + +# Local files +lfiles="config-lang.in lang-options.h lang-specs.h" +for i in $lfiles; do ln -sf $CWD/$i $VHDLDIR/$i; done + +for i in $cfiles; do ln -sf $CWD/../../$i $VHDLDIR/$i; done + +for i in ghdl.texi ghdl.1; do ln -sf $CWD/../../doc/$i $VHDLDIR/$i; done + +for i in $tfiles; do ln -sf $CWD/../$i $VHDLDIR/$i; done + +for i in $ortho_files; do ln -sf $CWD/../../ortho/$i $VHDLDIR/$i; done + +for i in $ortho_gcc_files; do + ln -sf $CWD/../../ortho/gcc/$i $VHDLDIR/$i +done + +for i in $ghdl_files; do + ln -sf $CWD/../ghdldrv/$i $VHDLDIR/ghdldrv/$i +done + +for i in $libraries_files; do + ln -sf $CWD/../../libraries/$i $VHDLDIR/libraries/$i +done + +for i in $grt_files; do + ln -sf $CWD/../grt/$i $VHDLDIR/grt/$i +done + +for i in $grt_config_files; do + ln -sf $CWD/../grt/config/$i $VHDLDIR/grt/config/$i +done + +for i in $psl_files; do + ln -sf $CWD/../../psl/$i $VHDLDIR/$i +done +} + +# Create the tar of sources. +do_sources () +{ + \rm -rf $distdir + mkdir $distdir + VHDLDIR=$distdir/vhdl + do_clean $VHDLDIR + do_Makefile + do_files + ln -sf ../../../COPYING $distdir + sed -e "s/@GCCVERSION@/gcc-$GCCVERSION/g" < README > $distdir/README + tar cvhf $tarfile $distdir + bzip2 -f $tarfile + rm -rf $distdir +} + +# Put GHDL sources in GCC. +do_update_gcc_sources () +{ + set -x + + cd $GCCDIST/.. + tar jxvf $CWD/$tarfile.bz2 + rm -rf $GCCDIST/gcc/vhdl + mv $distdir/vhdl $GCCDIST/gcc +} + +# Extract the source, configure and make. +do_compile () +{ + #set -x + + do_update_gcc_sources; + +# gmp build with: +# CFLAGS="-O -m32" ./configure --prefix=$HOME/dist/build \ +# --disable-shared --build=i686-pc-linux-gnu +# make +# make install +# make check + + # usegnat32! + + rm -rf $GCCDISTOBJ + mkdir $GCCDISTOBJ + cd $GCCDISTOBJ + export CFLAGS="-O -g" + + case $MACHINE in + i?86-*-linux*) + # gmp location (mpfr and mpc are supposed to be at the same place) + CONFIG_LIBS="--with-gmp=$PWD/../build" + ;; + x86_64-*-linux*) + CONFIG_LIBS="" + ;; + x86_64-*-darwin*) + CONFIG_LIBS="--with-gmp=$HOME/local --with-stage1-ldflags=" + ;; + *) + exit 1 + ;; + esac + ../gcc-$GCCVERSION/configure --enable-languages=vhdl --prefix=$PREFIX --disable-bootstrap --with-bugurl="" --build=$MACHINE $CONFIG_LIBS --disable-shared --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath + + make -j4 + make -C gcc vhdl.info + cd $CWD +} + +# Re-package sources, update gcc sources and recompile without reconfiguring. +do_recompile () +{ + do_sources + do_update_gcc_sources; + cd $GCCDISTOBJ + export CFLAGS="-O -g" + make -j4 +} + +check_root () +{ + if [ $UID -ne 0 ]; then + echo "$0: you must be root"; + exit 1; + fi +} + +# Do a make install +do_gcc_install () +{ + set -x + cd $GCCDISTOBJ + # Check the info file is not empty. + if [ -s gcc/doc/ghdl.info ]; then + echo "info file found" + else + echo "Error: ghdl.info not found". + exit 1; + fi + mkdir -p $DESTDIR/usr/local || true + make DESTDIR=$DESTDIR install + cd $CWD + if [ -d $UNSTRIPDIR ]; then + rm -rf $UNSTRIPDIR + fi + mkdir $UNSTRIPDIR + cp ${DESTDIR}${GCCLIBEXECDIR}/ghdl1 ${DESTDIR}${PREFIX}/bin/ghdl $UNSTRIPDIR + chmod -w $UNSTRIPDIR/* + strip ${DESTDIR}${GCCLIBEXECDIR}/ghdl1 ${DESTDIR}${PREFIX}/bin/ghdl +} + +# Create the tar file from the current installation. +do_tar_install () +{ + tar -C $DESTDIR -jcvf $TARINSTALL \ + ./$PREFIX/bin/ghdl ./$PREFIX/info/ghdl.info ./$PREFIX/man/man1/ghdl.1 \ + ./$GCCLIBDIR/vhdl \ + ./$GCCLIBEXECDIR/ghdl1 +} + +do_extract_tar_install () +{ + check_root; + cd / + tar jxvf $TARINSTALL + cd $CWD +} + +# Create the tar file to be distributed. +do_tar_dist () +{ + rm -rf $bindirname + mkdir $bindirname + sed -e "s/@TARFILE@/$bindirname/" < INSTALL > $bindirname/INSTALL + ln ../../COPYING $bindirname + cp $TARINSTALL $bindirname + tar cvf $bindirname.tar $bindirname +} + +# Remove the non-ghdl files of gcc in the current installation. +do_distclean_gcc () +{ + set -x + rm -f ${DESTDIR}${PREFIX}/bin/cpp ${DESTDIR}${PREFIX}/bin/gcc + rm -f ${DESTDIR}${PREFIX}/bin/gcc-* + rm -f ${DESTDIR}${PREFIX}/bin/gccbug ${DESTDIR}${PREFIX}/bin/gcov + rm -f ${DESTDIR}${PREFIX}/bin/${MACHINE}-gcc* + rm -f ${DESTDIR}${PREFIX}/info/cpp.info* + rm -f ${DESTDIR}${PREFIX}/info/cppinternals.info* + rm -f ${DESTDIR}${PREFIX}/info/gcc.info* + rm -f ${DESTDIR}${PREFIX}/info/gccinstall.info* + rm -f ${DESTDIR}${PREFIX}/info/gccint.info* + rm -f ${DESTDIR}${PREFIX}/lib/*.a + rm -f ${DESTDIR}${PREFIX}/lib/*.so* + rm -f ${DESTDIR}${PREFIX}/lib/*.la + rm -rf ${DESTDIR}${PREFIX}/share + rm -rf ${DESTDIR}${PREFIX}/man/man7 + rm -rf ${DESTDIR}${PREFIX}/man/man1/{cpp,gcc,gcov}.1 + rm -rf ${DESTDIR}${PREFIX}/include + rm -f ${DESTDIR}${GCCLIBEXECDIR}/cc1 ${DESTDIR}${GCCLIBEXECDIR}/collect2 + rm -f ${DESTDIR}${GCCLIBEXECDIR}/cpp0 ${DESTDIR}${GCCLIBEXECDIR}/tradcpp0 + rm -rf ${DESTDIR}${GCCLIBEXECDIR}/plugin + rm -rf ${DESTDIR}${GCCLIBEXECDIR}/lto-wrapper + rm -f ${DESTDIR}${GCCLIBDIR}/*.o ${DESTDIR}$GCCLIBDIR/*.a + rm -f ${DESTDIR}${GCCLIBDIR}/specs + rm -rf ${DESTDIR}${GCCLIBDIR}/plugin + rm -rf ${DESTDIR}${GCCLIBDIR}/include + rm -rf ${DESTDIR}${GCCLIBDIR}/include-fixed + rm -rf ${DESTDIR}${GCCLIBDIR}/install-tools + rm -rf ${DESTDIR}${GCCLIBEXECDIR}/install-tools +} + +# Remove ghdl files in the current installation. +do_distclean_ghdl () +{ + check_root; + set -x + rm -f $PREFIX/bin/ghdl + rm -f $PREFIX/info/ghdl.info* + rm -f $GCCLIBEXECDIR/ghdl1 + rm -rf $GCCLIBDIR/vhdl +} + +# Build the source tar, and build the binaries. +do_dist_phase1 () +{ + do_sources; + do_compile; + do_gcc_install; + do_distclean_gcc; + do_tar_install; + do_tar_dist; + rm -rf ./$PREFIX +} + +# Install the binaries and create the binary tar. +do_dist_phase2 () +{ + check_root; + do_distclean_ghdl; + do_extract_tar_install; + echo "dist_phase2 success" +} + +# Create gtkwave patch +do_gtkwave_patch () +{ +# rm -rf gtkwave-patch + mkdir gtkwave-patch + diff -rc -x Makefile.in $GTKWAVE_BASE.orig $GTKWAVE_BASE | \ + sed -e "/^Only in/d" \ + > gtkwave-patch/gtkwave-$GTKWAVE_VERSION.diffs + cp ../grt/ghwlib.c ../grt/ghwlib.h $GTKWAVE_BASE/src/ghw.c gtkwave-patch + sed -e "s/VERSION/$GTKWAVE_VERSION/g" < README.gtkwave > gtkwave-patch/README + tar zcvf ../../website/gtkwave-patch.tgz gtkwave-patch + rm -rf gtkwave-patch +} + +# Update the index.html +# Update the doc +do_website () +{ + cp "$DOWNLOAD_HTML" "$DOWNLOAD_HTML".old + sed -e " +/SRC-HREF/ s/href=\".*\"/href=\"$tarfile.bz2\"/ +/BIN-HREF/ s/href=\".*\"/href=\"$bindirname.tar\"/ +/HISTORY/ a \\ + \\ + $VERSION\\ + `date +'%b %e %Y'`\\ + $GCCVERSION\\ + $tarfile.bz2\\ + \\ + $bindirname.tar\\ + +" < "$DOWNLOAD_HTML".old > "$DOWNLOAD_HTML" + dir=../../website/ghdl + echo "Updating $dir" + rm -rf $dir + makeinfo --html -o $dir ../../doc/ghdl.texi +} + +# Do ftp commands to upload +do_upload () +{ +if tty -s; then + echo -n "Please, enter password: " + stty -echo + read pass + stty echo + echo +else + echo "$0: upload must be done from a tty" + exit 1; +fi +ftp -n < tmp-dpathes.ads + echo "-- This file is created by Makefile" >> tmp-dpathes.ads + echo "package Default_Pathes is" >> tmp-dpathes.ads + echo " Prefix : constant String :=">> tmp-dpathes.ads + echo " \"$(PREFIX)/lib/ghdl/\";" >> tmp-dpathes.ads + echo "end Default_Pathes;" >> tmp-dpathes.ads + if test -r $@ && cmp tmp-dpathes.ads $@; then \ + echo "$@ unchanged"; \ + else \ + mv tmp-dpathes.ads $@; \ + fi + $(RM) tmp-dpathes.ads + +force: + +LIB93_DIR:=./lib/v93 +LIB87_DIR:=./lib/v87 +LIBSRC_DIR:=./libraries +ANALYZE=../../../ghdl_mcode -a --ieee=none +REL_DIR=../../.. +VHDLLIBS_COPY_OBJS:=no +CP=cp +LN=ln -s + +./lib: + mkdir $@ + +$(LIB93_DIR) $(LIB87_DIR): ./lib + mkdir $@ + + +####libraries Makefile.inc diff --git a/dist/mcode/README b/dist/mcode/README new file mode 100644 index 000000000..a10cd6efc --- /dev/null +++ b/dist/mcode/README @@ -0,0 +1,47 @@ +This is the README from the source distribution of GHDL. + +To get the binary distribution or more information, go to http://ghdl.free.fr + +Copyright: +********** +GHDL is copyright (c) 2002, 2003, 2004, 2005 Tristan Gingold. +See the GHDL manual for more details. + +This program 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 of the License, or +(at your option) any later version. + +This program 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 this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + + +Building GHDL from sources for Windows: +*************************************** + +Note: this was tested with Windows XP SP2 familly edition. + +Note: If you want to create the installer, GHDL should be built on a +FAT partition. NSIS rounds files date to be FAT compliant (seconds are always +even) and because GHDL stores dates, the files date must not be modified. + +Required: +* the Ada95 GNAT compiler (GNAT GPL 2005 is known to work). +* NSIS to create the installer. + +Unzip, +edit winbuild to use correct path for makensis, +run winbuild. + +The installer is in the windows directory. + +Send bugs and comments on http://gna.org/project/ghdl + +Tristan Gingold. diff --git a/dist/mcode/dist.sh b/dist/mcode/dist.sh new file mode 100755 index 000000000..cf24141de --- /dev/null +++ b/dist/mcode/dist.sh @@ -0,0 +1,506 @@ +#!/bin/sh + +# Script used to create tar balls. +# Copyright (C) 2002, 2003, 2004, 2005 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. + +# Building a distribution: +# * update the 'version' variable in ../../Makefile +# * Regenerate version.ads: make -f ../../Makefile version.ads +# * Check NEWS, README and INSTALL files. +# * Check version and copyright years in doc/ghdl.texi, ghdlmain.adb +# * Check GCCVERSION below. +# * Check lists of exported files in this file. +# * Create source tar and build binaries: ./dist.sh dist_phase1 +# * su root +# * Build binary tar: ./dist.sh dist_phase2 +# * Run the testsuites: GHDL=ghdl ./testsuite.sh +# * Update website/index.html (./dist.sh website helps, rename .new) +# * upload (./dist upload) +# * CVS commit, tag + cd image. +# * remove previous version in /usr/local + +## DO NOT MODIFY this file while it is running... + +set -e + +# GTKWave version. +GTKWAVE_VERSION=1.3.72 + +# GHDL version (extracted from version.ads) +VERSION=`sed -n -e 's/.*GHDL \([0-9.a-z]*\) (.*/\1/p' ../../version.ads` + +CWD=`pwd` + +distdir=ghdl-$VERSION +tarfile=$distdir.tar +zipfile=$distdir.zip + +PREFIX=/usr/local +bindirname=ghdl-$VERSION-i686-pc-linux +TARINSTALL=$DISTDIR/$bindirname.tar.bz2 +VHDLDIR=$distdir/vhdl +DOWNLOAD_HTML=../../website/download.html +DESTDIR=$CWD/ +UNSTRIPDIR=${distdir}-unstripped + +PATH=/usr/gnat/bin:$PATH + +do_clean () +{ + rm -rf $distdir + mkdir $distdir + mkdir $distdir/ghdl + mkdir $distdir/ghdldrv + mkdir $distdir/libraries + mkdir $distdir/libraries/std $distdir/libraries/ieee + mkdir $distdir/libraries/vital95 $distdir/libraries/vital2000 + mkdir $distdir/libraries/synopsys $distdir/libraries/mentor + mkdir $distdir/grt + mkdir $distdir/grt/config + mkdir $distdir/ortho + mkdir $distdir/windows +} + +# Build Makefile +do_Makefile () +{ + sed -e "/^####libraries Makefile.inc/r ../../libraries/Makefile.inc" \ + -e "/^####grt Makefile.inc/r ../grt/Makefile.inc" \ + < Makefile.in > $distdir/Makefile +} + +# Copy (or link) sources files into $distdir +do_files () +{ +. ../gcc/dist-common.sh + +ortho_mcode_files=" +binary_file-elf.adb +binary_file-elf.ads +binary_file-memory.adb +binary_file-memory.ads +binary_file.adb +binary_file.ads +disa_x86.adb +disa_x86.ads +disassemble.ads +dwarf.ads +elf32.adb +elf32.ads +elf64.ads +elf_common.adb +elf_common.ads +elf_arch32.ads +elf_arch.ads +hex_images.adb +hex_images.ads +memsegs.ads +memsegs_mmap.ads +memsegs_mmap.adb +memsegs_c.c +ortho_code-abi.ads +ortho_code-binary.adb +ortho_code-binary.ads +ortho_code-consts.adb +ortho_code-consts.ads +ortho_code-debug.adb +ortho_code-debug.ads +ortho_code-decls.adb +ortho_code-decls.ads +ortho_code-disps.adb +ortho_code-disps.ads +ortho_code-dwarf.adb +ortho_code-dwarf.ads +ortho_code-exprs.adb +ortho_code-exprs.ads +ortho_code-flags.ads +ortho_code-opts.adb +ortho_code-opts.ads +ortho_code-types.adb +ortho_code-types.ads +ortho_code-sysdeps.adb +ortho_code-sysdeps.ads +ortho_code-x86-emits.adb +ortho_code-x86-emits.ads +ortho_code-x86-insns.adb +ortho_code-x86-insns.ads +ortho_code-x86-abi.adb +ortho_code-x86-abi.ads +ortho_code-x86-flags.ads +ortho_code-x86.adb +ortho_code-x86.ads +ortho_code.ads +ortho_code_main.adb +ortho_ident.adb +ortho_ident.ads +ortho_mcode.adb +ortho_mcode.ads +ortho_nodes.ads +" + +windows_files=" +compile.bat +complib.bat +default_pathes.ads +ghdl.nsi +windows_default_path.adb +windows_default_path.ads +ghdlfilter.adb +ortho_code-sysdeps.adb +grt-modules.adb +" + +drv_files=" +ghdlcomp.ads +ghdlcomp.adb +foreigns.ads +foreigns.adb +ghdlrun.adb +ghdlrun.ads +ghdl_mcode.adb +" + +for i in $cfiles; do ln -sf $CWD/../../$i $distdir/ghdl/$i; done +for i in $tfiles; do ln -sf $CWD/../$i $distdir/ghdl/$i; done + +ln -sf $CWD/../../doc/ghdl.texi $distdir/ghdl.texi + +for i in $ortho_files; do ln -sf $CWD/../../ortho/$i $distdir/ortho/$i; done + +for i in $ortho_mcode_files; do + ln -sf $CWD/../../ortho/mcode/$i $distdir/ortho/$i +done + +for i in $ghdl_files $drv_files; do + ln -sf $CWD/../ghdldrv/$i $distdir/ghdldrv/$i +done + +for i in $libraries_files; do + ln -sf $CWD/../../libraries/$i $distdir/libraries/$i +done + +for i in $grt_files; do + ln -sf $CWD/../grt/$i $distdir/grt/$i +done + +for i in $grt_config_files; do + ln -sf $CWD/../grt/config/$i $distdir/grt/config/$i +done + +for i in $windows_files; do + ln -sf $CWD/windows/$i $distdir/windows/$i +done + echo "!define VERSION \"$VERSION\"" > $distdir/windows/version.nsi + + + ln -sf $CWD/winbuild.bat $distdir/winbuild.bat + +makeinfo --html --no-split -o $distdir/windows/ghdl.htm $CWD/../../doc/ghdl.texi +} + +do_sources_dir () +{ + \rm -rf $distdir + mkdir $distdir + do_clean + do_Makefile + do_files + ln -sf ../../../COPYING $distdir +} + +# Create the tar of sources. +do_tar () +{ + do_sources_dir + tar cvhf $tarfile $distdir + bzip2 -f $tarfile + rm -rf $distdir +} + +# Create the zip of sources. +do_zip () +{ + do_sources_dir + zip -r $zipfile $distdir + rm -rf $distdir +} + +# Extract the source, configure and make. +do_compile () +{ + set -x + + do_update_gcc_sources; + + rm -rf $GCCDISTOBJ + mkdir $GCCDISTOBJ + cd $GCCDISTOBJ + ../gcc-$GCCVERSION/configure --enable-languages=vhdl --prefix=$PREFIX + make CFLAGS="-O -g" + make -C gcc vhdl.info + cd $CWD +} + +check_root () +{ + if [ $UID -ne 0 ]; then + echo "$0: you must be root"; + exit 1; + fi +} + +# Do a make install +do_compile2 () +{ + set -x + cd $GCCDISTOBJ + # Check the info file is not empty. + if [ -s gcc/doc/ghdl.info ]; then + echo "info file found" + else + echo "Error: ghdl.info not found". + exit 1; + fi + mkdir -p $DESTDIR/usr/local || true + make DESTDIR=$DESTDIR install + cd $CWD + if [ -d $UNSTRIPDIR ]; then + rm -rf $UNSTRIPDIR + fi + mkdir $UNSTRIPDIR + cp ${DESTDIR}${GCCLIBEXECDIR}/ghdl1 ${DESTDIR}${PREFIX}/bin/ghdl $UNSTRIPDIR + chmod -w $UNSTRIPDIR/* + strip ${DESTDIR}${GCCLIBEXECDIR}/ghdl1 ${DESTDIR}${PREFIX}/bin/ghdl +} + +# Create the tar file from the current installation. +do_tar_install () +{ + tar -C $DESTDIR -jcvf $TARINSTALL \ + ./$PREFIX/bin/ghdl ./$PREFIX/info/ghdl.info \ + ./$GCCLIBDIR/vhdl \ + ./$GCCLIBEXECDIR/ghdl1 +} + +do_extract_tar_install () +{ + check_root; + cd / + tar jxvf $TARINSTALL + cd $CWD +} + +# Create the tar file to be distributed. +do_tar_dist () +{ + rm -rf $bindirname + mkdir $bindirname + sed -e "s/@TARFILE@/$dir.tar/" < INSTALL > $bindirname/INSTALL + ln ../../COPYING $bindirname + ln $TARINSTALL $bindirname + tar cvf $bindirname.tar $bindirname +} + +# Remove the non-ghdl files of gcc in the current installation. +do_distclean_gcc () +{ + set -x + rm -f ${DESTDIR}${PREFIX}/bin/cpp ${DESTDIR}${PREFIX}/bin/gcc + rm -f ${DESTDIR}${PREFIX}/bin/gccbug ${DESTDIR}${PREFIX}/bin/gcov + rm -f ${DESTDIR}${PREFIX}/bin/${MACHINE}-gcc* + rm -f ${DESTDIR}${PREFIX}/info/cpp.info* + rm -f ${DESTDIR}${PREFIX}/info/cppinternals.info* + rm -f ${DESTDIR}${PREFIX}/info/gcc.info* + rm -f ${DESTDIR}${PREFIX}/info/gccinstall.info* + rm -f ${DESTDIR}${PREFIX}/info/gccint.info* + rm -f ${DESTDIR}${PREFIX}/lib/*.a ${DESTDIR}${PREFIX}/lib/*.so* + rm -rf ${DESTDIR}${PREFIX}/share + rm -rf ${DESTDIR}${PREFIX}/man + rm -rf ${DESTDIR}${PREFIX}/include + rm -f ${DESTDIR}${GCCLIBEXECDIR}/cc1 ${DESTDIR}${GCCLIBEXECDIR}/collect2 + rm -f ${DESTDIR}${GCCLIBEXECDIR}/cpp0 ${DESTDIR}${GCCLIBEXECDIR}/tradcpp0 + rm -f ${DESTDIR}${GCCLIBDIR}/*.o ${DESTDIR}$GCCLIBDIR/*.a + rm -f ${DESTDIR}${GCCLIBDIR}/specs + rm -rf ${DESTDIR}${GCCLIBDIR}/include + rm -rf ${DESTDIR}${GCCLIBDIR}/install-tools + rm -rf ${DESTDIR}${GCCLIBEXECDIR}/install-tools +} + +# Remove ghdl files in the current installation. +do_distclean_ghdl () +{ + check_root; + set -x + rm -f $PREFIX/bin/ghdl + rm -f $PREFIX/info/ghdl.info* + rm -f $GCCLIBEXECDIR/ghdl1 + rm -rf $GCCLIBDIR/vhdl +} + +# Build the source tar, and build the binaries. +do_dist_phase1 () +{ + do_sources; + do_compile; + do_compile2; + do_distclean_gcc; + do_tar_install; + do_tar_dist; + rm -rf ./$PREFIX +} + +# Install the binaries and create the binary tar. +do_dist_phase2 () +{ + check_root; + do_distclean_ghdl; + do_extract_tar_install; + echo "dist_phase2 success" +} + +# Create gtkwave patch +do_gtkwave_patch () +{ +# rm -rf gtkwave-patch + mkdir gtkwave-patch + diff -rc -x Makefile.in $GTKWAVE_BASE.orig $GTKWAVE_BASE | \ + sed -e "/^Only in/d" \ + > gtkwave-patch/gtkwave-$GTKWAVE_VERSION.diffs + cp ../grt/ghwlib.c ../grt/ghwlib.h $GTKWAVE_BASE/src/ghw.c gtkwave-patch + sed -e "s/VERSION/$GTKWAVE_VERSION/g" < README.gtkwave > gtkwave-patch/README + tar zcvf ../../website/gtkwave-patch.tgz gtkwave-patch + rm -rf gtkwave-patch +} + +# Update the index.html +# Update the doc +do_website () +{ + sed -e " +/SRC-HREF/ s/href=\".*\"/href=\"$tarfile.bz2\"/ +/BIN-HREF/ s/href=\".*\"/href=\"$bindirname.tar\"/ +/HISTORY/ a \\ + \\ + $VERSION\\ + `date +'%b %e %Y'`\\ + $GCCVERSION\\ + $tarfile.bz2\\ + \\ + $bindirname.tar\\ + +" < $DOWNLOAD_HTML > "$DOWNLOAD_HTML".new + dir=../../website/ghdl + echo "Updating $dir" + rm -rf $dir + makeinfo --html -o $dir ../../doc/ghdl.texi +} + +# Do ftp commands to upload +do_upload () +{ +if tty -s; then + echo -n "Please, enter password: " + stty -echo + read pass + stty echo + echo +else + echo "$0: upload must be done from a tty" + exit 1; +fi +ftp -n < windows/version.nsi + +"c:\Program Files\NSIS\makensis" windows\ghdl.nsi +if errorlevel 1 goto end + +exit /b 0 + +:end +echo "Error during compilation" +exit /b 1 + diff --git a/dist/mcode/windows/compile.bat b/dist/mcode/windows/compile.bat new file mode 100644 index 000000000..c668ef0e2 --- /dev/null +++ b/dist/mcode/windows/compile.bat @@ -0,0 +1,24 @@ +mkdir build +cd build + +rem Do the compilation +set CFLAGS=-O -g +gcc -c %CFLAGS% ../../grt/grt-cbinding.c +gcc -c %CFLAGS% ../../grt/grt-cvpi.c +gcc -c %CFLAGS% ../../grt/config/clock.c +gcc -c %CFLAGS% ../../../ortho/mcode/memsegs_c.c +gcc -c %CFLAGS% -DWITH_GNAT_RUN_TIME ../../grt/config/win32.c +gnatmake %CFLAGS% -gnatn -aI../windows -aI../../.. -aI../.. -aI../../ghdldrv -aI../../../psl -aI../../grt -aI../../../ortho/mcode ghdl_mcode -aI../../../ortho -o ghdl.exe -largs grt-cbinding.o clock.o grt-cvpi.o memsegs_c.o win32.o -largs -Wl,--stack,8404992 + +if errorlevel 1 goto failed + +strip ghdl.exe + +cd .. +exit /b 0 + +:failed +echo "Compilation failed" +cd .. +exit /b 1 + diff --git a/dist/mcode/windows/complib.bat b/dist/mcode/windows/complib.bat new file mode 100644 index 000000000..88a43ce60 --- /dev/null +++ b/dist/mcode/windows/complib.bat @@ -0,0 +1,68 @@ +set GHDL=ghdl + +cd build +gnatmake -aI..\windows ghdlfilter +cd .. + +set REL=..\..\.. +set LIBSRC=%REL%\..\..\libraries +set STD_SRCS=textio textio_body +set IEEE_SRCS=std_logic_1164 std_logic_1164_body numeric_std numeric_std-body numeric_bit numeric_bit-body +set VITAL95_SRCS=vital_timing vital_timing_body vital_primitives vital_primitives_body +set VITAL2000_SRCS=timing_p timing_b prmtvs_p prmtvs_b memory_p memory_b + +set SYNOPSYS_SRCS=std_logic_arith std_logic_textio std_logic_unsigned std_logic_signed std_logic_misc std_logic_misc-body + +mkdir lib +cd lib + +mkdir v87 +cd v87 + +mkdir std +cd std +for %%F in (%STD_SRCS%) do %REL%\build\ghdlfilter -v87 < %LIBSRC%\std\%%F.vhdl > %%F.v87 && %REL%\build\%GHDL% -a --std=87 --bootstrap --work=std %%F.v87 +cd .. + +mkdir ieee +cd ieee +rem Base ieee +for %%F in (%IEEE_SRCS%) do %REL%\build\ghdlfilter -v87 < %LIBSRC%\ieee\%%F.vhdl > %%F.v87 && %REL%\build\%GHDL% -a --std=87 -P..\std --work=ieee %%F.v87 +rem Vital 95 +for %%F in (%VITAL95_SRCS%) do copy %LIBSRC%\vital95\%%F.vhdl %%F.vhd && %REL%\build\%GHDL% -a --std=87 -P..\std --work=ieee %%F.vhd +cd .. + +mkdir synopsys +cd synopsys +for %%F in (%IEEE_SRCS%) do %REL%\build\%GHDL% -a --std=87 -P..\std --work=ieee ..\ieee\%%F.v87 +for %%F in (%VITAL95_SRCS%) do %REL%\build\%GHDL% -a --std=87 -P..\std --work=ieee ..\ieee\%%F.vhd +for %%F in (%SYNOPSYS_SRCS%) do copy %LIBSRC%\synopsys\%%F.vhdl %%F.vhd && %REL%\build\%GHDL% -a --std=87 -P..\std --work=ieee %%F.vhd +cd .. + +cd .. +mkdir v93 +cd v93 + +mkdir std +cd std +for %%F in (%STD_SRCS%) do %REL%\build\ghdlfilter -v93 < %LIBSRC%\std\%%F.vhdl > %%F.v93 && %REL%\build\%GHDL% -a --std=93 --bootstrap --work=std %%F.v93 +cd .. + +mkdir ieee +cd ieee +echo Base ieee +for %%F in (%IEEE_SRCS%) do %REL%\build\ghdlfilter -v93 < %LIBSRC%\ieee\%%F.vhdl > %%F.v93 && %REL%\build\%GHDL% -a --std=93 -P..\std --work=ieee %%F.v93 +echo Vital 2000 +for %%F in (%VITAL2000_SRCS%) do copy %LIBSRC%\vital2000\%%F.vhdl %%F.vhd && %REL%\build\%GHDL% -a --std=93 -P..\std --work=ieee %%F.vhd +cd .. + +mkdir synopsys +cd synopsys +for %%F in (%IEEE_SRCS%) do %REL%\build\%GHDL% -a --std=93 -P..\std --work=ieee ..\ieee\%%F.v93 +for %%F in (%VITAL2000_SRCS%) do %REL%\build\%GHDL% -a --std=93 -P..\std --work=ieee ..\ieee\%%F.vhd +for %%F in (%SYNOPSYS_SRCS%) do %REL%\build\%GHDL% -a --std=93 -P..\std --work=ieee ..\..\v87\synopsys\%%F.vhd +cd .. + +cd .. + +cd .. diff --git a/dist/mcode/windows/default_pathes.ads b/dist/mcode/windows/default_pathes.ads new file mode 100644 index 000000000..51b350f4e --- /dev/null +++ b/dist/mcode/windows/default_pathes.ads @@ -0,0 +1,8 @@ +with Windows_Default_Path; +pragma Elaborate_All (Windows_Default_Path); + +package Default_Pathes is + Install_Prefix : constant String := + Windows_Default_Path.Get_Windows_Exec_Path; + Lib_Prefix : constant String := "lib"; +end Default_Pathes; diff --git a/dist/mcode/windows/ghdl.nsi b/dist/mcode/windows/ghdl.nsi new file mode 100644 index 000000000..aa4d559aa --- /dev/null +++ b/dist/mcode/windows/ghdl.nsi @@ -0,0 +1,455 @@ +; ghdl.nsi +; +; This script is based on example2.nsi. +; remember the directory, +; Check if administrator +; uninstall support +; TODO: +; * allow multiple version +; * command line installation +; * Allow user install + +;-------------------------------- +!include version.nsi +;-------------------------------- + +; The name of the installer +Name "Ghdl" + +; The file to write +OutFile "ghdl-installer-${VERSION}.exe" + +SetDateSave on + +; The default installation directory +InstallDir $PROGRAMFILES\Ghdl + +; Registry key to check for directory (so if you install again, it will +; overwrite the old one automatically) +InstallDirRegKey HKLM "Software\Ghdl" "Install_Dir" + +LicenseData ..\..\..\COPYING +; LicenseForceSelection + +;-------------------------------- + +; Pages + +Page license +Page components +Page directory +Page instfiles + +UninstPage uninstConfirm +UninstPage instfiles + +;-------------------------------- +Function .onInit + Call IsNT + pop $R0 + StrCmp $R0 1 nt_ok + MessageBox MB_OK|MB_ICONEXCLAMATION "You must use Windows NT (XP/2000/Me...)" + Quit + +nt_ok: + Call IsUserAdmin + Pop $R0 + StrCmp $R0 "true" Admin + MessageBox MB_OK|MB_ICONEXCLAMATION "You must have Admin rights" + Quit + +Admin: + + ;;; Check if already installed. + ReadRegStr $0 HKLM "Software\Ghdl" "Install_Dir" + IfErrors not_installed + ReadRegStr $0 HKLM "Software\Ghdl" "Version" + IfErrors unknown_prev_version + Goto known_version +unknown_prev_version: + StrCpy $0 "(unknown)" +known_version: + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "You already have GHDL version $0 installed. Deinstall ?" IDCANCEL install_abort IDOK deinstall +install_abort: + Abort "Installation aborted" +deinstall: + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" "UninstallString" + IfErrors deinstall_failed + + ; First version of the GHDL installer adds quotes + StrCpy $1 $0 1 + StrCmp $1 '"' 0 str_ok + StrCpy $1 $0 "" 1 + StrCpy $0 $1 -1 +str_ok: + + ; Read install dir + ReadRegStr $1 HKLM "Software\Ghdl" "Install_Dir" + IfErrors deinstall_failed + +; MessageBox MB_OK 'copy $0 to $TEMP' + + ClearErrors +; MessageBox MB_OK 'copy $0 to $TEMP' + CopyFiles $0 $TEMP + IfErrors deinstall_failed + ExecWait '"$TEMP\uninst-ghdl.exe" /S _?=$1' + IfErrors deinstall_failed + Delete "$TEMP\uninst-ghdl.exe" + Return +deinstall_failed: + Delete $TEMP\uninst-ghdl.exe + MessageBox MB_YESNO|MB_ICONSTOP "Can't deinstall GHDL: de-installer not found or failed. Continue installation ?" IDNO install_abort +not_installed: + Return +FunctionEnd + +;-------------------------------- + +; The stuff to install +Section "Ghdl Compiler (required)" + + SectionIn RO + + ; Set output path to the installation directory. + SetOutPath $INSTDIR\bin + File /oname=ghdl.exe ..\build\ghdl.exe + + SetOutPath $INSTDIR + File /oname=COPYING.txt ..\..\..\COPYING + + ; Write the installation path into the registry + WriteRegStr HKLM "Software\Ghdl" "Install_Dir" $INSTDIR + ; Write te version + WriteRegStr HKLM "Software\Ghdl" "Version" ${VERSION} + + ; Write the uninstall keys for Windows + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" "DisplayName" "Ghdl" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" "UninstallString" $INSTDIR\uninst-ghdl.exe + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" "NoRepair" 1 + WriteUninstaller $INSTDIR\uninst-ghdl.exe" + +SectionEnd + +Section "VHDL standard and ieee libraries" + SectionIn RO + SetOutPath $INSTDIR\lib\v87 + File /r ..\lib\v87\std ..\lib\v87\ieee + SetOutPath $INSTDIR\lib\v93 + File /r ..\lib\v93\std ..\lib\v93\ieee +SectionEnd + +Section "Synopsys libraries (Recommended)" + SetOutPath $INSTDIR\lib\v87 + File /r ..\lib\v87\synopsys + SetOutPath $INSTDIR\lib\v93 + File /r ..\lib\v93\synopsys +SectionEnd + +Section "Documentation (Recommended)" + SetOutPath $INSTDIR + File /oname=ghdl.htm ..\..\..\doc\ghdl.html +SectionEnd + +Section "Add in PATH (Recommended)" + WriteRegDWORD HKLM "Software\Ghdl" "PathSet" 1 + Push $INSTDIR\Bin + Call AddToPath +SectionEnd + +; Optional section (can be disabled by the user) +;Section "Start Menu Shortcuts" +; +; CreateDirectory "$SMPROGRAMS\Ghdl" +; CreateShortCut "$SMPROGRAMS\Ghdl\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 +; CreateShortCut "$SMPROGRAMS\Ghdl\Ghdl.lnk" "$INSTDIR\example2.nsi" "" "$INSTDIR\example2.nsi" 0 +; +;SectionEnd +; + +;-------------------------------- + +; Uninstaller + +Section "Uninstall" + + ReadRegDWORD $0 HKLM "Software\Ghdl" "PathSet" + StrCmp $0 "1" "" path_not_set + Push $INSTDIR\Bin + Call un.RemoveFromPath + +path_not_set: + + ; Remove registry keys + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghdl" + DeleteRegKey HKLM Software\Ghdl + + ; Remove files and uninstaller + Delete $INSTDIR\bin\ghdl.exe + Delete $INSTDIR\uninst-ghdl.exe + Delete $INSTDIR\COPYING.txt + RMDir $INSTDIR\bin + RMDir /r $INSTDIR\lib + + + ; Remove shortcuts, if any + ; Delete "$SMPROGRAMS\Ghdl\*.*" + + ; Remove directories used + ; RMDir "$SMPROGRAMS\Ghdl" + RMDir "$INSTDIR" + +SectionEnd + +;;;;;;;; Misc functions + +; Author: Lilla (lilla@earthlink.net) 2003-06-13 +; function IsUserAdmin uses plugin \NSIS\PlusgIns\UserInfo.dll +; This function is based upon code in \NSIS\Contrib\UserInfo\UserInfo.nsi +; This function was tested under NSIS 2 beta 4 (latest CVS as of this writing). +; +; Usage: +; Call IsUserAdmin +; Pop $R0 ; at this point $R0 is "true" or "false" +; +Function IsUserAdmin +Push $R0 +Push $R1 +Push $R2 + +ClearErrors +UserInfo::GetName +IfErrors Win9x +Pop $R1 +UserInfo::GetAccountType +Pop $R2 + +StrCmp $R2 "Admin" 0 Continue +; Observation: I get here when running Win98SE. (Lilla) +; The functions UserInfo.dll looks for are there on Win98 too, +; but just don't work. So UserInfo.dll, knowing that admin isn't required +; on Win98, returns admin anyway. (per kichik) +; MessageBox MB_OK 'User "$R1" is in the Administrators group' +StrCpy $R0 "true" +Goto Done + +Continue: +; You should still check for an empty string because the functions +; UserInfo.dll looks for may not be present on Windows 95. (per kichik) +StrCmp $R2 "" Win9x +StrCpy $R0 "false" +;MessageBox MB_OK 'User "$R1" is in the "$R2" group' +Goto Done + +Win9x: +; comment/message below is by UserInfo.nsi author: +; This one means you don't need to care about admin or +; not admin because Windows 9x doesn't either +;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!" +StrCpy $R0 "true" + +Done: +;MessageBox MB_OK 'User= "$R1" AccountType= "$R2" IsUserAdmin= "$R0"' + +Pop $R2 +Pop $R1 +Exch $R0 +FunctionEnd + + +!define ALL_USERS + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +; AddToPath - Adds the given dir to the search path. +; Input - head of the stack +; Note - Win9x systems requires reboot + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + + # don't add if the path doesn't exist + IfFileExists "$0\*.*" "" AddToPath_done + + ReadEnvStr $1 PATH + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + GetFullPathName /SHORT $3 $0 + Push "$1;" + Push "$3;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$3\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + + ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH" + StrCpy $2 $1 1 -1 # copy last char + StrCmp $2 ";" 0 +2 # if last char == ; + StrCpy $1 $1 -1 # remove last char + StrCmp $1 "" AddToPath_NTdoIt + StrCpy $0 "$1;$0" + AddToPath_NTdoIt: + WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $0 + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + AddToPath_done: + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +; RemoveFromPath - Remove a given dir from the path +; Input: head of the stack + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + IntFmt $6 "%c" 26 # DOS EOF + + ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH" + StrCpy $5 $1 1 -1 # copy last char + StrCmp $5 ";" +2 # if last char != ; + StrCpy $1 "$1;" # append ; + Push $1 + Push "$0;" + Call un.StrStr ; Find `$0;` in $1 + Pop $2 ; pos of our dir + StrCmp $2 "" unRemoveFromPath_done + ; else, it is in path + # $0 - path to add + # $1 - path var + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 # $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove + StrCpy $3 $5$6 + + StrCpy $5 $3 1 -1 # copy last char + StrCmp $5 ";" 0 +2 # if last char == ; + StrCpy $3 $3 -1 # remove last char + + WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $3 + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + unRemoveFromPath_done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +########################################### +# Utility Functions # +########################################### + +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +;!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + diff --git a/dist/mcode/windows/ghdlfilter.adb b/dist/mcode/windows/ghdlfilter.adb new file mode 100644 index 000000000..d37c2db23 --- /dev/null +++ b/dist/mcode/windows/ghdlfilter.adb @@ -0,0 +1,58 @@ +with Ada.Command_Line; use Ada.Command_Line; +with Ada.Text_IO; use Ada.Text_IO; + +procedure Ghdlfilter is + type Mode_Kind is (Mode_93, Mode_87); + Mode : Mode_Kind; + + Line : String (1 .. 128); + Len : Natural; + + Comment : Boolean; + Block_Comment : Boolean; +begin + if Argument_Count /= 1 then + Put_Line (Standard_Error, "usage: " & Command_Name & " -v93|-v87"); + return; + end if; + + if Argument (1) = "-v93" then + Mode := Mode_93; + elsif Argument (1) = "-v87" then + Mode := Mode_87; + else + Put_Line (Standard_Error, "bad mode"); + return; + end if; + + Block_Comment := False; + + loop + exit when End_Of_File; + Get_Line (Line, Len); + + Comment := Block_Comment; + + if Len > 5 then + if Mode = Mode_87 and Line (Len - 4 .. Len) = "--V93" then + Comment := True; + elsif Mode = Mode_93 and Line (Len - 4 .. Len) = "--V87" then + Comment := True; + end if; + end if; + if Len = 11 + and then Mode = Mode_87 + and then Line (1 .. 11) = "--START-V93" then + Block_Comment := True; + end if; + + if Len = 9 and then Line (1 .. 9) = "--END-V93" then + Block_Comment := False; + end if; + + if Comment then + Put ("-- "); + end if; + Put_Line (Line (1 .. Len)); + end loop; +end Ghdlfilter; diff --git a/dist/mcode/windows/ghdlversion.adb b/dist/mcode/windows/ghdlversion.adb new file mode 100755 index 000000000..d2f1c28be --- /dev/null +++ b/dist/mcode/windows/ghdlversion.adb @@ -0,0 +1,30 @@ +with Ada.Text_IO; use Ada.Text_IO; +with Ada.Strings.Fixed; use Ada.Strings.Fixed; + +procedure Ghdlversion is + Line : String (1 .. 128); + Len : Natural; + Pos : Natural; + E : Natural; +begin + loop + exit when End_Of_File; + Get_Line (Line, Len); + + -- Search GHDL + Pos := Index (Line (1 .. Len), "GHDL "); + if Pos /= 0 then + Pos := Pos + 5; + E := Pos; + while Line (E) in '0' .. '9' + or Line (E) in 'a' .. 'z' + or Line (E) = '.' + loop + exit when E = Len; + E := E + 1; + end loop; + Put_Line ("!define VERSION """ & Line (Pos .. E - 1) & """"); + return; + end if; + end loop; +end Ghdlversion; diff --git a/dist/mcode/windows/grt-modules.adb b/dist/mcode/windows/grt-modules.adb new file mode 100644 index 000000000..35b27c345 --- /dev/null +++ b/dist/mcode/windows/grt-modules.adb @@ -0,0 +1,37 @@ +-- GHDL Run Time (GRT) - Modules. +-- Copyright (C) 2005 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. +with System.Storage_Elements; -- Work around GNAT bug. +with Grt.Vcd; +with Grt.Vpi; +with Grt.Waves; +with Grt.Vital_Annotate; +with Grt.Disp_Tree; +with Grt.Disp_Rti; + +package body Grt.Modules is + procedure Register_Modules is + begin + -- List of modules to be registered. + Grt.Disp_Tree.Register; + Grt.Vcd.Register; + Grt.Waves.Register; + Grt.Vpi.Register; + Grt.Vital_Annotate.Register; + Grt.Disp_Rti.Register; + end Register_Modules; +end Grt.Modules; diff --git a/dist/mcode/windows/ortho_code-x86-flags.ads b/dist/mcode/windows/ortho_code-x86-flags.ads new file mode 100644 index 000000000..8915f3122 --- /dev/null +++ b/dist/mcode/windows/ortho_code-x86-flags.ads @@ -0,0 +1,2 @@ +with Ortho_Code.X86.Flags_Windows; +package Ortho_Code.X86.Flags renames Ortho_Code.X86.Flags_Windows; diff --git a/dist/mcode/windows/windows_default_path.adb b/dist/mcode/windows/windows_default_path.adb new file mode 100644 index 000000000..23aa2f6e0 --- /dev/null +++ b/dist/mcode/windows/windows_default_path.adb @@ -0,0 +1,45 @@ +with Interfaces.C; use Interfaces.C; +with System; use System; + +package body Windows_Default_Path is + + subtype DWORD is Interfaces.C.Unsigned_Long; + subtype LPWSTR is String; + subtype HINSTANCE is Address; + function GetModuleFileName (Inst : HINSTANCE; Buf : Address; Size : DWORD) + return DWORD; + pragma Import (Stdcall, GetModuleFileName, "GetModuleFileNameA"); + + function Get_Windows_Exec_Path return String + is + File : String (1 .. 256); + Size : DWORD; + P : Natural; + begin + -- Get exe file path. + Size := GetModuleFileName (Null_Address, File'Address, File'Length); + if Size = 0 or Size = File'Length then + return "{cannot find install path}\lib"; + end if; + + -- Remove Program file. + P := Natural (Size); + while P > 0 loop + exit when File (P) = '\'; + exit when File (P) = ':' and P = 2; + P := P - 1; + end loop; + if File (P) = '\' and P > 1 then + -- Remove directory + P := P - 1; + while P > 0 loop + exit when File (P) = '\'; + exit when File (P) = ':' and P = 2; + P := P - 1; + end loop; + end if; + + return File (1 .. P); + end Get_Windows_Exec_Path; +end Windows_Default_Path; + diff --git a/dist/mcode/windows/windows_default_path.ads b/dist/mcode/windows/windows_default_path.ads new file mode 100644 index 000000000..8e6303446 --- /dev/null +++ b/dist/mcode/windows/windows_default_path.ads @@ -0,0 +1,5 @@ +package Windows_Default_Path is + -- Get the default path from executable name. + -- This function is called during elaboration! + function Get_Windows_Exec_Path return String; +end Windows_Default_Path; -- cgit v1.2.3