diff options
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 3f4b446e01..707d1c3ceb 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -1136,6 +1136,175 @@ | |||
| 1136 | </section> | 1136 | </section> |
| 1137 | </section> | 1137 | </section> |
| 1138 | 1138 | ||
| 1139 | <section id='usingpoky-writing-a-new-recipe'> | ||
| 1140 | <title>Writing a New Recipe</title> | ||
| 1141 | |||
| 1142 | <para> | ||
| 1143 | Recipes (<filename>.bb</filename> files) are fundamental components | ||
| 1144 | in the Yocto Project environment. | ||
| 1145 | The OpenEmbedded build system parses and compiles your recipes to | ||
| 1146 | create an image. | ||
| 1147 | Your project consists in part of the recipes that define it. | ||
| 1148 | This section describes how to create, write, and test a new | ||
| 1149 | recipe. | ||
| 1150 | </para> | ||
| 1151 | |||
| 1152 | <section id='new-recipe-overview'> | ||
| 1153 | <title>Overview</title> | ||
| 1154 | |||
| 1155 | <para> | ||
| 1156 | The following figure shows the basic process for creating a | ||
| 1157 | new recipe. | ||
| 1158 | Subsequent sections provide details for each step. | ||
| 1159 | <imagedata fileref="figures/recipe-workflow.png" width="4in" depth="7in" align="center" scalefit="1" /> | ||
| 1160 | </para> | ||
| 1161 | </section> | ||
| 1162 | |||
| 1163 | <section id='new-recipe-locate-a-base-recipe'> | ||
| 1164 | <title>Locate a Base Recipe</title> | ||
| 1165 | |||
| 1166 | <para> | ||
| 1167 | Working from an existing recipe or a skeleton recipe is the | ||
| 1168 | best way to get started. | ||
| 1169 | Here are some points on both methods: | ||
| 1170 | <itemizedlist> | ||
| 1171 | <listitem><para><emphasis>Locate a recipe that is close | ||
| 1172 | to what you want to do and use it:</emphasis> | ||
| 1173 | This method works when you are familiar with the | ||
| 1174 | current recipe space. | ||
| 1175 | The method does not work so well for those new to | ||
| 1176 | the Yocto Project or writing recipes.</para> | ||
| 1177 | <para>Some risks associated with this method are | ||
| 1178 | using a recipe that has areas totally unrelated to | ||
| 1179 | what you are trying to accomplish with your recipe, | ||
| 1180 | not recognizing areas of the recipe that you might | ||
| 1181 | have to add from scratch, and so forth. | ||
| 1182 | All these risks stem from unfamiliarity with the | ||
| 1183 | existing recipe space.</para></listitem> | ||
| 1184 | <listitem><para><emphasis>Use a skeleton recipe:</emphasis> | ||
| 1185 | Using the skeleton recipe located at | ||
| 1186 | <Need some path for a good recipe to use> is the | ||
| 1187 | recommended method for creating a new recipe. | ||
| 1188 | The skeleton recipe provides the fundamental areas | ||
| 1189 | that you need to include, exclude, or alter to fit | ||
| 1190 | your needs. | ||
| 1191 | </para></listitem> | ||
| 1192 | </itemizedlist> | ||
| 1193 | </para> | ||
| 1194 | </section> | ||
| 1195 | |||
| 1196 | <section id='new-recipe-fetching-code'> | ||
| 1197 | <title>Fetching Code</title> | ||
| 1198 | |||
| 1199 | <para> | ||
| 1200 | fetching: basically a matter of ensuring SRC_URI is correct, and for archives | ||
| 1201 | that SRC_URI checksums are specified and correct. We should show examples of | ||
| 1202 | the error message you get when you don't, from which you can copy and paste | ||
| 1203 | the lines with the correct values. | ||
| 1204 | </para> | ||
| 1205 | </section> | ||
| 1206 | |||
| 1207 | <section id='new-recipe-unpacking-code'> | ||
| 1208 | <title>Unpacking Code</title> | ||
| 1209 | |||
| 1210 | <para> | ||
| 1211 | unpacking: ensure S matches the directory that contains the source. Often the | ||
| 1212 | default will work for a source archive, but it depends on how the upstream | ||
| 1213 | project structures their archive. If SRC_URI specifies to fetch the source from | ||
| 1214 | an SCM such as git or svn you'll definitely need to set S. | ||
| 1215 | </para> | ||
| 1216 | </section> | ||
| 1217 | |||
| 1218 | <section id='new-recipe-licensing'> | ||
| 1219 | <title>Licensing</title> | ||
| 1220 | |||
| 1221 | <para> | ||
| 1222 | licensing: set correct values for LICENSE and LIC_FILES_CHKSUM, i.e. look for | ||
| 1223 | a license statement somewhere (COPYING, LICENSE, part of a README, top of a | ||
| 1224 | source file etc.) and then set the two variables accordingly. You need to go | ||
| 1225 | through this several steps, i.e. look in the directory containing the | ||
| 1226 | extracted source, then set LIC_FILES_CHKSUM to point to the file without the | ||
| 1227 | md5 value specified, and then run bitbake on the recipe again and it will error | ||
| 1228 | out with the actual md5 value which you can then put into the recipe. I notice | ||
| 1229 | we don't necessarily have a list anywhere of the common values for LICENSE | ||
| 1230 | either, so maybe we need to add this to the variable reference entry for this | ||
| 1231 | variable. We should also cover what to do if there is no file specifying the | ||
| 1232 | license shipped with the source. | ||
| 1233 | </para> | ||
| 1234 | </section> | ||
| 1235 | |||
| 1236 | <section id='new-recipe-optionally-supporting-services'> | ||
| 1237 | <title>Supporting Services</title> | ||
| 1238 | |||
| 1239 | <para> | ||
| 1240 | We'll probably also need some subsections on specific extra functions needed in | ||
| 1241 | some recipes e.g. how to add support for services (sysvinit and systemd), | ||
| 1242 | adding PACKAGECONFIG options, dealing with alternatives, etc. There's a | ||
| 1243 | question in my mind on how some of these will overlap with the class reference | ||
| 1244 | section though. | ||
| 1245 | </para> | ||
| 1246 | </section> | ||
| 1247 | |||
| 1248 | <section id='new-recipe-configuring-the-recipe'> | ||
| 1249 | <title>Configuring the Recipe</title> | ||
| 1250 | |||
| 1251 | <para> | ||
| 1252 | configure: this depends on whether you're using autotools or not; if you are | ||
| 1253 | then you should set EXTRA_OECONF to pass any needed configure options specific | ||
| 1254 | to this recipe. If you are not using autotools, you need to define your own | ||
| 1255 | do_configure function, assuming there is anything to configure. At this point | ||
| 1256 | you may also need to tweak DEPENDS if the configure scripts complain about any | ||
| 1257 | required dependencies being missing, assuming it's not just looking in the | ||
| 1258 | wrong place for the dependency in which case it's usually a matter of | ||
| 1259 | supplying the appropriate configure options to point to the correct location | ||
| 1260 | within the sysroot. | ||
| 1261 | </para> | ||
| 1262 | </section> | ||
| 1263 | |||
| 1264 | <section id='new-recipe-compiling-the-recipe'> | ||
| 1265 | <title>Compiling the Recipe</title> | ||
| 1266 | |||
| 1267 | <para> | ||
| 1268 | compile: if the recipe passes through do_compile successfully, nothing needs | ||
| 1269 | to be done. If not, diagnose the failure. We might be able to highlight common | ||
| 1270 | issues here such as parallel build failures, host path usage when building for | ||
| 1271 | the target, etc. | ||
| 1272 | </para> | ||
| 1273 | </section> | ||
| 1274 | |||
| 1275 | <section id='new-recipe-optionally-installing'> | ||
| 1276 | <title>Optionally Installing</title> | ||
| 1277 | |||
| 1278 | <para> | ||
| 1279 | install: for autotools/cmake recipes, if the recipe passes through do_install | ||
| 1280 | successfully, nothing needs to be done (at this stage). If not, diagnose the | ||
| 1281 | failure. For non-autotools recipes you need to define your own do_install | ||
| 1282 | (which may well just run "oe_runmake install"). | ||
| 1283 | </para> | ||
| 1284 | </section> | ||
| 1285 | |||
| 1286 | <section id='new-recipe-packaging'> | ||
| 1287 | <title>Packaging</title> | ||
| 1288 | |||
| 1289 | <para> | ||
| 1290 | packaging: ensure that the files are packaged correctly. Resolve any package QA | ||
| 1291 | issues (we need to have more detailed docs on this, probably as its own | ||
| 1292 | section). This can also involve looking at packages-split under the work | ||
| 1293 | directory and checking if files are where they need to be; if not, set | ||
| 1294 | PACKAGES, FILES, do_install(_append) etc. as needed. | ||
| 1295 | </para> | ||
| 1296 | </section> | ||
| 1297 | |||
| 1298 | <section id='new-recipe-testing'> | ||
| 1299 | <title>Testing</title> | ||
| 1300 | |||
| 1301 | <para> | ||
| 1302 | runtime testing: add the output package(s) to your image and ensure that they | ||
| 1303 | work at runtime. | ||
| 1304 | </para> | ||
| 1305 | </section> | ||
| 1306 | </section> | ||
| 1307 | |||
| 1139 | <section id='usingpoky-extend-addpkg'> | 1308 | <section id='usingpoky-extend-addpkg'> |
| 1140 | <title>Writing a Recipe to Add a Package to Your Image</title> | 1309 | <title>Writing a Recipe to Add a Package to Your Image</title> |
| 1141 | 1310 | ||
