source: rtems/cpukit/include/rtems/score/chain.h @ 21275b58

5
Last change on this file since 21275b58 was 2afb22b, checked in by Chris Johns <chrisj@…>, on 12/23/17 at 07:18:56

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • Property mode set to 100644
File size: 2.5 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreChain
5 *
6 * @brief Chain Handler API
7 */
8
9/*
10 *  Copyright (c) 2010 embedded brains GmbH.
11 *
12 *  COPYRIGHT (c) 1989-2006.
13 *  On-Line Applications Research Corporation (OAR).
14 *
15 *  The license and distribution terms for this file may be
16 *  found in the file LICENSE in this distribution or at
17 *  http://www.rtems.org/license/LICENSE.
18 */
19
20#ifndef _RTEMS_SCORE_CHAIN_H
21#define _RTEMS_SCORE_CHAIN_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27/**
28 *  @defgroup ScoreChain Chain Handler
29 *
30 *  @ingroup Score
31 *
32 *  The Chain Handler is used to manage sets of entities.  This handler
33 *  provides two data structures.  The Chain Node data structure is included
34 *  as the first part of every data structure that will be placed on
35 *  a chain.  The second data structure is Chain Control which is used
36 *  to manage a set of Chain Nodes.
37 */
38/**@{*/
39
40/**
41 *  @typedef Chain_Node
42 *
43 *  This type definition promotes the name for the Chain Node used by
44 *  all RTEMS code.  It is a separate type definition because a forward
45 *  reference is required to define it.  See @ref Chain_Node_struct for
46 *  detailed information.
47 */
48typedef struct Chain_Node_struct Chain_Node;
49
50/**
51 *  @struct Chain_Node_struct
52 *
53 *  This is used to manage each element (node) which is placed
54 *  on a chain.
55 *
56 *  @note Typically, a more complicated structure will use the
57 *        chain package.  The more complicated structure will
58 *        include a chain node as the first element in its
59 *        control structure.  It will then call the chain package
60 *        with a pointer to that node element.  The node pointer
61 *        and the higher level structure start at the same address
62 *        so the user can cast the pointers back and forth.
63 *
64 */
65struct Chain_Node_struct {
66  /** This points to the node after this one on this chain. */
67  Chain_Node *next;
68  /** This points to the node immediate prior to this one on this chain. */
69  Chain_Node *previous;
70};
71
72/**
73 *  @struct Chain_Control
74 *
75 * This is used to manage a chain.  A chain consists of a doubly
76 * linked list of zero or more nodes.
77 *
78 * @note This implementation does not require special checks for
79 *   manipulating the first and last elements on the chain.
80 *   To accomplish this the @a Chain_Control structure is
81 *   treated as two overlapping @ref Chain_Node structures.
82 */
83typedef union {
84  struct {
85    Chain_Node Node;
86    Chain_Node *fill;
87  } Head;
88
89  struct {
90    Chain_Node *fill;
91    Chain_Node Node;
92  } Tail;
93} Chain_Control;
94
95/**@}*/
96
97#ifdef __cplusplus
98}
99#endif
100
101#endif
102/* end of include file */
Note: See TracBrowser for help on using the repository browser.