From 2d29a23f0c62bebe57ae31c22f7e96d8506aa400 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 13 Nov 2007 18:14:55 +0100 Subject: Don't *include* the shell scripts, but *link* to them. This is for a reason: I manage them in a RCS and from time to time publish updates. They're not going to be maintained inside the wiki system, but will eventually be included in the Hurd's source code base. --- hurd/building/cross-compiling.mdwn | 524 +------------------------------------ 1 file changed, 5 insertions(+), 519 deletions(-) (limited to 'hurd') diff --git a/hurd/building/cross-compiling.mdwn b/hurd/building/cross-compiling.mdwn index 51508d20..5a5e3f60 100644 --- a/hurd/building/cross-compiling.mdwn +++ b/hurd/building/cross-compiling.mdwn @@ -18,6 +18,11 @@ Mach, GNU Hurd. [[Thomas_Schwinge|tschwinge]] has written a shell script for building a complete cross-build environment for GNU/Hurd systems. + +For now, find the shell scripts at + and +. + Read through it. Understand it. Then use it. /!\ Be made aware that -- while it is of course possible to build a working @@ -30,525 +35,6 @@ definitely needed for the glibc, Hurd and GCC source packages, as there are a bunch of outstanding patches that are needed for getting a functional build. -
-#!/bin/sh
-
-# Cross compile a GNU build environment.
-
-# Written by Thomas Schwinge .
-
-# This script is placed into the public domain; nevertheless, please feel free
-# to send any suggestions, improvements, etc. back to me.
-
-# The files are canonically found at
-#  and
-# .
-
-# Thanks to
-# * Thadeu Lima de Souza Cascardo for updating the instructions about getting
-#   the source code of GCC using the Subversion repositories.
-
-# Prerequisites:
-#
-# A build environment for the system you're running the script on is required,
-# i.e. a C compiler with the basic libraries and `make'.  You might also need
-# `flex' and `bison'.
-
-# Usage:
-#
-# Place `cross-gnu' and `cross-gnu-env' somewhere in `$PATH', e.g. in `~/bin/'.
-
-# Get the source code of the
-
-# * GNU Binutils, , `src/binutils'
-#
-#   $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src \
-#       co -r binutils-2_17-branch binutils
-#   $ mv src binutils-2_17-branch
-#
-#   Or fetch a tarball from .
-
-# * GNU Compiler Collection, , `src/gcc'
-#
-#   $ svn co svn://gcc.gnu.org/svn/gcc/branches/BRANCH gcc
-#   $ mv gcc BRANCH
-#
-#   BRANCH is one of `gcc-3_3-branch', `gcc-3_4-branch', `gcc-4_0-branch',
-#   `gcc-4_1-branch' or the tag of a released version like `gcc_3_4_3_release'.
-#   Or fetch a tarball from .
-
-# * GNU C Library, , `src/glibc'
-#
-#   $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/glibc \
-#       co -r glibc-2_3-branch glibc
-#   $ mv libc glibc-2_3-branch
-#
-#   Change `glibc-2_3-branch' to `glibc-2_5-branch' to get the glibc 2.5 branch
-#   or omit `-r glibc-2_3-branch' if you want to get the trunk, i.e. the glibc
-#   2.6 branch, but note that building both of them currently won't work
-#   without heavy patching.
-#
-#   Or fetch a tarball from .
-#
-#   If you want to use GCC 4.1 or newer, you'll also need to apply the
-#   following patch, for both glibc-2_3-branch and glibc-2_5-branch:
-#   .
-#
-#   If you use a GNU Make version newer than 3.80, you also need to apply the
-#   following patch to glibc-2_3-branch:
-#   .
-
-# * GNU Hurd, , `src/hurd'
-#
-#   $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co hurd
-
-# * GNU Mach (gnumach-1-branch), , `src/gnumach'
-#
-#   $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd \
-#       co -r gnumach-1-branch gnumach
-#   $ mv gnumach gnumach-1-branch
-
-# * GNU Mach Interface Generator, , `src/mig'
-#
-#   $ cvs -d:pserver:anoncvs@cvs.gnu.org:/cvsroot/hurd co mig
-
-# * GNU Debugger, , `src/gdb'
-#
-#   This is optional and will only be compiled if present.
-#
-#   $ cvs -d:pserver:anoncvs@sources.redhat.com:/cvs/src \
-#       co -r gdb_6_6-branch gdb
-#   $ mv src gdb_6_6-branch
-#
-#   Or fetch a tarball from .
-
-# Unpack the tarballs if you downloaded any.
-
-# Create a directory where the cross build shall take place and `cd' to that
-# directory.  Create a subdirectory `src' and create symbolic links for every
-# of the above packages: from `src/PACKAGE' to where you stored or unpacked it.
-# If you don't intend to build several cross compilers or use the source trees
-# otherwise, you can also directly store the source trees in `src/'.  The
-# source trees can be shared between multiple cross build trees since the
-# package's build systems are supposed not to modify the files in the source
-# trees.  Not all packages adhere to that, but they fail to do so only for
-# pre-processed documentation, etc., as far as I can tell.
-
-# Run
-# $ ROOT=. cross-gnu
-# ... to create the cross build environment in the current directory from the
-# sources in `src/'.
-
-# Later, run
-# $ ROOT=WHERE_THE_ROOT_OF_THE_CROSS_BUILD_TREE_IS; . cross-gnu-env
-# ... to set up `$PATH' (and some other environment variables; have a look at
-# cross-gnu-env), so that you can easily use e.g. the cross compiler running
-# `$TARGET-gcc'.
-
-# Notes:
-
-# You can re-run `cross-gnu' to rebuild the parts of the sources that have
-# changed since the last run.  This might save a lot of time and is especially
-# useful if you aren't working with unpacked tarballs, but on CVS's branches or
-# want to quickly get a new tool chain with patches you applied to the source
-# trees.
-# I would, however, _not_ recommend to use this technique when doing major
-# changes to the source trees, like switching from gcc-3.3 to gcc-3.4.
-
-# There are several parts marked with `TODO' in this file; feel free to have a
-# look at these issues and send the outcome back to me.
-
-
-# Set up the environment.
-
-. cross-gnu-env
-
-case $? in 0) :;; *) (exit "$?");; esac &&
-
-
-# Be verbose.
-
-set -x &&
-
-
-# Create directories.
-
-mkdir -p "$ROOT" &&
-cd "$ROOT" &&
-mkdir -p bin "$SYS_ROOT"/{include,lib} "$TARGET" &&
-ln -sfn "$SYS_ROOT"/{include,lib} "$TARGET"/ &&
-
-
-# Install the cross GNU Binutils.
-
-mkdir -p "$BINUTILS_SRC".obj &&
-cd "$BINUTILS_SRC".obj &&
-# We use `config.status''s existence as an indicator whether the package was
-# configured already.  (E.g. when running cross-gnu a second time to update the
-# tool chain.)
-if ./config.status --version > /dev/null 2>&1; then :; else
-  "$BINUTILS_SRC"/configure \
-    --target="$TARGET" \
-    --prefix="$ROOT" \
-    --with-sysroot="$SYS_ROOT" \
-    --disable-nls
-fi &&
-"$MAKE" \
-  all \
-  install &&
-
-
-# Install a minimal cross GCC to build a cross MIG and the GNU C Library.
-
-mkdir -p "$GCC_SRC".obj &&
-cd "$GCC_SRC".obj &&
-# Perhaps we already have a complete cross GCC?
-if "$TARGET"-gcc --version > /dev/null 2>&1; then :; else
-  if ./config.status > /dev/null 2>&1; then :; else
-    "$GCC_SRC"/configure \
-      --target="$TARGET" \
-      --prefix="$ROOT" \
-      --with-sysroot="$SYS_ROOT" \
-      --disable-nls \
-      --disable-shared \
-      --without-headers \
-      --with-newlib \
-      --enable-languages=c
-  fi &&
-
-# TODO: GCC 3.3 and GCC 3.4 need this for building libgcc.a.  Not needed for
-# GCC 4.0.
-  : > "$SYS_ROOT"/include/signal.h &&
-  mkdir -p "$SYS_ROOT"/include/sys &&
-  : > "$SYS_ROOT"/include/sys/ucontext.h &&
-
-  if "$MAKE" \
-      all-gcc \
-      install-gcc &&
-# TODO: Make glibc happy.  We can not yet build libgcc_eh, but glibc's build
-# system wants to link against that library.  A totally empty file is fine for
-# binutils-2.16, but not for binutils-2.15.
-# .
-      echo '/* Empty.  */' > "$SYS_ROOT"/lib/libgcc_eh.a
-  then
-    # Remove the bogus files if building the cross compiler succeesded.
-    rm config.status "$SYS_ROOT"/include/{signal.h,sys/ucontext.h}
-  else
-    # That indication file might already have been installed, but we do not yet
-    # have a complete, working cross compiler.
-    rm -f "$ROOT"/bin/"$TARGET"-gcc &&
-    exit 100
-  fi
-fi &&
-
-
-# Install GNU Mach's header files.
-
-mkdir -p "$GNUMACH_SRC".obj &&
-cd "$GNUMACH_SRC".obj &&
-if ./config.status --version > /dev/null 2>&1; then :; else
-  # `$TARGET-gcc' doesn't work yet (to satisfy the Autoconf checks), but isn't
-  # needed either.
-  CC=gcc \
-  "$GNUMACH_SRC"/configure \
-    --host="$TARGET" \
-    --prefix=
-fi &&
-if grep -q install-data "$GNUMACH_SRC"/Makefile.in; then
-  "$MAKE" \
-    DESTDIR="$SYS_ROOT" \
-    install-data
-else
-  # Old.
-  "$MAKE" \
-    prefix="$SYS_ROOT" \
-    no_deps=t \
-    install-headers
-fi &&
-
-
-# Install a cross GNU MIG.
-
-mkdir -p "$MIG_SRC".obj &&
-cd "$MIG_SRC".obj &&
-if ./config.status > /dev/null 2>&1; then :; else
-  "$MIG_SRC"/configure \
-    --target="$TARGET" \
-    --prefix="$ROOT"
-fi &&
-"$MAKE" \
-  all \
-  install &&
-
-
-# Install the GNU Hurd's header files.
-
-mkdir -p "$HURD_SRC".obj &&
-cd "$HURD_SRC".obj &&
-if ./config.status --version > /dev/null 2>&1; then :; else
-  # `$TARGET-gcc' doesn't work yet (to satisfy the Autoconf checks), but isn't
-  # needed either.
-  CC=gcc \
-  "$HURD_SRC"/configure \
-    --host="$TARGET" \
-    --prefix= \
-    --disable-profile
-fi &&
-"$MAKE" \
-  prefix="$SYS_ROOT" \
-  no_deps=t \
-  install-headers &&
-# Below, we will reconfigure for allowing to build the pthreads library.
-if grep -q '^CC = gcc$' config.make
-then rm config.status
-else :
-fi &&
-
-
-# Install the GNU C Library.
-
-# Do we already have the GNU C library installed?
-if test -h "$SYS_ROOT"/lib/ld.so; then :; else
-  mkdir -p "$GLIBC_SRC".obj &&
-  cd "$GLIBC_SRC".obj &&
-  if ./config.status > /dev/null 2>&1; then :; else
-    # `--build' has to be set to make sure that glibc is cross compiled.
-    # TODO: Unless overridden, the build system is forced to think that the
-    # linker doesn't support the `-z relro' flag, because there are unfixed
-    # bugs in glibc w.r.t. that flag.  Likewise for `--without-tls'.
-    "$GLIBC_SRC"/configure \
-      --without-cvs \
-      --build="`"$GLIBC_SRC"/scripts/config.guess`" \
-      --host="$TARGET" \
-      --prefix= \
-      --with-headers="$SYS_ROOT"/include \
-      --disable-profile \
-      ${CROSS_GNU_TLS---without-tls} \
-      ${CROSS_GNU_Z_RELRO-libc_cv_z_relro=no}
-  fi &&
-  if "$MAKE" \
-       install_root="$SYS_ROOT" \
-       all \
-       install
-  then
-    # TODO: Why doesn't `make install' do that?
-    ln -sf ld.so.1 "$SYS_ROOT"/lib/ld.so &&
-    if [ "$CROSS_GNU_REINSTALL_GLIBC" = n ]; then :; else
-      # Force re-linking files once libgcc_eh is available.  TODO: Is the
-      # following enough?
-      rm -f "$GLIBC_SRC".obj/config.status
-#      rm -rf "$GLIBC_SRC".obj
-    fi
-  else
-    # That indication file might already have been installed, but we do not yet
-    # have a complete, working installation of the GNU C library.
-    rm -f "$SYS_ROOT"/lib/ld.so
-    exit 100
-  fi
-fi &&
-
-
-# Install the GNU Hurd's pthreads library.
-
-cd "$HURD_SRC".obj &&
-if ./config.status --version > /dev/null 2>&1; then :; else
-  "$HURD_SRC"/configure \
-    --host="$TARGET" \
-    --prefix= \
-    --disable-profile
-fi &&
-"$MAKE" \
-  libpthread &&
-"$MAKE" \
-  prefix="$SYS_ROOT" \
-  libihash-install libpthread-install &&
-
-
-# Install a complete cross GCC.
-
-cd "$GCC_SRC".obj &&
-if ./config.status > /dev/null 2>&1; then :; else
-  # TODO: At the moment we only configure for creating a C compiler.
-  "$GCC_SRC"/configure \
-    --target="$TARGET" \
-    --prefix="$ROOT" \
-    --with-sysroot="$SYS_ROOT" \
-    --disable-nls \
-    --enable-languages=c
-fi &&
-# Remove the bogus libgcc_eh.
-rm -f "$SYS_ROOT"/lib/libgcc_eh.a &&
-"$MAKE" \
-  all \
-  install &&
-
-
-# Install the GNU C Library.
-
-mkdir -p "$GLIBC_SRC".obj &&
-cd "$GLIBC_SRC".obj &&
-if ./config.status > /dev/null 2>&1; then :; else
-  # `--build' has to be set to make sure that glibc is cross compiled.
-  # TODO: Unless overridden, the build system is forced to think that the
-  # linker doesn't support the `-z relro' flag, because there are unfixed
-  # bugs in glibc w.r.t. that flag.  Likewise for `--without-tls'.
-  "$GLIBC_SRC"/configure \
-    --without-cvs \
-    --build="`"$GLIBC_SRC"/scripts/config.guess`" \
-    --host="$TARGET" \
-    --prefix= \
-    --with-headers="$SYS_ROOT"/include \
-    --disable-profile \
-    ${CROSS_GNU_TLS---without-tls} \
-    ${CROSS_GNU_Z_RELRO-libc_cv_z_relro=no}
-fi &&
-"$MAKE" \
-  install_root="$SYS_ROOT" \
-  all \
-  install &&
-
-
-# Install a cross GDB, if requested.
-
-if test -d "$GDB_SRC"/; then
-  mkdir -p "$GDB_SRC".obj &&
-  cd "$GDB_SRC".obj &&
-  if ./config.status > /dev/null 2>&1; then :; else
-    "$GDB_SRC"/configure \
-      --target="$TARGET" \
-      --prefix="$ROOT" \
-      --with-sysroot="$SYS_ROOT" \
-      --disable-nls
-  fi &&
-  "$MAKE" \
-    all \
-    install &&
-
-
-  # If possible, install a cross compiled `gdbserver' to be ran on the TARGET
-  # system.
-
-  if grep -q '86-\*-gnu\*' "$GDB_SRC"/gdb/gdbserver/README; then
-    mkdir -p gdb/gdbserver &&
-    cd gdb/gdbserver &&
-    if ./config.status > /dev/null 2>&1; then :; else
-      "$GDB_SRC"/gdb/gdbserver/configure \
-        --host="$TARGET" \
-        --prefix="$SYS_ROOT"
-    fi &&
-    "$MAKE" \
-      all \
-      install
-  else :
-  fi
-fi &&
-
-
-# Success.
-
-echo "$0"': Everything should be in place now.'
-
- -## cross-gnu-env - -
-#!/bin/sh
-
-# Cross compile a GNU build environment.
-
-# Written by Thomas Schwinge .
-
-# This script is placed into the public domain; nevertheless, please feel free
-# to send any suggestions, improvements, etc. back to me.
-
-# The files are canonically found at
-#  and
-# .
-
-
-# Functions from Paul Jarc's prjlibs available at
-# .
-
-# sh/set.sh
-case $? in 0) :;; *) (exit "$?");; esac &&
-prj_set() {
-  eval "$1=\${2?}"
-}
-
-# sh/set_default.sh
-case $? in 0) :;; *) (exit "$?");; esac &&
-prj_set_default() {
-  : "${2?}" &&
-  eval "
-  if test \"\${$1+x}\" = x; then :; else
-    $1=\$2
-  fi"
-}
-
-# sh/unset.sh
-case $? in 0) :;; *) (exit "$?");; esac &&
-prj_unset() {
-  while test "$#" != 0; do
-    { eval "$1=" &&
-      unset "$1" &&
-      shift
-    } || return "$?"
-  done
-}
-
-# sh/x2.sh
-case $? in 0) :;; *) (exit "$?");; esac &&
-prj_x2() {
-  : "${2?}" &&
-  "$@" &&
-  export "$2"
-}
-
-case $? in 0) :;; *) (exit "$?");; esac &&
-
-
-# Create a clean environment.
-
-prj_x2 prj_set LC_ALL C &&
-prj_unset ASFLAGS CFLAGS CPPFLAGS CXXFLAGS LDFLAGS &&
-prj_unset MAKEFLAGS &&
-
-
-# Environment variables.
-
-# `$ROOT' defaults to `~/tmp/gnu'.
-prj_x2 prj_set_default ROOT ~/tmp/gnu &&
-# `$ROOT' must specify an absolute path.
-case $ROOT in
-  /*)
-    :;;
-  *)
-    ROOT=`cd "$ROOT" && pwd`;;
-esac &&
-
-prj_x2 prj_set_default SYS_ROOT "$ROOT"/sys_root &&
-
-prj_x2 prj_set_default TARGET i586-pc-gnu &&
-
-prj_x2 prj_set_default BINUTILS_SRC "$ROOT"/src/binutils &&
-prj_x2 prj_set_default GCC_SRC "$ROOT"/src/gcc &&
-prj_x2 prj_set_default GDB_SRC "$ROOT"/src/gdb &&
-prj_x2 prj_set_default GLIBC_SRC "$ROOT"/src/glibc &&
-prj_x2 prj_set_default GNUMACH_SRC "$ROOT"/src/gnumach &&
-prj_x2 prj_set_default HURD_SRC "$ROOT"/src/hurd &&
-prj_x2 prj_set_default MIG_SRC "$ROOT"/src/mig &&
-
-# TODO.  See cross-gnu.
-prj_x2 prj_set_default CROSS_GNU_REINSTALL_GLIBC y &&
-
-prj_x2 prj_set PATH "$ROOT"/bin:"$PATH" &&
-
-if gmake --version 2> /dev/null | grep -q GNU
-then prj_x2 prj_set MAKE gmake
-else prj_x2 prj_set MAKE make
-fi
-
- ## References * -- cgit v1.2.3