diff options
-rw-r--r-- | documentation/concepts-manual/concepts-manual-concepts.xml | 63 | ||||
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 125 |
2 files changed, 125 insertions, 63 deletions
diff --git a/documentation/concepts-manual/concepts-manual-concepts.xml b/documentation/concepts-manual/concepts-manual-concepts.xml index fb02e2b512..0d01372c2e 100644 --- a/documentation/concepts-manual/concepts-manual-concepts.xml +++ b/documentation/concepts-manual/concepts-manual-concepts.xml | |||
@@ -153,67 +153,6 @@ | |||
153 | </para> | 153 | </para> |
154 | </section> | 154 | </section> |
155 | 155 | ||
156 | <section id='metadata-virtual-providers'> | ||
157 | <title>Metadata (Virtual Providers)</title> | ||
158 | |||
159 | <para> | ||
160 | Prior to the build, if you know that several different recipes | ||
161 | provide the same functionality, you can use a virtual provider | ||
162 | (i.e. <filename>virtual/*</filename>) as a placeholder for the | ||
163 | actual provider. | ||
164 | The actual provider would be determined at build time. | ||
165 | In this case, you should add <filename>virtual/*</filename> | ||
166 | to | ||
167 | <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>, | ||
168 | rather than listing the specified provider. | ||
169 | You would select the actual provider by setting the | ||
170 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink> | ||
171 | variable (i.e. | ||
172 | <filename>PREFERRED_PROVIDER_virtual/*</filename>) | ||
173 | in the build's configuration file (e.g. | ||
174 | <filename>poky/build/conf/local.conf</filename>). | ||
175 | <note> | ||
176 | Any recipe that | ||
177 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PROVIDES'><filename>PROVIDES</filename></ulink> | ||
178 | a <filename>virtual/*</filename> item that is ultimately | ||
179 | not selected through | ||
180 | <filename>PREFERRED_PROVIDER</filename> does not get built. | ||
181 | Preventing these recipes from building is usually the | ||
182 | desired behavior since this mechanism's purpose is to | ||
183 | select between mutually exclusive alternative providers. | ||
184 | </note> | ||
185 | </para> | ||
186 | |||
187 | <para> | ||
188 | The following lists specific examples of virtual providers: | ||
189 | <itemizedlist> | ||
190 | <listitem><para> | ||
191 | <filename>virtual/mesa</filename>: | ||
192 | Provides <filename>gbm.pc</filename>. | ||
193 | </para></listitem> | ||
194 | <listitem><para> | ||
195 | <filename>virtual/egl</filename>: | ||
196 | Provides <filename>egl.pc</filename> and possibly | ||
197 | <filename>wayland-egl.pc</filename>. | ||
198 | </para></listitem> | ||
199 | <listitem><para> | ||
200 | <filename>virtual/libgl</filename>: | ||
201 | Provides <filename>gl.pc</filename> (i.e. libGL). | ||
202 | </para></listitem> | ||
203 | <listitem><para> | ||
204 | <filename>virtual/libgles1</filename>: | ||
205 | Provides <filename>glesv1_cm.pc</filename> | ||
206 | (i.e. libGLESv1_CM). | ||
207 | </para></listitem> | ||
208 | <listitem><para> | ||
209 | <filename>virtual/libgles2</filename>: | ||
210 | Provides <filename>glesv2.pc</filename> | ||
211 | (i.e. libGLESv2). | ||
212 | </para></listitem> | ||
213 | </itemizedlist> | ||
214 | </para> | ||
215 | </section> | ||
216 | |||
217 | <section id='concepts-components-classes'> | 156 | <section id='concepts-components-classes'> |
218 | <title>Classes</title> | 157 | <title>Classes</title> |
219 | 158 | ||
@@ -248,8 +187,6 @@ | |||
248 | </section> | 187 | </section> |
249 | </section> | 188 | </section> |
250 | 189 | ||
251 | |||
252 | |||
253 | <section id="development-concepts"> | 190 | <section id="development-concepts"> |
254 | <title>Development Concepts</title> | 191 | <title>Development Concepts</title> |
255 | 192 | ||
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 20a38322b1..4cb99639b8 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -2898,6 +2898,131 @@ | |||
2898 | </para> | 2898 | </para> |
2899 | </section> | 2899 | </section> |
2900 | 2900 | ||
2901 | <section id='metadata-virtual-providers'> | ||
2902 | <title>Using Virtual Providers</title> | ||
2903 | |||
2904 | <para> | ||
2905 | Prior to a build, if you know that several different recipes | ||
2906 | provide the same functionality, you can use a virtual provider | ||
2907 | (i.e. <filename>virtual/*</filename>) as a placeholder for the | ||
2908 | actual provider. | ||
2909 | The actual provider is determined at build-time. | ||
2910 | </para> | ||
2911 | |||
2912 | <para> | ||
2913 | A common scenario where a virtual provider is used would be | ||
2914 | for the kernel recipe. | ||
2915 | Suppose you have three kernel recipes whose | ||
2916 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink> | ||
2917 | values map to <filename>kernel-big</filename>, | ||
2918 | <filename>kernel-mid</filename>, and | ||
2919 | <filename>kernel-small</filename>. | ||
2920 | Furthermore, each of these recipes in some way uses a | ||
2921 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PROVIDES'><filename>PROVIDES</filename></ulink> | ||
2922 | statement that essentially identifies itself as being able | ||
2923 | to provide <filename>virtual/kernel</filename>. | ||
2924 | Here is one way through the | ||
2925 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-kernel'><filename>kernel</filename></ulink> | ||
2926 | class: | ||
2927 | <literallayout class='monospaced'> | ||
2928 | PROVIDES += "${@ "virtual/kernel" if (d.getVar("KERNEL_PACKAGE_NAME") == "kernel") else "" }" | ||
2929 | </literallayout> | ||
2930 | Any recipe that inherits the <filename>kernel</filename> class | ||
2931 | is going to utilize a <filename>PROVIDES</filename> statement | ||
2932 | that identifies that recipe as being able to provide the | ||
2933 | <filename>virtual/kernel</filename> item. | ||
2934 | </para> | ||
2935 | |||
2936 | <para> | ||
2937 | Now comes the time to actually build an image and you need a | ||
2938 | kernel recipe, but which one? | ||
2939 | You can configure your build to call out the kernel recipe | ||
2940 | you want by using the | ||
2941 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink> | ||
2942 | variable. | ||
2943 | As an example, consider the | ||
2944 | <ulink url='https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/conf/machine/include/x86-base.inc'><filename>x86-base.inc</filename></ulink> | ||
2945 | include file. | ||
2946 | This include file is the reason all x86-based machines use the | ||
2947 | <filename>linux-yocto</filename> kernel. | ||
2948 | Here are the relevant lines from the include file: | ||
2949 | <literallayout class='monospaced'> | ||
2950 | PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto" | ||
2951 | PREFERRED_VERSION_linux-yocto ??= "4.15%" | ||
2952 | </literallayout> | ||
2953 | </para> | ||
2954 | |||
2955 | <para> | ||
2956 | When you use a virtual provider, you do not have to | ||
2957 | "hard code" a recipe name as a build dependency. | ||
2958 | You can use the | ||
2959 | <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink> | ||
2960 | variable to state the build is dependent on | ||
2961 | <filename>virtual/kernel</filename> for example: | ||
2962 | <literallayout class='monospaced'> | ||
2963 | DEPENDS = "virtual/kernel" | ||
2964 | </literallayout> | ||
2965 | During the build, the OpenEmbedded build system picks | ||
2966 | the correct recipe needed for the | ||
2967 | <filename>virtual/kernel</filename> dependency based on the | ||
2968 | <filename>PREFERRED_PROVIDER</filename> variable. | ||
2969 | If you want to use the small kernel mentioned at the beginning | ||
2970 | of this section, configure your build as follows: | ||
2971 | <literallayout class='monospaced'> | ||
2972 | PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small" | ||
2973 | </literallayout> | ||
2974 | <note> | ||
2975 | Any recipe that | ||
2976 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PROVIDES'><filename>PROVIDES</filename></ulink> | ||
2977 | a <filename>virtual/*</filename> item that is ultimately | ||
2978 | not selected through | ||
2979 | <filename>PREFERRED_PROVIDER</filename> does not get built. | ||
2980 | Preventing these recipes from building is usually the | ||
2981 | desired behavior since this mechanism's purpose is to | ||
2982 | select between mutually exclusive alternative providers. | ||
2983 | </note> | ||
2984 | </para> | ||
2985 | |||
2986 | <para> | ||
2987 | The following lists specific examples of virtual providers: | ||
2988 | <itemizedlist> | ||
2989 | <listitem><para> | ||
2990 | <filename>virtual/kernel</filename>: | ||
2991 | Provides the name of the kernel recipe to use when | ||
2992 | building a kernel image. | ||
2993 | </para></listitem> | ||
2994 | <listitem><para> | ||
2995 | <filename>virtual/bootloader</filename>: | ||
2996 | Provides the name of the bootloader to use when | ||
2997 | building an image. | ||
2998 | </para></listitem> | ||
2999 | <listitem><para> | ||
3000 | <filename>virtual/mesa</filename>: | ||
3001 | Provides <filename>gbm.pc</filename>. | ||
3002 | </para></listitem> | ||
3003 | <listitem><para> | ||
3004 | <filename>virtual/egl</filename>: | ||
3005 | Provides <filename>egl.pc</filename> and possibly | ||
3006 | <filename>wayland-egl.pc</filename>. | ||
3007 | </para></listitem> | ||
3008 | <listitem><para> | ||
3009 | <filename>virtual/libgl</filename>: | ||
3010 | Provides <filename>gl.pc</filename> (i.e. libGL). | ||
3011 | </para></listitem> | ||
3012 | <listitem><para> | ||
3013 | <filename>virtual/libgles1</filename>: | ||
3014 | Provides <filename>glesv1_cm.pc</filename> | ||
3015 | (i.e. libGLESv1_CM). | ||
3016 | </para></listitem> | ||
3017 | <listitem><para> | ||
3018 | <filename>virtual/libgles2</filename>: | ||
3019 | Provides <filename>glesv2.pc</filename> | ||
3020 | (i.e. libGLESv2). | ||
3021 | </para></listitem> | ||
3022 | </itemizedlist> | ||
3023 | </para> | ||
3024 | </section> | ||
3025 | |||
2901 | <section id='properly-versioning-pre-release-recipes'> | 3026 | <section id='properly-versioning-pre-release-recipes'> |
2902 | <title>Properly Versioning Pre-Release Recipes</title> | 3027 | <title>Properly Versioning Pre-Release Recipes</title> |
2903 | 3028 | ||