hc
2024-08-09 d3d58fa5ee2428cd2dde78fd8eeeeabe916b3835
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
// -*- mode:doc; -*-
// vim: set syntax=asciidoc:
 
== Coding style
 
Overall, these coding style rules are here to help you to add new files in
Buildroot or refactor existing ones.
 
If you slightly modify some existing file, the important thing is
to keep the consistency of the whole file, so you can:
 
* either follow the potentially deprecated coding style used in this
file,
 
* or entirely rework it in order to make it comply with these rules.
 
[[writing-rules-config-in]]
 
=== +Config.in+ file
 
+Config.in+ files contain entries for almost anything configurable in
Buildroot.
 
An entry has the following pattern:
 
---------------------
config BR2_PACKAGE_LIBFOO
   bool "libfoo"
   depends on BR2_PACKAGE_LIBBAZ
   select BR2_PACKAGE_LIBBAR
   help
     This is a comment that explains what libfoo is. The help text
     should be wrapped.
 
     http://foosoftware.org/libfoo/
---------------------
 
* The +bool+, +depends on+, +select+ and +help+ lines are indented
  with one tab.
 
* The help text itself should be indented with one tab and two
  spaces.
 
* The help text should be wrapped to fit 72 columns, where tab counts
  for 8, so 62 characters in the text itself.
 
The +Config.in+ files are the input for the configuration tool
used in Buildroot, which is the regular _Kconfig_. For further
details about the _Kconfig_ language, refer to
http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt[].
 
[[writing-rules-mk]]
 
=== The +.mk+ file
 
* Header: The file starts with a header. It contains the module name,
preferably in lowercase, enclosed between separators made of 80 hashes. A
blank line is mandatory after the header:
+
---------------------
################################################################################
#
# libfoo
#
################################################################################
---------------------
+
* Assignment: use +=+ preceded and followed by one space:
+
---------------------
LIBFOO_VERSION = 1.0
LIBFOO_CONF_OPTS += --without-python-support
---------------------
+
Do not align the +=+ signs.
 
* Indentation: use tab only:
+
---------------------
define LIBFOO_REMOVE_DOC
   $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \
       $(TARGET_DIR)/usr/share/man/man3/libfoo*
endef
---------------------
+
Note that commands inside a +define+ block should always start with a tab,
so _make_ recognizes them as commands.
 
* Optional dependency:
 
** Prefer multi-line syntax.
+
YES:
+
---------------------
ifeq ($(BR2_PACKAGE_PYTHON),y)
LIBFOO_CONF_OPTS += --with-python-support
LIBFOO_DEPENDENCIES += python
else
LIBFOO_CONF_OPTS += --without-python-support
endif
---------------------
+
NO:
+
---------------------
LIBFOO_CONF_OPTS += --with$(if $(BR2_PACKAGE_PYTHON),,out)-python-support
LIBFOO_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,)
---------------------
 
** Keep configure options and dependencies close together.
 
* Optional hooks: keep hook definition and assignment together in one
  if block.
+
YES:
+
---------------------
ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
define LIBFOO_REMOVE_DATA
   $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
endef
LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
endif
---------------------
+
NO:
+
---------------------
define LIBFOO_REMOVE_DATA
   $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
endef
 
ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
endif
---------------------
 
[[writing-genimage-cfg]]
 
=== The +genimage.cfg+ file
 
+genimage.cfg+ files contain the output image layout that genimage utility
uses to create final .img file.
 
An example follows:
 
---------------------
image efi-part.vfat {
   vfat {
       file EFI {
           image = "efi-part/EFI"
       }
 
       file Image {
           image = "Image"
       }
   }
 
   size = 32M
}
 
image sdimage.img {
   hdimage {
   }
 
   partition u-boot {
       image = "efi-part.vfat"
       offset = 8K
   }
 
   partition root {
       image = "rootfs.ext2"
       size = 512M
   }
}
---------------------
 
* Every +section+(i.e. hdimage, vfat etc.), +partition+ must be indented
  with one tab.
 
* Every +file+ or other +subnode+ must be indented with two tabs.
 
* Every node(+section+, +partition+, +file+, +subnode+) must have an open
  curly bracket on the same line of the node's name, while the closing one
  must be on a newline and after it a newline must be added except for the
  last one node. Same goes for its option, for example option +size = +.
 
* Every +option+(i.e. +image+, +offset+, +size+) must have the +=+
  assignment one space from it and one space from the value specified.
 
* Filename must at least begin with genimage prefix and have the .cfg
  extension to be easy to recognize.
 
The +genimage.cfg+ files are the input for the genimage tool used in
Buildroot to generate the final image file(i.e. sdcard.img). For further
details about the _genimage_ language, refer to
https://github.com/pengutronix/genimage/blob/master/README.rst[].
 
 
=== The documentation
 
The documentation uses the
http://www.methods.co.nz/asciidoc/[asciidoc] format.
 
For further details about the asciidoc syntax, refer to
http://www.methods.co.nz/asciidoc/userguide.html[].
 
=== Support scripts
 
Some scripts in the +support/+ and +utils/+ directories are written in
Python and should follow the
https://www.python.org/dev/peps/pep-0008/[PEP8 Style Guide for Python Code].