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 | --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
	  --version	Show toybox version

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

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"
	default y
	depends on TOYBOX_HELP
	help
	  Support --help argument in all commands, even ones with a NULL
	  optstring. Produces the same output as "help command".

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
