Mercurial > hg > CbC > CbC_gcc
view contrib/gcc_build @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | a06113de4d67 |
children |
line wrap: on
line source
#! /bin/sh ######################################################################## # # File: gcc_build # Author: Mark Mitchell # Date: 2000-07-10 # # Adapted to Subversion by Ben Elliston <bje@au.ibm.com>, 2005-07-14. # # Contents: # Script to automatically download and build GCC. # # Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation. # # This file is part of GCC. # # GCC 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, or (at your option) # any later version. # # GCC 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, 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # ######################################################################## ######################################################################## # Notes ######################################################################## # You can set the following variables in the environment. They # have no corresponding command-line options because they should # only be needed infrequently: # # MAKE The path to `make'. ######################################################################## # Functions ######################################################################## # Issue the error message given by $1 and exit with a non-zero # exit code. error() { echo "gcc_build: error: $1" exit 1 } # Issue a usage message explaining how to use this script. usage() { cat <<EOF gcc_build [-c configure_options] [-d destination_directory] [-m make_boot_options] [-o objdir] [-b branch_name] [-u username] [-p protocol] [-t tarfile] [-x make_check_options] [bootstrap] [build] [checkout] [configure] [export] [install] [test] [update] EOF exit 1 } # Change to the directory given by $1. changedir() { cd $1 || \ error "Could not change directory to $1" } # Checkout a fresh copy of the GCC build tree. checkout_gcc() { # If the destination already exists, don't risk destroying it. test -e ${DESTINATION} && \ error "${DESTINATION} already exists" # Checkout the tree test -n "${SVN_USERNAME}" && SVN_USERNAME="${SVN_USERNAME}@" SVNROOT="${SVN_PROTOCOL}://${SVN_USERNAME}${SVN_SERVER}${SVN_REPOSITORY}${SVN_BRANCH}" $GCC_SVN co $SVNROOT ${DESTINATION} || \ error "Could not check out GCC" } # Update GCC. update_gcc() { # If the destination does not already exist, complain. test -d ${DESTINATION} || \ error "${DESTINATION} does not exist" # Enter the destination directory. changedir ${DESTINATION} # Update the tree ./contrib/gcc_update || \ error "Could not update GCC" } # Configure for a build of GCC. configure_gcc() { # Go to the source directory. changedir ${DESTINATION} # Remove the object directory. rm -rf ${OBJDIR} # Create it again. mkdir ${OBJDIR} || \ error "Could not create ${OBJDIR}" # Enter it. changedir ${OBJDIR} # Configure the tree. echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}" eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \ error "Could not configure the compiler" } # Bootstrap GCC. Assume configuration has already occurred. bootstrap_gcc() { # Go to the source directory. changedir ${DESTINATION} # Go to the object directory. changedir ${OBJDIR} # Bootstrap the compiler echo "Building: ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap" eval ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap || \ error "Could not bootstrap the compiler" } # Test GCC. test_gcc() { # Go to the source directory. changedir ${DESTINATION} # Go to the object directory. changedir ${OBJDIR} echo "Running tests... This will take a while." eval \${MAKE} -k ${MAKE_CHECK_OPTIONS} check ${DESTINATION}/contrib/test_summary } # Export the GCC source tree. export_gcc() { # Go to the source directory. changedir ${DESTINATION} # Go up one level. changedir .. # Build a tarball of the source directory. tar czf ${TARFILE} \ --exclude=${OBJDIR} \ --exclude=.svn \ --exclude='.#*' \ --exclude='*~' \ `basename ${DESTINATION}` } # Install GCC. install_gcc() { # Go to the source directory. changedir ${DESTINATION} # Go to the object directory. changedir ${OBJDIR} ${MAKE} install || error "Installation failed" } ######################################################################## # Initialization ######################################################################## # SVN command GCC_SVN=${GCC_SVN-${SVN-svn}} # The SVN server containing the GCC repository. SVN_SERVER="gcc.gnu.org" # The path to the repository on that server. SVN_REPOSITORY="/svn/gcc/" # The branch to check out from that server. # Defaults to trunk if no branch is defined with -b. SVN_BRANCH="" # The SVN protocol to use. SVN_PROTOCOL="svn" # The username to use when connecting to the server. # An empty string means anonymous. SVN_USERNAME="" # The directory where the checked out GCC will be placed. DESTINATION="${HOME}/dev/gcc" # The relative path from the top of the source tree to the # object directory. OBJDIR="objdir" # The file where the tarred up sources will be placed. TARFILE="${HOME}/dev/gcc.tgz" # Options to pass to configure. CONFIGURE_OPTIONS= # The `make' program. MAKE=${MAKE:-make} # Options to pass to "make bootstrap". MAKE_BOOTSTRAP_OPTIONS= # Options to pass to "make check". MAKE_CHECK_OPTIONS= # Modes of operation BOOTSTRAP=0 CHECKOUT=0 CONFIGURE=0 EXPORT=0 INSTALL=0 TEST=0 UPDATE=0 ######################################################################## # Main Program ######################################################################## # Issue usage if no parameters are given. test $# -eq 0 && usage # Parse the options. while getopts "c:d:m:o:p:t:b:u:x:" ARG; do case $ARG in c) CONFIGURE_OPTIONS="${OPTARG}";; d) DESTINATION="${OPTARG}";; m) MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";; o) OBJDIR="${OPTARG}";; p) SVN_PROTOCOL="${OPTARG}";; t) TARFILE="${OPTARG}";; x) MAKE_CHECK_OPTIONS="${OPTARG}";; b) SVN_BRANCH="${OPTARG}";; u) SVN_USERNAME="${OPTARG}";; \?) usage;; esac done shift `expr ${OPTIND} - 1` # Handle the major modes. while [ $# -ne 0 ]; do case $1 in bootstrap) BOOTSTRAP=1;; build) CONFIGURE=1; BOOTSTRAP=1;; checkout) CHECKOUT=1;; configure) CONFIGURE=1;; export) EXPORT=1;; install) INSTALL=1;; test) TEST=1;; update) UPDATE=1;; *) usage;; esac shift done # Check the arguments for sanity. if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then error "Cannot checkout and update simultaneously" fi if [ ${CHECKOUT} -eq 0 ] && test -n "${SVN_BRANCH}"; then error "Branch argument only makes sense when doing a checkout" fi # Validate the branch name. if test -n "${SVN_BRANCH}"; then SVN_BRANCH="branches/${SVN_BRANCH}"; else SVN_BRANCH="trunk"; fi # Checkout the tree. if [ ${CHECKOUT} -ne 0 ]; then checkout_gcc elif [ ${UPDATE} -ne 0 ]; then update_gcc fi # Configure to build the tree. if [ ${CONFIGURE} -ne 0 ]; then configure_gcc fi # Bootstrap the compiler. if [ ${BOOTSTRAP} -ne 0 ]; then bootstrap_gcc fi # Test the compiler if [ ${TEST} -ne 0 ]; then test_gcc fi # Install the compiler. if [ ${INSTALL} -ne 0 ]; then install_gcc fi # Export the sources if [ ${EXPORT} -ne 0 ]; then export_gcc fi