=========================================================================================
Directory structure:
=========================================================================================

The folders are nested as follow:
**********************************************************************
fail:  FAIL* parent directory, containing all source & configuration files (${FAIL_DIR})
|-cmake:  CMake-related configuration files (e.g. compiler-flags, dependencies, ...)
|-doc:  FAIL*-Framework documentation (e.g., diagrams, howtos, ...)
|-scripts:  python/shell scripts for FAIL*-compilation and experiment distribution
|-simulators:  parent directory of simulators supported by FAIL* (may still be WIP)
  |-bochs:  source files of the (modified) Bochs x86 simulator backend
  |-gem5:  source files of the gem5 simulator backend
|-debuggers:  parent directory of debuggers supported by FAIL* (may still be WIP)
  |-gdb:  source files related to the GNU gdb debugger
  |-t32:  source files related to the Lauterbach T32 debugger
|-src:  C/C++/AspectC++ source files related to FAIL*, experiments and plugins
  |-core:  core source files forming the FAIL* framework
    |-util:  utility classes and miscellaneous helper functions
    |-config:  CMake configuration files, defining the FAIL* components and variant
    |-sal:  source file forming the Simulator Abstraction Layer (backend-interface)
      |-bochs:  backend source files of the Bochs simulator
      |-gem5:  backend source files of the gem5 simulator
      |-qemu:  backend source files of the QEMU simulator
      |-t32:  backend source files of the Lauterbach T32 debugger
      |-arm:  ARM-specific platform source files
      |-x86:  x86-specific platform source files
      |-perf:  performance-related source files (extensions); speeds up
               FAIL* <-> simulator interaction (e.g., when using breakpoints)
    |-cpn:  campaign- (and therefore server-)related source files
    |-efw:  experiment-framework- (and therefore client-)related source files
    |-comm:  communication related source files (these files are used by cpn and efw), incl.
             protobuf message definitions used for communication purposes
  |-experiments:  experiment code files (within a new dir) need to be located here
  |-plugins:  plugin code files (within a new dir) need to be located here
|-tools:  FAIL*-related tools, e.g., for tracing or fault-space pruning
|-[build]:  recommended location of your build-tree, generated files will be placed here


Some additional useful notes:
**********************************************************************
 - The source files have been documented using Doxygen comments. The Doxygen
   documentation can be generated by typing "make doc" in your build-tree. The
   resulting HTML and LaTeX files will be located in "${BUILD_DIR}/src/core/doc/".
 - CMake supports an "in-source" build-tree. We recommend you not to use this
   "feature", because it leads to a cluttered directory structure (mixing original
   source files and generated code/config files). (Since it is still possible, however,
   the "build" directory is optional.)
 - CMake invokes the compiler with the following include directories:
    * ${FAIL_DIR}/src/core
    * ${BUILD_DIR}/src/core
   When compiling the $SIMULATOR variant the following directory is added, too:
    * ${FAIL_DIR}/simulators/$SIMULATOR
   These definitions simplify and shorten the include paths.

=========================================================================================
Namespace structure:
=========================================================================================
All classes, functions, constants, etc. are encapsulated in the namespace "fail".
Experiments and plugins (see corresponding directories above) are located in the
global scope (not in the "fail"-namespace).
