config ARCH
	string
	option env="ARCH"

config KERNELVERSION
	string
	option env="KERNELVERSION"

config DEFCONFIG_LIST
	string
	option defconfig_list
	default "$ARCH_DEFCONFIG"
	default "arch/$ARCH/defconfig"

config GREGORIAN_CALENDER
	bool

config HAS_KALLSYMS
	bool

config HAS_MODULES
	bool

config CMD_MEMORY
	bool

config ENV_HANDLING
	select CRC32
	bool

config GENERIC_GPIO
	bool

config BLOCK
	bool

config BLOCK_WRITE
	bool

config HAVE_NOSHELL
	bool

menu "General Settings              "

config LOCALVERSION_AUTO
	bool "Automatically append version information to the version string"
	default y
	help
	  This will try to automatically determine if the current tree is a
	  release tree by looking for git tags that belong to the current
	  top of tree revision.

	  A string of the format -gxxxxxxxx will be added to the localversion
	  if a git-based tree is found.  The string generated by this will be
	  appended after any matching localversion* files, and after the value
	  set in CONFIG_LOCALVERSION.

	  (The actual string used here is the first eight characters produced
	  by running the command:

	    $ git rev-parse --verify HEAD

	  which is done within the script "scripts/setlocalversion".)

config BOARDINFO
	string

config ENVIRONMENT_VARIABLES
	bool "environment variables support"

config FORCE_BAREBOX_AUTH
	depends on (COMCERTO_ULOADER || COMCERTO_NAND_ULOADER)
	bool "Force RSA authentication of barebox binary"

config FORCE_KERNEL_AUTH
	depends on COMCERTO_BOOTLOADER
	bool "Force RSA authentication of kernel image"

config DEVELOPER_BAREBOX
	depends on COMCERTO_BOOTLOADER
	select DRIVER_SERIAL_FAST_UART
	bool "Enable developer barebox build"
	help
		A developer barebox build skips most of the production setup;
		most notably, it will not verify the kernel before booting,
		unless FORCE_KERNEL_AUTH is also set.

config PROD
	bool "Production build (sign barebox)"

menu "memory layout                 "

config HAVE_MMU
	bool

config MMU
	bool "Enable MMU"
	depends on HAVE_MMU
	help
	  Saying yes here enables the MMU. This is useful on some architectures
	  to enable the data cache which depends on the MMU. See Documentation/mmu.txt
	  for further information.

config HAVE_CONFIGURABLE_TEXT_BASE
	bool

config TEXT_BASE
	depends on HAVE_CONFIGURABLE_TEXT_BASE
	prompt "TEXT_BASE"
	hex
	default ARCH_TEXT_BASE
	help
	  The Address barebox gets linked at.

config HAVE_CONFIGURABLE_MEMORY_LAYOUT
	bool

choice
	prompt "select memory layout"
	depends on HAVE_CONFIGURABLE_MEMORY_LAYOUT
	default MEMORY_LAYOUT_DEFAULT

config MEMORY_LAYOUT_DEFAULT
	bool "use default memory layout"
	help
	  select this option to use bareboxs standard memory layout:
	  
	  stack
	  -----
	  malloc heap
	  -----
	  TEXT_BASE

config MEMORY_LAYOUT_FIXED
	bool "manually assign a memory layout"
	help
	  select this option to manually assign stack base and malloc
	  heap base

endchoice

config STACK_BASE
	depends on MEMORY_LAYOUT_FIXED
	hex
	prompt "STACK_BASE"

config STACK_SIZE
	hex
	default 0x8000
	prompt "Stack size"

config MALLOC_BASE
	depends on MEMORY_LAYOUT_FIXED
	hex
	prompt "MALLOC_BASE"

config MALLOC_SIZE
	hex
	default 0x400000
	prompt "malloc area size"
endmenu

config BROKEN
	bool
	prompt "Prompt for broken or incomplete code"

config EXPERIMENTAL
	bool
	prompt "Prompt for experimental code"

choice
	prompt "malloc implementation"

config MALLOC_DLMALLOC
	bool "dlmalloc"

config MALLOC_DUMMY
	bool "dummy malloc"
	help
	  select this option to use a dummy malloc implementation. With this
	  memory is never freed. This is suitable for well tested noninteractive
	  environments only.

endchoice

