summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.configure18
-rw-r--r--c/PROBLEMS1
-rw-r--r--c/src/lib/libbsp/bare/README122
-rw-r--r--c/src/lib/libbsp/bare/build-tools71
-rw-r--r--c/src/lib/libbsp/bare/do-bare-bsp-build177
5 files changed, 342 insertions, 47 deletions
diff --git a/README.configure b/README.configure
index aa8994822b..58e183ab35 100644
--- a/README.configure
+++ b/README.configure
@@ -24,6 +24,8 @@ RTEMS-specific option are supported:
--disable-tests
--disable-ka9q
--enable-cxx
+ --enable-bare-cpu-model=<MODEL>
+ --enable-bare-cpu-cflags=<FLAGS>
--enable-gcc28 (also use enable-libcdir when disabled)
--enable-gmake-print-directory
--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
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
-changing this:
+By default, all bsps for a target are built. The bare BSP is not built
+unless directlty specified. There are two ways of changing this:
+ use the --enable-rtemsbsp otion which will set the specified
bsps as the default bsps, or
@@ -80,6 +82,7 @@ architecture. The following targets are supported:
no_cpu-rtems
powerpc-rtems
sparc-rtems
+ bare see notes
The cross-compiler is set to $(target)-gcc by default. This can be
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_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
=====================================
@@ -177,6 +190,7 @@ no_cpu : no_bsp
mips64orion : p4600 p4650 (p4000 port with either R4600 or R4650)
powerpc : papyrus
sparc : erc32
+any : bare
5. Makefile structure
=====================
diff --git a/c/PROBLEMS b/c/PROBLEMS
index 571a0af5f7..869c941374 100644
--- a/c/PROBLEMS
+++ b/c/PROBLEMS
@@ -55,4 +55,5 @@ This is the list of outstanding problems in this release.
+ warn/refuse to configure when --enable-libcdir and
--enable-gcc28 are given.
+ force --enable-libcdir when --disable-gcc28 is given
+ + Check for bare bsp getting CPU model set.
diff --git a/c/src/lib/libbsp/bare/README b/c/src/lib/libbsp/bare/README
index 773e6aa2c0..11362253b0 100644
--- a/c/src/lib/libbsp/bare/README
+++ b/c/src/lib/libbsp/bare/README
@@ -13,6 +13,8 @@
#
#
+# Overview
+# ~~~~~~~~
# 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.
#
@@ -37,49 +39,79 @@
#
# 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
diff --git a/c/src/lib/libbsp/bare/build-tools b/c/src/lib/libbsp/bare/build-tools
new file mode 100644
index 0000000000..8ea01d3933
--- /dev/null
+++ b/c/src/lib/libbsp/bare/build-tools
@@ -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
+}
diff --git a/c/src/lib/libbsp/bare/do-bare-bsp-build b/c/src/lib/libbsp/bare/do-bare-bsp-build
new file mode 100644
index 0000000000..6449756405
--- /dev/null
+++ b/c/src/lib/libbsp/bare/do-bare-bsp-build
@@ -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