summaryrefslogtreecommitdiffstats
path: root/docs/usermanual/reference/class_siteinfo.xml
blob: ca42b61480265b9a355ddf65c400a52214ef3658 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?xml version="1.0" encoding="UTF-8"?>
<section id="siteinfo_class" xreflabel="siteinfo class">
  <title>siteinfo class</title>

  <para>The siteinfo class provides information for a target with a particular
  emphasis on determining the names of the site files to be passed to
  autoconf, as described in the <xref linkend="autotools_class" />. Full site
  information for your target can be determined by looking at the table in the
  class implementation found in the
  <command>classes/siteinfo.bbclass</command> file. A typical entry contains
  the name of the target and a list of site information for the
  target:<screen>    "sh4-linux":               "endian-little bit-32 common-glibc sh-common",</screen>In
  the above example for sh4-linux target (that's a build for an sh4 processor
  using glibc) we see that the endianess and bit-size of target are defined
  and an additional set of site files that should be used are listed. These
  include a common site file for glibc and a common site file for sh
  processors (so sh3 and sh4 can share defines). A <command>"common"</command>
  entry is automatically added to the end of each of the definitions during
  processing.</para>

  <para>The class makes available three variables based on the information
  provided for a target:</para>

  <variablelist>
    <varlistentry>
      <term>SITEINFO_ENDIANNESS</term>

      <listitem>
        <para>Defines the endianess of the target as either
        <command>"le"</command> (little endian) or <command>"be"</command>
        (big endian). The target must list either
        <command>endian-little</command> or <command>endian-big</command> in
        it's site information.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term>SITEINFO_BITS</term>

      <listitem>
        <para>Defines the bitsize of the target as either
        <command>"32"</command> or <command>"64"</command>. The target must
        list either <command>bit-32</command> or <command>bit-64</command> in
        it's site information.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term>CONFIG_SITE</term>

      <listitem>
        <para>Defines the site files to be used by autoconf. This is a space
        separated list of one or more site files for the target.</para>
      </listitem>
    </varlistentry>
  </variablelist>

  <para>A typical use for the <command>SITEINFO_ENDIANNESS</command> and
  <command>SITEINFO_BITS</command> variables is to provide configuration
  within a recipe based on their values. The following example from the
  <emphasis>openssl</emphasis> recipe showw the correct define for the
  endiness of the target being passed to openssl via the compiler flags. The
  define to add to the flags is set based on the value of the
  <command>SITEINFO_ENDIANNESS</command> variable. Note that use of the
  <emphasis>base_conditional</emphasis> method (see the <xref
  linkend="recipes_advanced_python" /> section) to select a value conditional
  on the endianess setting:</para>

  <para><screen>  # Additional flag based on target endiness (see siteinfo.bbclass)
    CFLAG="${CFLAG} ${@base_conditional('SITEINFO_ENDIANNESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"</screen></para>

  <section>
    <title>CONFIG_SITE: The autoconf site files</title>

    <para>The autotools configuration method has support for caching the
    results of tests. In the cross-compilation case it is sometimes necessary
    to prime the cache with per-calculated results (since tests designed to
    run on the target cannot be run when cross-compiling). These are defined
    via the site file(s) for the architecture you are using and may be
    specific to the package you are building.</para>

    <para>Which site files are used is determined via the
    <command>CONFIG_SITE</command> definition which is calculated via the
    siteinfo class. Typically the following site files will be checked for,
    and used in the order found:</para>

    <variablelist>
      <varlistentry>
        <term>endian-(big|little)</term>

        <listitem>
          <para>Either <command>endian-big</command> or
          <command>endian-little</command> depending on the endianess of the
          target. This site file would contain defines that only change based
          on if the target is little endian or big endian.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>bit-(32|64)</term>

        <listitem>
          <para>Either <command>bit-32</command> or <command>bit-64</command>
          depending on the bitsize of the target. This site file would contain
          defines that only change based on if the target is a 32-bit or
          64-bit cpu.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>common-(libc|uclibc)</term>

        <listitem>
          <para>Either <command>common-libc</command> or
          <command>common-uclibc</command> based on the C library being used
          for the target. This site file would contain defines the are
          specific to the C library being used.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>&lt;arch&gt;-common</term>

        <listitem>
          <para>A common site file for the target architecture. For i386,
          i485, i586 and i686 this would be <command>x86-common</command>, for
          sh3 and sh4 this would be <command>sh-common</command> and for
          various arm targets this would be
          <command>arm-common</command>.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>common</term>

        <listitem>
          <para>This is a site file which is common for all targets and
          contains definitions which remain the same no matter what target is
          being built.</para>
        </listitem>
      </varlistentry>
    </variablelist>

    <para>Each of the supported site files for a target is will be checked for
    in several different directories. Each time a file is found it as added to
    the list of files in the <command>CONFIG_SITE</command> variable. The
    following directories are checked:</para>

    <variablelist>
      <varlistentry>
        <term>org.openembedded.dev/recipes/&lt;packagename&gt;/site-&lt;version&gt;/</term>

        <listitem>
          <para>This directory is for site files which are specific to a
          particular version (where version is the PV of the package) of a
          package.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>org.openembedded.dev/recipes/&lt;packagename&gt;/site/</term>

        <listitem>
          <para>This directory is for site files which are specific to a
          particular package, but apply to all versions of the package.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>org.openembedded.dev/site/</term>

        <listitem>
          <para>This directory is for site files that are common to all
          packages. Originally this was the only site file directory that was
          supported.</para>
        </listitem>
      </varlistentry>
    </variablelist>
  </section>
</section>