config MODULES
	depends on HAS_MODULES
	depends on EXPERIMENTAL
	bool "module support"
	help
	  This option enables support for loadable modules via insmod. Module
	  support is quite experimental at the moment. There is no convenient
	  way to compile modules and the list of exported symbols to actually
	  make use of modules is short to nonexistent

config KALLSYMS
	depends on HAS_KALLSYMS
	bool "kallsyms"
	help
	  With Kallsyms enabled all symbols are compiled into the barebox image.
	  This is useful to print a nice backtrace when an exception occurs.

config RELOCATABLE
	depends on PPC
	bool "generate relocatable barebox binary"
	help
	  A non relocatable barebox binary will run at it's compiled in
	  link address in RAM. This leads to smaller image sizes but may
	  put barebox just in the middle of RAM. With this option enabled
	  instead barebox can determine this address at runtime and thus
	  allowing it to relocate to the end of the available RAM. This
	  way you have the whole memory in a single piece.

config MACH_HAS_LOWLEVEL_INIT
	bool

config MACH_DO_LOWLEVEL_INIT
	bool "run machine low-level init"
	depends on MACH_HAS_LOWLEVEL_INIT
	default y
	help
	  This entry enables SDRAM and other board low level initialization
	  on many platforms. Disabling this option allows configurations to use
	  barebox as a second stage boot loader.

config ARCH_HAS_LOWLEVEL_INIT
	bool

config PROMPT
	string
	prompt "barebox command prompt"
	default "barebox:"

config BAUDRATE
	int
	prompt "Default baudrate"
	default 115200

config SIMPLE_READLINE
	bool
	default y
	depends on !CMDLINE_EDITING

config LONGHELP
	bool
	prompt "Enable long help texts"

config CBSIZE
	int
	prompt "Buffer size for input from the Console"
	default 1024

config MAXARGS
	int
	prompt "max. Number of arguments accepted for monitor commands"
	default 16

choice
	prompt "Select your shell"

	config SHELL_HUSH
		bool "hush parser"
		select ENVIRONMENT_VARIABLES
		select COMMAND_SUPPORT
		help
		  Enable hush support. This is the most advanced shell available
		  for barebox.

	config SHELL_SIMPLE
		bool "Simple parser"
		select COMMAND_SUPPORT
		help
		  simple shell. No if/then, no return values from commands, no loops

	config SHELL_NONE
		bool "no shell (noninteractive build)"
		depends on HAVE_NOSHELL
		help
		  No shell at all. This means no shell is started and your board has
		  to provide a run_shell() function which is started at the end of
		  the barebox startup process.
endchoice

config GLOB
	bool
	prompt "hush globbing support"
	depends on SHELL_HUSH
	help
	  If you want to use wildcards like * or ? say y here.
	
config PROMPT_HUSH_PS2
	string
	depends on SHELL_HUSH
	prompt "hush PS2"
	default "> "

config HUSH_FANCY_PROMPT
	bool
	depends on SHELL_HUSH
	select PROCESS_ESCAPE_SEQUENCE
	prompt "allow fancy hush prompts"
	help
	  Allow to set PS1 from the command line. PS1 can have several escaped commands
	  like \h for CONFIG_BOARDINFO or \w for the current working directory.

config HUSH_GETOPT
	bool
	depends on SHELL_HUSH
	prompt "enable builtin getopt"
	help
	  This enables a getopt function builtin to hush.

config CMDLINE_EDITING
	bool
	prompt "Enable command line editing"

config AUTO_COMPLETE
	bool
	depends on CMDLINE_EDITING
	prompt "Enable auto completion"

config MEM_SIZE
	bool
	prompt "Get available RAM size"

config MENU
	bool
	prompt "Menu Framework"
	help
	   a menu framework that allow us to create list menu to simplify
	   barebox and make it more user-frendly

config PASSWORD
	bool
	prompt "Password Framework"
	select DIGEST
	help
	  allow you to have password protection framework

if PASSWORD

choice
	prompt "passwd checksum"

config PASSWD_SUM_MD5
	bool "MD5"
	select MD5

config PASSWD_SUM_SHA1
	bool "SHA1"
	select SHA1

config PASSWD_SUM_SHA256
	bool "SHA256"
	select SHA256

endchoice

endif

config DYNAMIC_CRC_TABLE
	bool
	depends on CRC32
	prompt "Generate the crc32 table dynamically"
	default y
	help
	  Saying yes to this option saves around 800 bytes of binary size.
	  If unsure say yes.

