mainmenu "Toybox Configuration"


source generated/Config.probed
source generated/Config.in

comment ""

menu "Toybox global settings"

# This entry controls the multiplexer, disabled for single command builds
config TOYBOX
	bool
	default y
	help
	  usage: toybox [--long | --help | --version | [COMMAND] [ARGUMENTS...]]

	  With no arguments, "toybox" shows available COMMAND names. Add --long
	  to include suggested install path for each command, see
	  https://landley.net/toybox/faq.html#install for details.

	  First argument is name of a COMMAND to run, followed by any ARGUMENTS
	  to that command. Most toybox commands also understand:

	  --help		Show command help (only)
	  --version	Show toybox version (only)

	  The filename "-" means stdin/stdout, and "--" stops argument parsing.

	  Numerical arguments accept a single letter suffix for
	  kilo, mega, giga, tera, peta, and exabytes, plus an additional
	  "d" to indicate decimal 1000's instead of 1024.

	  Durations can be decimal fractions and accept minute ("m"), hour ("h"),
	  or day ("d") suffixes (so 0.1m = 6s).

config TOYBOX_SUID
	bool "SUID support"
	default y
	help
	  Support for the Set User ID bit, to install toybox suid root and drop
	  permissions for commands which do not require root access. To use
	  this change ownership of the file to the root user and set the suid
	  bit in the file permissions:

	  chown root:root toybox; chmod +s toybox

choice
	prompt "Security Blanket"
	default TOYBOX_LSM_NONE
	help
	  Select a Linux Security Module to complicate your system
	  until you can't find holes in it.

config TOYBOX_LSM_NONE
	bool "None"
	help
          Don't try to achieve "watertight" by plugging the holes in a
          collander, instead use conventional unix security (and possibly
          Linux Containers) for a simple straightforward system.
	  
config TOYBOX_SELINUX
	bool "SELinux support"
	help
	  Include SELinux options in commands such as ls, and add
	  SELinux-specific commands such as chcon to the Android menu.

config TOYBOX_SMACK
	bool "SMACK support"
	help
	  Include SMACK options in commands like ls for systems like Tizen.

endchoice

config TOYBOX_LIBCRYPTO
       bool "Use libcrypto (OpenSSL/BoringSSL)"
       default n
       help
         Use faster hash functions out of external -lcrypto library.

config TOYBOX_LIBZ
       bool "Use libz (zlib)"
       default n
       help
         Use libz for gz support.

config TOYBOX_FLOAT
	bool "Floating point support"
	default y
	help
	  Include floating point support infrastructure and commands that
	  require it.

config TOYBOX_HELP
	bool "Help messages"
	default y
	help
	  Include help text for each command.

config TOYBOX_HELP_DASHDASH
	bool "--help and --version"
	default y
	depends on TOYBOX_HELP
	help
	  Support --help argument in all commands, even ones with a NULL
	  optstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output
	  as "help command". --version shows toybox version.

config TOYBOX_I18N
	bool "Internationalization support"
	default y
	help
	  Support for UTF-8 character sets, and some locale support.

config TOYBOX_FREE
	bool "Free memory unnecessarily"
	default n
	help
	  When a program exits, the operating system will clean up after it
	  (free memory, close files, etc). To save size, toybox usually relies
	  on this behavior. If you're running toybox under a debugger or
	  without a real OS (ala newlib+libgloss), enable this to make toybox
	  clean up after itself.

config TOYBOX_NORECURSE
	bool "Disable recursive execution"
	default n
	help
	  When one toybox command calls another, usually it just calls the new
	  command's main() function rather than searching the $PATH and calling
	  exec on another file (which is much slower).

	  This disables that optimization, so toybox will run external commands
          even when it has a built-in version of that command. This requires
          toybox symlinks to be installed in the $PATH, or re-invoking the
          "toybox" multiplexer command by name.

config TOYBOX_DEBUG
	bool "Debugging tests"
	default n
	help
	  Enable extra checks for debugging purposes. All of them catch
	  things that can only go wrong at development time, not runtime.

config TOYBOX_PEDANTIC_ARGS
	bool "Pedantic argument checking"
	default n
	help
	  Check arguments for commands that have no arguments.

config TOYBOX_UID_SYS
	int "First system UID"
	default 100
	help
	  When commands like useradd/groupadd allocate system IDs, start here.

config TOYBOX_UID_USR
	int "First user UID"
	default 500
	help
	  When commands like useradd/groupadd allocate user IDs, start here.

config TOYBOX_FORCE_NOMMU
	bool "Enable nommu support when the build can't detect it."
	default n
	help
	  When using musl-libc on a nommu system, you'll need to say "y" here
	  unless you used the patch in the mcm-buildall.sh script. You can also
	  say "y" here to test the nommu codepaths on an mmu system.

	  A nommu system can't use fork(), it can only vfork() which suspends
	  the parent until the child calls exec() or exits. When a program
	  needs a second instance of itself to run specific code at the same
	  time as the parent, it must use a more complicated approach (such as
	  exec("/proc/self/exe") then pass data to the new child through a pipe)
	  which is larger and slower, especially for things like toysh subshells
	  that need to duplicate a lot of internal state in the child process
	  fork() gives you for free.

	  Libraries like uclibc omit fork() on nommu systems, allowing
	  compile-time probes to select which codepath to use. But musl
	  intentionally includes a broken version of fork() that always returns
	  -ENOSYS on nommu systems, and goes out of its way to prevent any
	  cross-compile compatible compile-time probes for a nommu system.
	  (It doesn't even #define __MUSL__ in features.h.) Musl does this
	  despite the fact that a nommu system can't even run standard ELF
	  binaries (requiring specially packaged executables) because it wants
	  to force every program to either include all nommu code in every
	  instance ever built, or drop nommu support altogether.

	  Building a toolchain scripts/mcm-buildall.sh patches musl to fix this.

endmenu
