Bare BSP patch from Chris Johns <cjohns@plessey.com.au>. He also

sent an example bare bsp but we have not decided how to integrate it yet.
This commit is contained in:
Joel Sherrill
1998-06-27 20:01:28 +00:00
parent 5d18fb057a
commit cf65c40819
5 changed files with 342 additions and 47 deletions

View File

@@ -24,6 +24,8 @@ RTEMS-specific option are supported:
--disable-tests --disable-tests
--disable-ka9q --disable-ka9q
--enable-cxx --enable-cxx
--enable-bare-cpu-model=<MODEL>
--enable-bare-cpu-cflags=<FLAGS>
--enable-gcc28 (also use enable-libcdir when disabled) --enable-gcc28 (also use enable-libcdir when disabled)
--enable-gmake-print-directory --enable-gmake-print-directory
--enable-libcdir=<DIRECTORY> (do not use if gcc 2.8 is enabled) --enable-libcdir=<DIRECTORY> (do not use if gcc 2.8 is enabled)
@@ -57,8 +59,8 @@ the --enable-gcc28 option may be used to enable this feature.
You should use the --enable-gcc28 option when using either the You should use the --enable-gcc28 option when using either the
egcs source tree, testgcc snapshots, or gcc 2.8.0 or newer. egcs source tree, testgcc snapshots, or gcc 2.8.0 or newer.
By default, all bsps for a target are built. There are two ways of By default, all bsps for a target are built. The bare BSP is not built
changing this: unless directlty specified. There are two ways of changing this:
+ use the --enable-rtemsbsp otion which will set the specified + use the --enable-rtemsbsp otion which will set the specified
bsps as the default bsps, or bsps as the default bsps, or
@@ -80,6 +82,7 @@ architecture. The following targets are supported:
no_cpu-rtems no_cpu-rtems
powerpc-rtems powerpc-rtems
sparc-rtems sparc-rtems
bare see notes
The cross-compiler is set to $(target)-gcc by default. This can be The cross-compiler is set to $(target)-gcc by default. This can be
overriden by: overriden by:
@@ -142,6 +145,16 @@ i386-go32-rtems:
cp libc.a INSTALL_POINT/lib/gcc-lib/i386-go32-rtems/2.7.2/libcgo32.a cp libc.a INSTALL_POINT/lib/gcc-lib/i386-go32-rtems/2.7.2/libcgo32.a
cp libc_p.a INSTALL_POINT/lib/gcc-lib/i386-go32-rtems/2.7.2/libcgo32_p.a cp libc_p.a INSTALL_POINT/lib/gcc-lib/i386-go32-rtems/2.7.2/libcgo32_p.a
bare:
1. See the README in the bare bsp source directory. This should
contain all info you need.
2. The bare bsp source contains a script to show how to build it.
3. The configure flags must be used to get the bare bsp to work.
The --enable-bare-cpu-model and --enable-bare-cpu-cflags are the
only pieces of information. The module is usually a gcc module
such as m68302 or mcpu32. The flags are passed directly to gcc.
Use "" if more than one option is specified.
3. To use the installed RTEMS library 3. To use the installed RTEMS library
===================================== =====================================
@@ -177,6 +190,7 @@ no_cpu : no_bsp
mips64orion : p4600 p4650 (p4000 port with either R4600 or R4650) mips64orion : p4600 p4650 (p4000 port with either R4600 or R4650)
powerpc : papyrus powerpc : papyrus
sparc : erc32 sparc : erc32
any : bare
5. Makefile structure 5. Makefile structure
===================== =====================

View File

@@ -55,4 +55,5 @@ This is the list of outstanding problems in this release.
+ warn/refuse to configure when --enable-libcdir and + warn/refuse to configure when --enable-libcdir and
--enable-gcc28 are given. --enable-gcc28 are given.
+ force --enable-libcdir when --disable-gcc28 is given + force --enable-libcdir when --disable-gcc28 is given
+ Check for bare bsp getting CPU model set.

View File