config ERRNO_MESSAGES
	bool
	prompt "print error values as text"
	default y

config TIMESTAMP
	bool
	default y
	select GREGORIAN_CALENDER
	prompt "print timestamp information from images"
	help
	  When CONFIG_TIMESTAMP is selected, the timestamp
	  (date and time) of an image is printed by image
	  commands like bootm or iminfo. This option is
	  automatically enabled when you select CFG_CMD_DATE .

config CONSOLE_FULL
	bool
	default y
	prompt "Enable full console support"
	help
	  This option enables full console support capable of
	  handling multiple consoles.

config CONSOLE_SIMPLE
	bool
	default y
	depends on !CONSOLE_FULL

config CONSOLE_ACTIVATE_FIRST
	depends on CONSOLE_FULL
	bool
	default y
	prompt "activate first console on startup"
	help
	  Normally on startup all consoles are disabled, so you won't
	  see anything from barebox starting. Enabling this option
	  enables the first console.

config CONSOLE_ACTIVATE_ALL
	depends on CONSOLE_FULL
	depends on !CONSOLE_ACTIVATE_FIRST
	bool
	prompt "activate all consoles on startup"
	help
	  Enabling this options activates all consoles on startup, so
	  you will get output and a prompt on all consoles simultaneously.

config EARLY_CONSOLE_PORT
	string
	depends on HAS_EARLY_INIT
	prompt "Console device for early output"
	help
	  Choose the device on which you want to have early output printed
	  to. This is only used during startup when no device information
	  is available.

config EARLY_CONSOLE_BAUDRATE
	int
	default 115200
	depends on HAS_EARLY_INIT
	prompt "Early console baudrate"
	help
	  Choose the baudrate for your early console.

config OF_FLAT_TREE
	bool
	prompt "Open Firmware flat device tree support"

config PARTITION
	bool
	prompt "Enable Partitions"

config DEFAULT_ENVIRONMENT
	bool
	default y
	prompt "Compile in default environment"
	help
	  Enabling this option will give you a default environment when
	  the environment found in the environment sector is invalid

config DEFAULT_ENVIRONMENT_GENERIC
	bool
	depends on DEFAULT_ENVIRONMENT
	depends on SHELL_HUSH
	select HUSH_GETOPT
	select CMD_CRC
	select CMD_CRC_CMP
	prompt "Default environment generic"
	help
	  With this option barebox will use the generic default
	  environment found under defaultenv/ in the src tree.
	  The Directory given with DEFAULT_ENVIRONMENT_PATH
	  will be added to the default environment. This should
	  at least contain a /env/config file.
	  This will be able to overwrite the files from defaultenv.

config DEFAULT_ENVIRONMENT_PATH
	string
	depends on DEFAULT_ENVIRONMENT
	prompt "Default environment path"
	help
	  Space separated list of pathes the default environment will be taken from.
	  Relative pathes will be relative to the barebox Toplevel dir, but absolute
	  pathes are fine aswell.

config POLLER
	bool "generic polling infrastructure"

config ANTIREBOOTLOOP
	bool "Anti reboot loop feature"
	help
	  The anti reboot loop feature is a communication protocol between the
	  bootloader and the kernel that allows the bootloader to determine if a
	  certain kernel/rootfs image is "good". The way it works is that the
	  bootloader writes a certain bit pattern to a previously agreed memory
	  location. If a userspace app decides that the kernel has booted ok and
	  that the user space environment is sane, it tells the kernel which then
	  flips a bit in DRAM to communicate to the bootloader that this image is
	  considered "good".  Now, if the system reboots due to some failure
	  condition before said bit has been flipped, the bootloader is able to
	  detect this situation and switch back to a different kernel/rootfs
	  image.

if TPM

config TPM_LITE
	bool "Lightweight TPM library"
	default y

endif

endmenu

menu "Debugging                     "

config DEBUG_INFO
	bool
	prompt "enable debug symbols"
	help
	  Enable build of barebox with -g.

config ENABLE_FLASH_NOISE
	bool
	prompt "verbose flash handling"
	help
	  Enable this to get noisy flash handling routines

config ENABLE_PARTITION_NOISE
	bool
	prompt "verbose partition handling"
	help
	  Enable this to get noisy partition handling routines

config ENABLE_DEVICE_NOISE
	bool
	prompt "verbose device handling"
	help
	  Enable this to get noisy device handling routines

endmenu
