GLAST/LAT > DAQ and FSW > FSW

Introduction to the FSW Build Matrix


Overview

One of the barriers to understanding the FSW development environment is the complexity of the build "matrix". What are components, packages, projects, tags, types, and versions (and how do they relate to each other)? The following sections attempt to clarify these questions.

Projects

The flight (and supporting) software has been divided into a small number of topically-related "projects":

  • APP (Applications)
  • DAQ (Data Acquisition Miscellany)
  • DRV (Drivers)
  • FES (Front-end Simulators)
  • FST (FSW Test Scripts)
  • ICS (Instrument Configuration Services)
  • OS (Operating System)
  • PHY (Physics Analysis)
  • SVC (Services)
  • SYS (Systemish)
  • TSS (Test Stand Support)

Each project contains one or more "packages", as described below.

Packages

FSW borrows its notion of "packages" from CMT (Configuration Management Tool). Packages "use" each other, explicitly, in much the same manner that modules use each other in object-oriented programming. Each package contains one or more "constituents", as described below.

Constituents

An FSW "constituent" is a closely-related set of source-code files (e.g., foo.c, foo.h), producing a closely-related set of product files. For example, a communications package could contain a "transmit" constituent and a "receive" constituent. Each constituent can access common code that is also maintained in the package.

Versions

Each FSW package may be present in one or more "versions". The "dev" (development) version is used by the package developer(s) as a way of presenting "pre-release" software to other developers. There will also, in general, be a "current" production version, which is deemed safe for use in developing other software. On the Package pages (e.g., CCSDS), any links (e.g., Doxygen, LTX) for the current production version are emboldened.

Tags

The FSW build system supports several "tags", each of which specifies a set of build parameters:

  • sun-gcc (build for Solaris "host" system, using GCC)
  • linux-gcc (build for Linux "host" system, using GCC)

    The sun-gcc and linux-gcc tags are used for software which will be run on Sparc/Solaris and Intel/Linux platforms, respectively.

  • mv2303 (build for mv2303 SBC, running VxWorks)
  • mv2304 (build for mv2304 SBC, running VxWorks)

    The mv2303 and mv2304 are VME-based single-board computers (SBCs), designed for use in embedded systems. They employ the PPC603 and PPC604 CPUs, respectively.

  • mcp750 (build for mcp750 SBC, running VxWorks)
  • rad750 (build for rad750 SBC, running VxWorks)

    The mcp750 and rad750 are cPCI-based SBCs, designed for use in embedded systems. They both employ the PPC750 CPU, but the rad750 has been hardened against radiation.

  • i845e (build for i845e SBC, running VxWorks)

    The i845e is a PCI-based motherboard for the Pentium IV. The FSW uses these for simulation, etc.

Types

For "host" systems (e.g., linux-gcc, sun-gcc), the FSW build system supports two types of output binary files:

  • "exe" (executable programs)
  • "shr" (shared libraries)

For "embedded" systems (e.g., all SBCs, the i845e) the FSW build system supports two types of output binary files:

  • "bsp" (absolutely-linked objects)
  • "shr" (relocatable objects)

Path Names

In order to fit the build matrix into the file system's tree structure, some decisions had to be made. Specifically, certain "indices" had to be made subsidiary to others. Also, the source tree needed to be arranged differently than the binary tree. It's possible that other sites may make different decisions, but here is how things are arrranged at SLAC:

  /afs/slac.stanford.edu/g/glast/flight/
      $project/source/$package/$version/
          src/*.{c,cidc,cidh,h,ih,msg,...}

  /afs/slac.stanford.edu/g/glast/flight/
      $project/binary/$package/$version/
          $tag/$constituent/*.{d,o,ro,so,...}
    

For more information, see The FSW File Tree.