public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Pinski <pinskia@gmail.com>
To: Jerry Zhang Jian <jerry.zhangjian@sifive.com>
Cc: binutils@sourceware.org, GDB Patches <gdb-patches@sourceware.org>
Subject: Re: [PATCH] download_prerequisites: New script port from GCC
Date: Mon, 28 Aug 2023 22:52:22 -0700	[thread overview]
Message-ID: <CA+=Sn1=3Nk3a4hpy6Uu6mO4FP+VFxRkAWTqNd88kf-os4D8HDw@mail.gmail.com> (raw)
In-Reply-To: <20230829054210.80928-2-jerry.zhangjian@sifive.com>

On Mon, Aug 28, 2023 at 10:48 PM Jerry Zhang Jian via Binutils
<binutils@sourceware.org> wrote:
>
> download_prerequisites: add this script from GCC contrib/ folder to help
> setting up the build dependencies for binutils

GMP/MFPR is not needed for building binutils but rather gdb. So I
added gdb-patches@ .
Releases of binutils will not include the gdb directory either.
I think this is a good idea though it would be good to have a script
which checks to make sure the 2 versions (in gcc git and gdb-binutils
git) are kept the same.

Thanks,
Andrew Pinski

>
> Signed-off-by: Jerry Zhang Jian <jerry.zhangjian@sifive.com>
> ---
>  contrib/download_prerequisites | 279 +++++++++++++++++++++++++++++++++
>  contrib/prerequisites.md5      |   4 +
>  contrib/prerequisites.sha512   |   4 +
>  3 files changed, 287 insertions(+)
>  create mode 100755 contrib/download_prerequisites
>  create mode 100644 contrib/prerequisites.md5
>  create mode 100644 contrib/prerequisites.sha512
>
> diff --git a/contrib/download_prerequisites b/contrib/download_prerequisites
> new file mode 100755
> index 00000000000..ed6c647fcfe
> --- /dev/null
> +++ b/contrib/download_prerequisites
> @@ -0,0 +1,279 @@
> +#! /bin/sh
> +#! -*- coding:utf-8; mode:shell-script; -*-
> +
> +# Download some prerequisites needed by GCC.
> +# Run this from the top level of the GCC source tree and the GCC build will do
> +# the right thing.  Run it with the `--help` option for more information.
> +#
> +# (C) 2010-2021 Free Software Foundation
> +#
> +# 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 3 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, see http://www.gnu.org/licenses/.
> +
> +program='download_prerequisites'
> +version='(unversioned)'
> +
> +# MAINTAINERS: If you update the package versions below, please
> +# remember to also update the files `contrib/prerequisites.sha512` and
> +# `contrib/prerequisites.md5` with the new checksums.
> +
> +gmp='gmp-6.2.1.tar.bz2'
> +mpfr='mpfr-4.1.0.tar.bz2'
> +mpc='mpc-1.2.1.tar.gz'
> +isl='isl-0.24.tar.bz2'
> +
> +base_url='http://gcc.gnu.org/pub/gcc/infrastructure/'
> +
> +echo_archives() {
> +    echo "${gmp}"
> +    echo "${mpfr}"
> +    echo "${mpc}"
> +    if [ ${graphite} -gt 0 ]; then echo "${isl}"; fi
> +}
> +
> +graphite=1
> +verify=1
> +force=0
> +OS=$(uname)
> +
> +if type wget > /dev/null ; then
> +  fetch='wget'
> +else
> +  fetch='curl -LO'
> +fi
> +chksum_extension='sha512'
> +directory='.'
> +
> +helptext="usage: ${program} [OPTION...]
> +
> +Downloads some prerequisites needed by GCC.  Run this from the top level of the
> +GCC source tree and the GCC build will do the right thing.
> +
> +The following options are available:
> +
> + --directory=DIR  download and unpack packages into DIR instead of '.'
> + --force          download again overwriting existing packages
> + --no-force       do not download existing packages again (default)
> + --isl            download ISL, needed for Graphite loop optimizations (default)
> + --graphite       same as --isl
> + --no-isl         don't download ISL
> + --no-graphite    same as --no-isl
> + --verify         verify package integrity after download (default)
> + --no-verify      don't verify package integrity
> + --sha512         use SHA512 checksum to verify package integrity (default)
> + --md5            use MD5 checksum to verify package integrity
> + --help           show this text and exit
> + --version        show version information and exit
> +"
> +
> +versiontext="${program} ${version}
> +Copyright (C) 2016-2023 Free Software Foundation, Inc.
> +This is free software; see the source for copying conditions.  There is NO
> +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
> +
> +die() {
> +    echo "error: $@" >&2
> +    exit 1
> +}
> +
> +for arg in "$@"
> +do
> +    case "${arg}" in
> +        --help)
> +            echo "${helptext}"
> +            exit
> +            ;;
> +        --version)
> +            echo "${versiontext}"
> +            exit
> +            ;;
> +    esac
> +done
> +unset arg
> +
> +# Emulate Linux's 'md5sum --check' on macOS
> +md5_check() {
> +  # Store the standard input: a line from contrib/prerequisites.md5:
> +  md5_checksum_line=$(cat -)
> +  # Grab the text before the first space
> +  md5_checksum_expected="${md5_checksum_line%% *}"
> +  # Grab the text after the first space
> +  file_to_check="${md5_checksum_line##* }"
> +  # Calculate the md5 checksum for the downloaded file
> +  md5_checksum_output=$(md5 -r "${file_to_check}")
> +  # Grab the text before the first space
> +  md5_checksum_detected="${md5_checksum_output%% *}"
> +  [ "${md5_checksum_expected}" = "${md5_checksum_detected}" ] \
> +    || die "Cannot verify integrity of possibly corrupted file ${file_to_check}"
> +  echo "${file_to_check}: OK"
> +}
> +
> +
> +argnext=
> +for arg in "$@"
> +do
> +    if [ "x${argnext}" = x ]
> +    then
> +        case "${arg}" in
> +            --directory)
> +                argnext='directory'
> +                ;;
> +            --directory=*)
> +                directory="${arg#--directory=}"
> +                ;;
> +            --force)
> +                force=1
> +                ;;
> +            --no-force)
> +                force=0
> +                ;;
> +            --isl|--graphite)
> +                graphite=1
> +                ;;
> +            --no-isl|--no-graphite)
> +                graphite=0
> +                ;;
> +            --verify)
> +                verify=1
> +                ;;
> +            --no-verify)
> +                verify=0
> +                ;;
> +            --sha512)
> +                chksum_extension='sha512'
> +                verify=1
> +                ;;
> +            --md5)
> +                chksum_extension='md5'
> +                verify=1
> +                ;;
> +            -*)
> +                die "unknown option: ${arg}"
> +                ;;
> +            *)
> +                die "too many arguments"
> +                ;;
> +        esac
> +    else
> +        case "${arg}" in
> +            -*)
> +                die "Missing argument for option --${argnext}"
> +                ;;
> +        esac
> +        case "${argnext}" in
> +            directory)
> +                directory="${arg}"
> +                ;;
> +            *)
> +                die "The impossible has happened"
> +                ;;
> +        esac
> +        argnext=
> +    fi
> +done
> +[ "x${argnext}" = x ] || die "Missing argument for option --${argnext}"
> +unset arg argnext
> +
> +case $chksum_extension in
> +  sha512)
> +    case $OS in
> +      "Darwin"|"FreeBSD"|"DragonFly"|"AIX")
> +        chksum='shasum -a 512 --check'
> +      ;;
> +      "OpenBSD")
> +        chksum='sha512 -c'
> +      ;;
> +      *)
> +        chksum='sha512sum -c'
> +      ;;
> +    esac
> +  ;;
> +  md5)
> +    case $OS in
> +      "Darwin")
> +        chksum='md5_check'
> +      ;;
> +      *)
> +        chksum='md5sum -c'
> +      ;;
> +    esac
> +    ;;
> +  *)
> +    die "Unkown checksum $chksum_extension"
> +  ;;
> +esac
> +
> +[ -e ./binutils ]                                                         \
> +    || die "You must run this script in the top-level Binutils source directory"
> +
> +[ -d "${directory}" ]                                                         \
> +    || die "No such directory: ${directory}"
> +
> +for ar in $(echo_archives)
> +do
> +    if [ ${force} -gt 0 ]; then rm -f "${directory}/${ar}"; fi
> +    [ -e "${directory}/${ar}" ]                                               \
> +        || ( cd "${directory}" && ${fetch} --no-verbose "${base_url}${ar}" )  \
> +        || die "Cannot download ${ar} from ${base_url}"
> +done
> +unset ar
> +
> +if [ ${verify} -gt 0 ]
> +then
> +    chksumfile="contrib/prerequisites.${chksum_extension}"
> +    [ -r "${chksumfile}" ] || die "No checksums available"
> +    for ar in $(echo_archives)
> +    do
> +        grep "${ar}" "${chksumfile}"                                          \
> +            | ( cd "${directory}" && ${chksum} )                              \
> +            || die "Cannot verify integrity of possibly corrupted file ${ar}"
> +    done
> +    unset chksumfile
> +fi
> +unset ar
> +
> +for ar in $(echo_archives)
> +do
> +    package="${ar%.tar*}"
> +    if [ ${force} -gt 0 ]; then rm -rf "${directory}/${package}"; fi
> +    case $ar in
> +    *.gz)
> +       uncompress='gzip -d'
> +       ;;
> +    *.bz2)
> +       uncompress='bzip2 -d'
> +       ;;
> +    *)
> +       uncompress='cat'
> +       ;;
> +    esac
> +    [ -e "${directory}/${package}" ]                                          \
> +        || ( cd "${directory}" && $uncompress <"${ar}" | tar -xf - )          \
> +        || die "Cannot extract package from ${ar}"
> +    unset package
> +done
> +unset ar
> +
> +for ar in $(echo_archives)
> +do
> +    target="${directory}/${ar%.tar*}/"
> +    linkname="${ar%-*}"
> +    if [ ${force} -gt 0 ]; then rm -f "${linkname}"; fi
> +    [ -e "${linkname}" ]                                                      \
> +        || ln -s "${target}" "${linkname}"                                    \
> +        || die "Cannot create symbolic link ${linkname} --> ${target}"
> +    unset target linkname
> +done
> +unset ar
> +
> +echo "All prerequisites downloaded successfully."
> diff --git a/contrib/prerequisites.md5 b/contrib/prerequisites.md5
> new file mode 100644
> index 00000000000..a20f986c2e0
> --- /dev/null
> +++ b/contrib/prerequisites.md5
> @@ -0,0 +1,4 @@
> +28971fc21cf028042d4897f02fd355ea  gmp-6.2.1.tar.bz2
> +44b892bc5a45bafb4294d134e13aad1d  mpfr-4.1.0.tar.bz2
> +9f16c976c25bb0f76b50be749cd7a3a8  mpc-1.2.1.tar.gz
> +dd2f7b78e118c25bd96134a52aae7f4d  isl-0.24.tar.bz2
> diff --git a/contrib/prerequisites.sha512 b/contrib/prerequisites.sha512
> new file mode 100644
> index 00000000000..89541b9ad4d
> --- /dev/null
> +++ b/contrib/prerequisites.sha512
> @@ -0,0 +1,4 @@
> +8904334a3bcc5c896ececabc75cda9dec642e401fb5397c4992c4fabea5e962c9ce8bd44e8e4233c34e55c8010cc28db0545f5f750cbdbb5f00af538dc763be9  gmp-6.2.1.tar.bz2
> +410208ee0d48474c1c10d3d4a59decd2dfa187064183b09358ec4c4666e34d74383128436b404123b831e585d81a9176b24c7ced9d913967c5fce35d4040a0b4  mpfr-4.1.0.tar.bz2
> +3279f813ab37f47fdcc800e4ac5f306417d07f539593ca715876e43e04896e1d5bceccfb288ef2908a3f24b760747d0dbd0392a24b9b341bc3e12082e5c836ee  mpc-1.2.1.tar.gz
> +aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95  isl-0.24.tar.bz2
> --
> 2.41.0
>

  reply	other threads:[~2023-08-29  5:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-29  5:42 Jerry Zhang Jian
2023-08-29  5:52 ` Andrew Pinski [this message]
2023-08-30  1:09   ` Jerry ZJ

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CA+=Sn1=3Nk3a4hpy6Uu6mO4FP+VFxRkAWTqNd88kf-os4D8HDw@mail.gmail.com' \
    --to=pinskia@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=gdb-patches@sourceware.org \
    --cc=jerry.zhangjian@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).