xref: /aosp_15_r20/external/toybox/Config.in (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1mainmenu "Toybox Configuration"
2
3
4source generated/Config.probed
5source generated/Config.in
6
7comment ""
8
9menu "Toybox global settings"
10
11# This entry controls the multiplexer, disabled for single command builds
12config TOYBOX
13	bool
14	default y
15	help
16	  usage: toybox [--long | --help | --version | [COMMAND] [ARGUMENTS...]]
17
18	  With no arguments, "toybox" shows available COMMAND names. Add --long
19	  to include suggested install path for each command, see
20	  https://landley.net/toybox/faq.html#install for details.
21
22	  First argument is name of a COMMAND to run, followed by any ARGUMENTS
23	  to that command. Most toybox commands also understand:
24
25	  --help		Show command help (only)
26	  --version	Show toybox version (only)
27
28	  The filename "-" means stdin/stdout, and "--" stops argument parsing.
29
30	  Numerical arguments accept a single letter suffix for
31	  kilo, mega, giga, tera, peta, and exabytes, plus an additional
32	  "d" to indicate decimal 1000's instead of 1024.
33
34	  Durations can be decimal fractions and accept minute ("m"), hour ("h"),
35	  or day ("d") suffixes (so 0.1m = 6s).
36
37config TOYBOX_SUID
38	bool "SUID support"
39	default y
40	help
41	  Support for the Set User ID bit, to install toybox suid root and drop
42	  permissions for commands which do not require root access. To use
43	  this change ownership of the file to the root user and set the suid
44	  bit in the file permissions:
45
46	  chown root:root toybox; chmod +s toybox
47
48choice
49	prompt "Security Blanket"
50	default TOYBOX_LSM_NONE
51	help
52	  Select a Linux Security Module to complicate your system
53	  until you can't find holes in it.
54
55config TOYBOX_LSM_NONE
56	bool "None"
57	help
58          Don't try to achieve "watertight" by plugging the holes in a
59          collander, instead use conventional unix security (and possibly
60          Linux Containers) for a simple straightforward system.
61
62config TOYBOX_SELINUX
63	bool "SELinux support"
64	help
65	  Include SELinux options in commands such as ls, and add
66	  SELinux-specific commands such as chcon to the Android menu.
67
68config TOYBOX_SMACK
69	bool "SMACK support"
70	help
71	  Include SMACK options in commands like ls for systems like Tizen.
72
73endchoice
74
75config TOYBOX_LIBCRYPTO
76       bool "Use libcrypto (OpenSSL/BoringSSL)"
77       default n
78       help
79         Use faster hash functions out of external -lcrypto library.
80
81config TOYBOX_LIBZ
82       bool "Use libz (zlib)"
83       default n
84       help
85         Use libz for gz support.
86
87config TOYBOX_FLOAT
88	bool "Floating point support"
89	default y
90	help
91	  Include floating point support infrastructure and commands that
92	  require it.
93
94config TOYBOX_HELP
95	bool "Help messages"
96	default y
97	help
98	  Include help text for each command.
99
100config TOYBOX_HELP_DASHDASH
101	bool "--help and --version"
102	default y
103	depends on TOYBOX_HELP
104	help
105	  Support --help argument in all commands, even ones with a NULL
106	  optstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output
107	  as "help command". --version shows toybox version.
108
109config TOYBOX_ZHELP
110	bool "compress help text"
111	default y
112	depends on TOYBOX_HELP
113	help
114	  Compress help with gzip -9, deflating when displayed. This makes the
115	  binary smaller but can increase runtime memory usage.
116
117config TOYBOX_FREE
118	bool "Free memory unnecessarily"
119	default n
120	help
121	  When a program exits, the operating system will clean up after it
122	  (free memory, close files, etc). To save size, toybox usually relies
123	  on this behavior. If you're running toybox under a debugger or
124	  without a real OS (ala newlib+libgloss), enable this to make toybox
125	  clean up after itself.
126
127config TOYBOX_NORECURSE
128	bool "Disable recursive execution"
129	default n
130	help
131	  When one toybox command calls another, usually it just calls the new
132	  command's main() function rather than searching the $PATH and calling
133	  exec on another file (which is much slower).
134
135	  This disables that optimization, so toybox will run external commands
136          even when it has a built-in version of that command. This requires
137          toybox symlinks to be installed in the $PATH, or re-invoking the
138          "toybox" multiplexer command by name.
139
140config TOYBOX_DEBUG
141	bool "Debugging tests"
142	default n
143	help
144	  Enable extra checks for debugging purposes. All of them catch
145	  things that can only go wrong at development time, not runtime.
146
147config TOYBOX_UID_SYS
148	int "First system UID"
149	default 100
150	help
151	  When commands like useradd/groupadd allocate system IDs, start here.
152
153config TOYBOX_UID_USR
154	int "First user UID"
155	default 500
156	help
157	  When commands like useradd/groupadd allocate user IDs, start here.
158
159config TOYBOX_FORCE_NOMMU
160	bool "Enable nommu support when the build can't detect it."
161	default n
162	help
163	  When using musl-libc on a nommu system, you'll need to say "y" here
164	  unless you used the patch in the mcm-buildall.sh script. You can also
165	  say "y" here to test the nommu codepaths on an mmu system.
166
167	  A nommu system can't use fork(), it can only vfork() which suspends
168	  the parent until the child calls exec() or exits. When a program
169	  needs a second instance of itself to run specific code at the same
170	  time as the parent, it must use a more complicated approach (such as
171	  exec("/proc/self/exe") then pass data to the new child through a pipe)
172	  which is larger and slower, especially for things like toysh subshells
173	  that need to duplicate a lot of internal state in the child process
174	  fork() gives you for free.
175
176	  Libraries like uclibc omit fork() on nommu systems, allowing
177	  compile-time probes to select which codepath to use. But musl
178	  intentionally includes a broken version of fork() that always returns
179	  -ENOSYS on nommu systems, and goes out of its way to prevent any
180	  cross-compile compatible compile-time probes for a nommu system.
181	  (It doesn't even #define __MUSL__ in features.h.) Musl does this
182	  despite the fact that a nommu system can't even run standard ELF
183	  binaries (requiring specially packaged executables) because it wants
184	  to force every program to either include all nommu code in every
185	  instance ever built, or drop nommu support altogether.
186
187	  Building a scripts/mcm-buildall.sh toolchain patches musl to fix this.
188
189endmenu
190