BuildingUnderCygwin

From RTEMSWiki

Jump to: navigation, search

Contents

Introduction

Installation procedure for the RTEMS toolchain and BSP installation from source for Cygwin. This is done for the CVS version of RTEMS at 2008-08-20. This page will be updated then RTEMS 4.9 is released. For Cygwin installation notes of RTEMS 4.6.99.3 look in the page history.

Cygwin Preparation

Install or update Cygwin with the latest installer. In addition to the default packages you need:

  • Devel
    • bison
    • cvs
    • flex
    • gcc-core
    • make
  • Libs
    • libgmp-devel
    • libmpfr-devel
  • Web
    • wget

Additional packages are selected automatically to satisfy dependencies. The arbitrary or multiple precision arithmetic libraries (libgmp and libmpfr) are required by newer GCCs to support exact evaluation of constant expressions.

RTEMS 4.9 is currently only available through the CVS. To build the CVS version of RTEMS, you need at least Autoconf 2.62 and Automake 1.10.1. These versions are currently not available via the installer, so they will be installed from source.

Building the GCC from source is a resource intensive procedure. The current Cygwin system may encounter the problem that it cannot create new processes. For this topic see also:

You can avoid trouble if you run Cygwin in a plain Windows installation within a virtual environment like Virtual Box.

Installation Steps

The complete installation (including download or check out of sources, extraction of archive files, patching, build configuration, make) will be done via three shell scripts:

  • config.sh
  • download.sh
  • build.sh

They follow the instructions in Getting Started with RTEMS.

Configuration Script [config.sh]

This script provides parameters and helper functions for the download and build scripts.

#!/bin/bash

# Package versions
version_rtems="4.9"
version_binutils="2.18"
version_gcc="4.3.1"
version_newlib="1.16.0"
version_autoconf="2.62"
version_automake="1.10.1"

# Patch versions
version_patch_gcc="20080628"
version_patch_binutils="20080211"
version_patch_newlib="20080430"

# Download URLs
url_download_gnu="ftp://ftp.gnu.org/gnu"
url_download_rtems="ftp://ftp.rtems.com/pub/rtems/SOURCES/$version_rtems"

# Directories
dir_root="/tmp/rtems"
dir_archive="$dir_root/archive"
dir_tools="$dir_root/tools"
dir_rtems="rtems-cvs"
dir_install="/opt/rtems-$version_rtems"
dir_working="$PWD"

# Configuration
config_target="powerpc"
config_rtems=("--enable-posix" "--enable-itron" "--enable-cxx" "--enable-multiprocessing" "--enable-tests=samples" "--enable-rtemsbsp=psim")

# Helper functions
function print_headline {
	echo "==============================================================================="
	echo "$1"
}

function print_done {
	echo "==============================================================================="
}

function die {
	ret="$?"
	echo "FAILED!"
	exit "$ret"
}

Download Script [download.sh]

This script downloads all required archive files and checks out the RTEMS sources from the CVS repository.

#!/bin/bash

source "config.sh"

print_headline "Downloading archive and patch files"
mkdir -p "$dir_archive" || die
cd "$dir_archive" || die
wget -c "$url_download_gnu/autoconf/autoconf-$version_autoconf.tar.bz2" || die
wget -c "$url_download_gnu/automake/automake-$version_automake.tar.bz2" || die
wget -c "$url_download_rtems/binutils-$version_binutils.tar.bz2" || die
wget -c "$url_download_rtems/binutils-$version_binutils-rtems$version_rtems-$version_patch_binutils.diff" || die
wget -c "$url_download_rtems/gcc-core-$version_gcc.tar.bz2" || die
wget -c "$url_download_rtems/gcc-core-$version_gcc-rtems$version_rtems-$version_patch_gcc.diff" || die
wget -c "$url_download_rtems/gcc-g++-$version_gcc.tar.bz2" || die
wget -c "$url_download_rtems/newlib-$version_newlib.tar.gz" || die
wget -c "$url_download_rtems/newlib-$version_newlib-rtems$version_rtems-$version_patch_newlib.diff" || die
print_done

print_headline "Checking out RTEMS CVS"
cd "$dir_root" || die
rm -rfv "$dir_rtems" || die
cvs -d :pserver:anoncvs@www.rtems.com:/usr1/CVS -z 9 co -d "$dir_rtems" -D 2008-08-20 rtems || die
print_done