@@ -13,6 +13,8 @@
# #
# #
# Overview
# ~~~~~~~~
# This board support package is not a board support package at all, but # This board support package is not a board support package at all, but
# a means to build the RTEMS kernel without using a specific BSP. # a means to build the RTEMS kernel without using a specific BSP.
# #
@@ -37,49 +39,79 @@
# #
# I fit all the above. # I fit all the above.
# #
# Issues
# ~~~~~~
# I do not consider the bare BSP as a starting point for RTEMS. The
# BSP code integrated into the RTEMS build tree has the advantage of
# building all the test and sample code. The sample and test code is
# important for validatation of your tools, and getting your BSP
# working correctly.
#
# Once you gain experience with RTEM and your application matures the
# need to break the BSP code out from the kernel becomes important. It
# is at this point in time that the bare BSP becomes useful.
#
# Once free you are able to upgrade without the worry of makefile or
# build tree changes which can break your BSP.
#
# How To Configure
# ~~~~~~~~~~~~~~~~
# RTEMS requires you to select a BSP inorder to build the kernel.
# If you take a close look at a BSP which is closest to your
# needs you will find somewhere the CPU model and CPU compile
# flags are specified. This is the only piece of information
# required by the kernel inorder for it to build.
#
# This highlights the clean design of the kernel and its
# independence from the particulars of target hardware.
#
# The CPU model is the RTEMS model and usually tries to match with
# the GCC model. There are variations on some processors. If you are
# unsure please ask on the RTEMS list. Someone will know (I hope).
#
# The CPU flags allow you to select specific operating modes for
# GCC. For example the PowerPC has specific flags to control various
# cache resouces. Another example is the 68000 family of embedded
# processor do not have FPU hardware and require software emulation.
#
# An example configuration command line is:
#
# ../rtems-4.0/configure --target=m68k-rtems \
# --prefix=/ods/egcs/test \
# --enable-cxx \
# --enable-gmake-print-directory \
# --disable-tests \
# --disable-posix \
# --enable-ka9q \
# --enable-bare-cpu-cflags=-mcpu32 \
# --enable-bare-cpu-model=mcpu32 \
# --enable-rtemsbsp=bare
#
# Building RTEMS
# ~~~~~~~~~~~~~~
# You are required to do nothing special here. Just follow the documented
# steps. The samples are built but no linking occurs. The link command
# is stubbed out to produce a Unix shell script.
#
# After installation you will find a directory called 'bare'. The nature
# of the RTEMS build system means the bare BSP will only install into the
# the bare directory under the specifed configuration prefix.
#
# I therefore suggest you move the directory to another name. This allows
# you to make and install another bare BSP for a different variant of
# CPU without over writing the last installed variant.
#
# I have provided a script file I use to configure and build RTEMS
# from the arcihve. Take a copy and use it if you find it useful.
#
# Creating an Application.
# ~~~~~~~~~~~~~~~~~~~~~~~~
# This is something which is usually specific to your local environment.
# The bare BSP does not lock you into any specific makefile or build
# system. A couple of suggestions are:
#
# o Get the sample bare BSP application, or
# o Watch RTEMS build a BSP which is closest to yours and copy
# the command lines used.
#
BSP NAME: bare
BOARD: not applicable
BUS: not applicable
CPU FAMILY: all
COPROCESSORS: not applicable
MODE: not applicable
DEBUG MONITOR: not applicable
PERIPHERALS
===========
not applicable
DRIVER INFORMATION
==================
not applicable
STDIO
=====
not applicable
NOTES
=====
Board description
-----------------
not applicable
Host System
-----------
Linux (RedHat 4.0/5.0)
egcs-1.0.2
binutils-2.8.1, with rtems patches
newlib-1.8.0, with rtems patches
Verification
-------------------------------
Single processor tests: not applicable
Multi-processort tests: not applicable
Timing tests:
not applicable
Porting
-------
not applicable

View File

@@ -0,0 +1,71 @@
#
# $Id$
#
# Tools to help doing build scripts. Adapted from Joel's bit
# script.
#
#
# USERCHANGE - uncomment this if you want to watch the commands.
#
# set -x
start=`date`
#
# Common exit routine for this script so we can print the starting
# and ending times.
#
my_exit()
{
stop=`date`
echo
echo "Started: " $start
echo "Finished: " $stop
exit $1
}
#
# Handle a fatal error.
#
fatal_error()
{
echo "ERROR: $*" >&2
my_exit 1
}
#
# Checks the status returned by executables and exits if it is non-zero.
#
check_fatal()
{
if [ $1 -ne 0 ] ; then
shift
fatal_error $*
fi
}
#
# Test for a valid path, exit if not found
#
test_path()
{
test -d $* || fatal_error "cannot find $*"
return 0
}
#
# Create a directory and check it was made correctly.
#
checked_mkdir()
{
mkdir -p $1
check_fatal $? "unable to make directory $1"
return 0
}

