diff options
Diffstat (limited to 'dist/gcc/dist.sh')
-rwxr-xr-x | dist/gcc/dist.sh | 471 |
1 files changed, 471 insertions, 0 deletions
diff --git a/dist/gcc/dist.sh b/dist/gcc/dist.sh new file mode 100755 index 0000000..8632dc5 --- /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="<URL:http://gna.org/projects/ghdl>" --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 \\ + <tr>\\ + <td>$VERSION</td>\\ + <td>`date +'%b %e %Y'`</td>\\ + <td>$GCCVERSION</td>\\ + <td><a href=\"$tarfile.bz2\">$tarfile.bz2</a></td>\\ + <td><a href=\"$bindirname.tar\">\\ + $bindirname.tar</a></td>\\ + </tr> +" < "$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 <<EOF +open ftpperso.free.fr +user ghdl $pass +prompt +hash +bin +passive +put $tarfile.bz2 +put $bindirname.tar +put INSTALL +lcd ../../website +put NEWS +put index.html +put download.html +put features.html +put roadmap.html +put manual.html +put more.html +put links.html +put bug.html +put waveviewer.html +put gtkwave-patch.tgz +put favicon.ico +lcd ghdl +cd ghdl +mput \* +bye +EOF +} + +if [ $# -eq 0 ]; then + do_Makefile; +else + for i ; do + case $i in + Makefile|makefile) + do_Makefile ;; + files) + do_files ;; + sources) + do_sources ;; + compile) + do_compile;; + recompile) + do_recompile;; + update_gcc) + do_update_gcc_sources;; + gcc_install) + do_gcc_install;; + tar_install) + do_tar_install;; + tar_dist) + do_tar_dist;; + -v | --version | version) + echo $VERSION + exit 0 + ;; + website) + do_website;; + upload) + do_upload;; + distclean_gcc) + do_distclean_gcc;; + distclean_ghdl) + do_distclean_ghdl;; + dist_phase1) + do_dist_phase1;; + dist_phase2) + do_dist_phase2;; + gtkwave_patch) + do_gtkwave_patch;; + *) + echo "usage: $0 clean|Makefile|files|all" + exit 1 ;; + esac + done +fi |