summaryrefslogtreecommitdiffstats
path: root/docs/manual/writing-rules.txt
blob: e0a5a2afddbd2c6888822c1f854c24220d2fcd22 (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
// -*- mode:doc; -*-

Writing rules
-------------

Overall, those writing rules are here to help you add new files in
Buildroot or refactor existing ones.

If you slightly modify some existing file, the important thing is
keeping the consistency of the whole file, so you can:
* either follow the potentially deprecated rules used all over this
file
* or entirely rework it in order to make it comply with those 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.

	  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 configuration system used in Buildroot, so the content of the
+Config.in+ files, is regular _Kconfig_. Further details about
_Kconfig_: refer to
http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt[].

[[writing-rules-mk]]

The +.mk+ file
~~~~~~~~~~~~~~

* Assignment: use +=+ preceded and followed by one space:
+
---------------------
LIBFOO_VERSION = 1.0
LIBFOO_CONF_OPT += --without-python-support
---------------------

* Indentation: use tab only:
+
---------------------
define LIBFOO_REMOVE_DOC
$(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \
	$(TARGET_DIR)/usr/share/man/man3/libfoo*
endef
---------------------

* Optional dependency:

** Prefer multi-line syntax.
+
YES:
+
---------------------
ifeq ($(BR2_PACKAGE_PYTHON),y)
LIBFOO_CONF_OPT += --with-python-support
LIBFOO_DEPENDENCIES += python
else
LIBFOO_CONF_OPT += --without-python-support
endif
---------------------
+
NO:
+
---------------------
LIBFOO_CONF_OPT += --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
---------------------

The documentation
~~~~~~~~~~~~~~~~~

The documentation uses the
http://www.methods.co.nz/asciidoc/[asciidoc] format.

Further details about the http://www.methods.co.nz/asciidoc/[asciidoc]
syntax: refer to http://www.methods.co.nz/asciidoc/userguide.html[].