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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
|
Setup and Project Actions
~~~~~~~~~~~~~~~~~~~~~~~~~
``menu``
this starts a dialog based frontend for those who do not like typing
commands. It will gain us access to the most common parameters to
configure and build a PTXdist project. This menu handles the
actions *menuconfig*, *platformconfig*, *kernelconfig*, *select*,
*platform*, *boardsetup*, *setup*, *go* and *images*.
``select <config>``
this action will select a user land
configuration. This step is only required in projects where no
``selected_ptxconfig`` file is present. The <config> argument must point
to a valid userland configuration file. PTXdist provides this feature
to enable the user to maintain more than one userland configuration in
the same project. The default location for the configuration file is
``configs/ptxconfig``. PTXdist will use this if no other configuration is
selected.
``platform <config>``
this action will select a platform
configuration. This step is only required in projects where no
``selected_platform`` file is present. The <config> argument must point
to a valid platform configuration file. PTXdist provides this feature to
enable the user to maintain more than one platform in one project.
The default location for the configuration file is
``configs/*/platformconfig``. PTXdist will use that if the pattern matches
exactly one file and no other configuration is selected.
``toolchain [<path>]``
this action will select the toolchain to use. If no path is specified
then PTXdist will guess which toolchain to use based on the settings in
the platformconfig. Setting the toolchain is only required if PTXdist
cannot find the toolchain automatically or if a different toolchain
should be used.
``collection <config>``
this action will select a collection configuration. This step is
optional. The <config> argument must point to a valid collection
configuration file.
``setup``
PTXdist uses some global settings, independent from the
project it is working on. These settings belong to users preferences or
simply some network settings to permit PTXdist to download required
packages.
``boardsetup``
PTXdist based projects can provide information to
setup and configure the target automatically. This action lets the user
setup the environment specific settings like the network IP address and
so on.
``menuconfig``
start the menu to configure the project’s root
filesystem. This is in respect to userland only. It’s the main menu to
select which applications and libraries should be built into the target’s
root filesystem.
``menuconfig platform``
this action starts the menu to configure the currently selected
platform. As these are architecture and target specific
settings, it configures the toolchain, the kernel and a bootloader (but
no userland components).
The short form for this action is ``platformconfig``.
``menuconfig kernel``
start the menu to configure the platform’s
kernel. As a project can support more than one platform, this will
configure the currently selected platform. The short form for this
action is ``kernelconfig``.
``menuconfig barebox``
this action starts the configure menu for
the selected bootloader. It depends on the platform settings which
bootloader is enabled and to be used as an argument to the
``menuconfig`` action parameter. As a project can support more than
one platform, this will configure the bootloader of the currently
selected platform.
``nconfig [<component>]``
this action provides a slightly different user experience with the same
functionality as ``menuconfig``. It can be used instead of ``menuconfig``
for all the component described above.
``oldconfig [<component>]``, ``allmodconfig [<component>]``, ``allyesconfig [<component>]``, ``allnoconfig [<component>]``, ``randconfig [<component>]``
this action will run the corresponding kconfig action for the specified
component. ``oldconfig`` will prompt for all new options.
``allmodconfig``, ``allyesconfig`` and ``allnoconfig`` will set all
options to 'm', 'y' or 'n' respectively. ``randconfig`` will randomize
the options. The ``KCONFIG_ALLCONFIG`` and ``KCONFIG_SEED`` environment
variables can be used as described in the Linux kernel documentation.
``migrate``
migrate the configuration files from a previous PTXdist version. This
will run ``oldconfig`` and ``oldconfig platform`` to prompt for all new
options.
Build Actions
~~~~~~~~~~~~~
``go``
this action will build all enabled packages in the current
project configurations (platform and userland). It will also rebuild
reconfigured packages (if any) or build additional packages if they were
enabled meanwhile. If enabled, this step also builds the kernel and
bootloader images.
``get``
this action will download the sources for all packages. This is useful to
download everything at once. Afterwards the packages can be built without
internet access.
``getdev``
if using pre-built archives is enabled, this action will make sure that all
of them exist locally, possibly by downloading them from the configured
mirror server.
``urlcheck [<package>]``
this action will check if the URL for the package (or all packages) still
works. It does not download the whole file, so this is relatively fast,
but may not be 100% correct in all cases.
``get <package>``, ``extract <package>``, ``prepare <package>``, ``compile <package>``, ``install <package>``, ``targetinstall <package>``
these actions will build the corresponding stage for the specified package
including all previous stages and other dependencies. Multiple packages
can be specified.
``drop <package>.<stage>``
this action will 'drop' the specified stage without removing any other
files. Subsequent actions depending on this stage will rebuild it.
This is useful during
development to rebuild a package without deleting the sources. Use
``clean <package>`` for a full rebuild of the package.
``images``
most of the time this is the last step to get the
required files and/or images for the target. It creates filesystems or
device images to be used in conjunction with the target’s filesystem
media. The result can be found in the ``images/`` directory of the
project or the platform directory.
If necessary, ``images`` also builds all required stages first, so it can be
used instead of ``go``.
``image <image>``
build the specified image. The file name in ``images/`` is used to
identify the image. This is basically the same as ``images`` but builds
just one image.
Clean Actions
~~~~~~~~~~~~~
``clean``
the ``clean`` action will remove all generated files:
all build, packages and root filesystem
directories. Only the selected configuration files are left untouched.
This is a way to start a fresh build cycle.
``clean root``
this action will only clean the image packages and the root filesystem
directories. All the build directories are left untouched.
After using this action, the next ``go`` action will regenerate all opkg
archives from the already built packages as well as the root filesystem
directories.
The ``clean root`` and ``go`` action is useful if the
*targetinstall* stage for all packages should run again.
``clean target``
this action will call the ``clean`` action for each target package,
and also clean the root file system afterwards.
This can be useful if you want to rebuild the target file system from
scratch, without throwing away the already built host and cross packages.
``clean <package>``
this action will only clean the dedicated
<package>. It will remove its build directory and all installed files
from the corresponding sysroot directory. Multiple packages can be
specified.
``distclean``
the ``distclean`` action will remove all files that
are not part of the main project. It removes all generated files and
directories like the ``clean`` action, and also the created links in any
``platform`` and/or ``select`` action.
Misc Actions
~~~~~~~~~~~~
``version``
print out the PTXdist version.
``test <testname>``
run tests
``newpackage <type>``
create a new PTXdist package. For most package types, this will create
<pkg>.make and <pkg>.in files in ``rules/``. Use ``newpackage help`` for a
list of available package types.
``nfsroot``
run a userspace NFS server and export the nfsroot (refer to section
:ref:`nfsroot` for further details).
``gdb``
run the cross gdb from the toolchain. The sysroot and other search paths
are configured to ensure that gdb finds all available debug files.
``bsp-info``
show some basic information about the BSP. The currently used configs,
all layers, the images that are build, etc.
``package-info <pkg>``
show some basic information about the package. This includes the version,
URL and various paths and directories. The paths for menu and rule file
are shown as well, so this can be used to verify that the correct version
of these files are used.
.. _command_print:
``print <var>``
print the contents of a variable. It will first look for a shell variable
with the given name. If none exists, it will run make on all selected package
rules, determine if a variable with the given name is known to make, and if
so, print it.
``list-packages``
print a list of all selected packages. This list does not include the
host and cross tools.
``local-src <pkg> [<directory>]``
overwrite a package source with a locally provided directory containing
the source code. Not specifying the directory will undo the change.
Relative paths are converted to absolute paths relative to the workspace.
``bash``
enter a PTXdist environment bash shell.
``bash <cmd> [args...]``
execute ``<cmd>`` in PTXdist environment.
``make <target>``
build specified make target in PTXdist.
``export_src <target-dir>``
export all source archives needed for this project to ``<target-dir>``.
``docs-html``
build HTML documentation for a BSP. The output is written to
Documentation/html/index.html
Overwrite defaults
~~~~~~~~~~~~~~~~~~
These options can be used to overwrite default settings. They can be useful
when working with multiple configurations or platforms in a single project.
``--ptxconfig=<config>``
use the specified ptxconfig file instead of the selected default
configuration file.
``--platformconfig=<config>``
use specified platformconfig file instead of the selected default
configuration file.
``--collectionconfig=<config>``
use specified collectionconfig file instead of the selected configuration
file.
``--toolchain=<toolchain>``
use specified toolchain instead of the selected or default toolchain.
``--force-download``
allow downloading, even if disabled by ``setup``
Options
~~~~~~~
``--force``, ``-f``
use this option to overwrite various sanity checks. Only use this option
if you really know what you are doing!
``--debug``, ``-d``
print out additional info (like make decisions)
``--quiet``, ``-q``
suppress output, show only stderr
``--verbose``, ``-v``
be more verbose, print command before execute them
``--output-sync``, ``--no-output-sync``
enable or disable output synchronization. By default output
synchronization is only enabled for quiet builds. Output synchronization
is implemented by the ``make`` ``--output-sync`` option. For building
packages in parallel, ``--output-sync=recurse`` is used. For individual
``make`` commands in the build stages ``--output-sync=target`` is used.
This means that the output for each individual make target and each
build stage is grouped together.
Note: If output synchronization is enabled, then the output for each build
stage is collected by make and won't be visible until the build stage is
completed. As a result, there will be long periods of time with no
visible progress.
``--progress``
show some progress information in the form of completed/total build
stages. This is only shown if ``--quiet`` is enabled as well. Note that this
adds some extra overhead at the beginning, so it will take some time
until the first build stage starts.
``--j-intern=<n>``, ``-ji<n>``
set number of parallel jobs within packages. PTXdist will use this
number for example when calling ``make`` during the compile stage.
The default is 2x the number of CPUs.
``--j-extern=<n>``, ``-je<n>``
set number of packages to be built in parallel. The default is 1.
Use ``-j`` instead of this. It has the same goal and performs better.
``-j[<n>]``
set the global number of parallel jobs. This is basically a more
intelligent combination of ``-je`` and ``-ji``. A single package rarely
uses all the available CPUs. Usually only the compile stage can use more than
one CPU and even then there are often idle CPUs. With the global job
pool, tasks from multiple packages can be executed in parallel without
overloading the system.
Note: Because of the parallel execution, the output is chaotic and not
very useful. Use this in combination with ``-q`` and only to speed up
building for projects that are known to build without errors.
``--load-average=<n>``, ``-l<n>``
try to limit load to <n>. This is used for the equivalent ``make``
option.
``--nice=<n>``, ``-n<n>``
run with reduced scheduling priority (i.e. nice). The default is 10.
``--dirty``
avoid rebuilding packages. By default, if a package is rebuilt, then all
packages that depend on it are also rebuilt. This happens because
PTXdist cannot know if rebuilding is functionally necessary for the depending
packages. By specifying ``--dirty``, depending packages will not be rebuilt
if their dependencies were rebuilt. Also, changes to config options,
rule and menu file or changed patches will not trigger a rebuild either.
To trigger a rebuild, the relevant stage of a package must be dropped.
``--keep-going``, ``-k``
keep going. Continue to build as much as possible after an error.
``--git``
use git to apply patches
``--auto-version``
automatically switch to the correct PTXdist version. This will look for
the correct PTXdist version in the ptxconfig file and execute it if it
does not match the current version.
``--virtualenv=<dir>``
include a Python Virtual Environment. The given path must contain a
``bin/activate`` shell script.
|