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, shows available commands. First argument is
	  name of a command to run, followed by any arguments to that command.

	  --long	Show path to each command

	  To install command symlinks, try:
	    for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done

	  Most toybox commands also understand the following arguments:

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

	  The filename "-" means stdin, "--" stops argument parsing,
	  and 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.

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 exteral -lcrypto library.

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_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_MUSL_NOMMU_IS_BROKEN
	bool "Workaround for musl-libc breakage on nommu systems."
	default n
	help
	  When using musl-libc on a nommu system, you'll need to say "y" here.

	  Although uclibc lets you detect support for things like fork() and
	  daemon() at compile time, musl intentionally includes broken versions
	  that always return -ENOSYS on nommu systems, and goes out of its way
	  to prevent any cross-compile compatible compile-time probes for a
	  nommu system.

	  Musl does this despite the fact that a nommu system can't even run
	  standard ELF binaries, and requires specially packaged executables.
	  (You can't even check a #define to see that you're building against
	  musl, due to its maintainer's policy that musl never has bugs that
	  require workarounds.)

	  So our only choice is to manually provide a musl nommu bug workaround
	  you can manually select to enable (larger, slower) nommu support with
	  musl.

	  You don't need this for uClibc, we have a compile time probe that
	  autodetects nommu support there.

endmenu