Build Script [build.sh]

This script removes the previous installation and build directories. All archive files are extracted and patched again. The Binutils, GCC and a RTEMS BSP will be configured and built.

#!/bin/bash

source "config.sh"

print_headline "Checking that Cygwin is using UNIX line endings"
mount | grep textmode && die
print_done

print_headline "Removing old files"
rm -rfv "$dir_tools" || die
rm -rfv "$dir_install" || die
print_done

mkdir -p "$dir_tools" || die
cd "$dir_tools" || die

for i in "$dir_archive"/*.tar.gz ; do
	print_headline "Extracting archive $i"
	tar xzf "$i" || die
	print_done
done
for i in "$dir_archive"/*.tar.bz2 ; do
	print_headline "Extracting archive $i"
	tar xjf "$i" || die
	print_done
done

print_headline "Patching Binutils"
cd "$dir_tools/binutils-$version_binutils" || die
patch -p1 < "$dir_archive/binutils-$version_binutils-rtems$version_rtems-$version_patch_binutils.diff" || die
print_done

print_headline "Patching GCC"
cd "$dir_tools/gcc-$version_gcc" || die
patch -p1 < "$dir_archive/gcc-core-$version_gcc-rtems$version_rtems-$version_patch_gcc.diff" || die
print_done

print_headline "Patching Newlib"
cd "$dir_tools/newlib-$version_newlib" || die
patch -p1 < "$dir_archive/newlib-$version_newlib-rtems$version_rtems-$version_patch_newlib.diff" || die
print_done

print_headline "Checking patches"
find "$dir_tools" -name "*.rej" -print || die
print_done

print_headline "Configuring Binutils"
mkdir -p "$dir_tools/b-binutils" || die
cd "$dir_tools/b-binutils" || die
"$dir_tools/binutils-$version_binutils/configure" \
	"--target=$config_target-rtems$version_rtems" \
	"--prefix=$dir_install" || die
print_done

print_headline "Making all for Binutils"
make all || die
print_done

print_headline "Making info for Binutils"
make info || die
print_done

print_headline "Making install for Binutils"
make install || die
print_done
 
print_headline "Adding RTEMS binary directory to PATH"
export PATH="/opt/rtems-$version_rtems/bin:$PATH"
print_done

print_headline "Making symbolic link for Newlib in GCC source directory"
cd "$dir_tools/gcc-$version_gcc" || die
ln -sf "../newlib-$version_newlib/newlib" . || die
print_done

print_headline "Configuring GCC"
mkdir -p "$dir_tools/b-gcc" || die
cd "$dir_tools/b-gcc" || die
"$dir_tools/gcc-$version_gcc/configure" \
	"--prefix=$dir_install" \
	"--target=$config_target-rtems$version_rtems" \
	--verbose \
	--with-gnu-as \
	--with-gnu-ld \
	--with-newlib \
	--enable-threads \
	--enable-languages=c,c++ || die
print_done

print_headline "Making all for GCC"
make all || die
print_done

print_headline "Making info for GCC"
make info || die
print_done

print_headline "Making install for GCC"
make install || die
print_done

print_headline "Configuring and making Autoconf"
mkdir -p "$dir_tools/b-autoconf" || die
cd "$dir_tools/b-autoconf" || die
"$dir_tools/autoconf-$version_autoconf/configure" \
	"--prefix=$dir_install" || die
make all || die
make info || die
make install || die
print_done

print_headline "Configuring and making Autoconf"
mkdir -p "$dir_tools/b-automake" || die
cd "$dir_tools/b-automake" || die
"$dir_tools/automake-$version_automake/configure" \
	"--prefix=$dir_install" || die
make all || die
make info || die
make install || die
print_done

print_headline "Bootstraping RTEMS"
cd "$dir_root/$dir_rtems" || die
./bootstrap -p || die
./bootstrap || die
print_done

print_headline "Configuring RTEMS"
mkdir -p "$dir_tools/b-rtems" || die
cd "$dir_tools/b-rtems" || die
"$dir_root/$dir_rtems/configure"  \
	"--target=$config_target-rtems$version_rtems" \
	"--prefix=$dir_install" \
	"${config_rtems[@]}" || die
print_done

print_headline "Making RTEMS"
make all || die
make install || die
print_done
Personal tools