View File

@@ -0,0 +1,177 @@
#!/bin/bash
#
# $Id$
#
# RTEMS Bare BSP Build Script.
#
# This is designed to allow recording of stdout to log. The log
# forms part of a clean build trace for validation and verification
# reasons.
#
. `echo $0 | sed -e 's/do-rtems-build/build-tools/'`
#
# The current versions we are building.
#
# Note: Please change to suite.
#
RTEMS=rtems-980618
#
# The list of processors we want the tools built for.
#
CPUS="m68k"
#
# RTEMS CPU target we want to build.
#
RTEMS_M68K_TARGETS="68000 68030 cpu32"
#
# The particular host settings we have.
#
# Map particulars for different hosts here.
#
HOST=`hostname`
case "${HOST}" in
kiwi*)
ARCHIVE="/ods/archive"
TOOLS="/ods/egcs"
RTEMS_PATH=development/rtems/${RTEMS}
;;
*)
fatal_error "host is not known."
;;
esac
#
# Where will RTEMS live when installed ?
#
RTEMS_PREFIX=${TOOLS}/test
echo "Building on ${HOST}, archives in ${ARCHIVE}"
#
# Who is doing the build.
#
echo "User profile : "`id`
#
# Find out where we are
#
TOPDIR=`pwd`
echo "Top directory is ${TOPDIR}"
#
# Test the paths to the archives exist.
#
test_path ${ARCHIVE}/${RTEMS_PATH}
#
# Get the RTEMS source and patch.
#
echo "Unpacking rtems source ${ARCHIVE}/${RTEMS_PATH}/${RTEMS}.tgz ... "
tar zxf ${ARCHIVE}/${RTEMS_PATH}/${RTEMS}.tgz
check_fatal $? "failed to unpack ${RTEMS}.tgz."
#
# Build all the processors we support.
#
for cpu in ${CPUS}; do
{
#
# Create the target.
#
TARGET=${cpu}-rtems
#
# On to RTEMS.
#
case ${cpu} in
m68k)
RTEMS_TARGETS=${RTEMS_M68K_TARGETS}
;;
*)
fatal_error "unknown cpu ${cpu}"
;;
esac
for rtems_target in ${RTEMS_TARGETS}; do
{
#
# Remove the target if found.
#
echo "Removing the RTEMS bare bsp directory rtems-bare-${rtems_target} ... "
rm -rf rtems-bare-${rtems_target}
check_fatal $? "failed to remove rtems-bare-${rtems_target}."
echo "Creating the RTEM build directory for target ${rtems_target} ... "
checked_mkdir rtems-bare-${rtems_target}
cd rtems-bare-${rtems_target}
#
# Configure RTEMS.
#
# FIXME: the mapping from the rtems_target to the cpu flags
# just happens to work for the m68k targets. This should
# be mapped in a way which does not depends on the rtems_target,
# or RTEMS should support multilibs.
#
echo "Configuring RTEMS target bare-${rtems_target} ... "
../${RTEMS}/configure --target=${TARGET} --prefix=${RTEMS_PREFIX} \
--enable-cxx --enable-gmake-print-directory \
--disable-tests --disable-posix --enable-ka9q \
--enable-bare-cpu-cflags=-m${rtems_target} \
--enable-bare-cpu-model=m${rtems_target} \
--enable-rtemsbsp=bare
check_fatal $? "failed to configure rtems target."
#
# Do the RTEMS build.
#
echo "Building RTEMS target bare-${rtems_target} ... "
make all install
check_fatal $? "failed to complete rtems build for target ${rtems_target}."
#
# Remove the target if found.
#
echo "Removing the RTEMS bare bsp directory ${RTEMS_PREFIX}/rtems/bare-${rtems_target} ... "
rm -rf ${RTEMS_PREFIX}/rtems/bare-${rtems_target}
check_fatal $? "failed to remove ${RTEMS_PREFIX}/rtems/bare-${rtems_target}."
#
# Fix up the fact that RTEMS always installsthe bare bsp to the bare directory
#
echo "Moving the RTEMS bare bsp directory to bare-${rtems_target} ... "
mv ${RTEMS_PREFIX}/rtems/bare ${RTEMS_PREFIX}/rtems/bare-${rtems_target}
check_fatal $? "failed to move the bare bsp directory to bare-${rtems_target}."
cd ../
}; done
}; done
cd ../
my_exit 0