#

mainmenu "Buildroot2 Configuration"

config BR2_HAVE_DOT_CONFIG
	bool
	default y

choice
	prompt "Target Architecture"
	default BR2_i386
	help
	  Stuff

config BR2_alpha
	bool "alpha"
config BR2_arm
	bool "arm"
config BR2_armeb
	bool "armeb"
config BR2_cris
	bool "cris"
config BR2_i386
	bool "i386"
config BR2_m68k
	bool "m68k"
config BR2_mips
	bool "mips"
config BR2_mipsel
	bool "mipsel"
config BR2_nios2
	bool "nios2"
config BR2_powerpc
	bool "powerpc"
config BR2_sh
	bool "superh"
config BR2_sh64
	bool "superh64"
config BR2_sparc
	bool "sparc"
config BR2_x86_64
	bool "x86_64"
endchoice

#
# Keep the variants separate, there's no need to clutter everything else.
# sh is fairly "special" in this regard, as virtually everyone else has
# things kept down to a _sensible_ number of target variants. No such
# luck for sh..
#
choice
	prompt "Target Architecture Variant"
	depends BR2_arm || BR2_armeb
	default BR2_generic_arm
config BR2_generic_arm
	bool "generic_arm"
config BR2_arm610
	bool "arm610"
config BR2_arm710
	bool "arm710"
config BR2_arm720t
	bool "arm720t"
config BR2_arm920t
	bool "arm920t"
config BR2_arm922t
	bool "arm922t"
config BR2_arm926t
	bool "arm926t"
config BR2_arm1136jf_s
	bool "arm1136jf_s"
config BR2_sa110
	bool "sa110"
config BR2_sa1100
	bool "sa1100"
config BR2_xscale
	bool "xscale"
endchoice

config BR2_ARM_TYPE
	string
	default ARM610		if BR2_arm610
	default ARM710		if BR2_arm710
	default ARM720T		if BR2_arm720t
	default ARM920T		if BR2_arm920t
	default ARM922T		if BR2_arm922t
	default ARM926T		if BR2_arm926t
	default ARM1136JF_S 	if BR2_arm1136jf_s
	default ARM_SA110	if BR2_sa110
	default ARM_SA1100	if BR2_sa1100
	default ARM_XSCALE	if BR2_xscale
	default GENERIC_ARM	if BR2_generic_arm

choice
	prompt "Target ABI"
	depends BR2_arm || BR2_armeb
	default BR2_ARM_OABI
config BR2_ARM_OABI
	bool "OABI"
config BR2_ARM_EABI
	bool "EABI"
endchoice

choice
	prompt "Target Architecture Variant"
	depends BR2_sh
	default BR2_sh4
config BR2_sh2a_nofpueb
	bool "sh2a_nofpueb"
config BR2_sh2eb
	bool "sh2eb"
config BR2_sh3
	bool "sh3"
config BR2_sh3eb
	bool "sh3eb"
config BR2_sh4
	bool "sh4"
config BR2_sh4eb
	bool "sh4eb"
endchoice

#
# gcc builds libstdc++ differently depending on the
# host tuplet given to it, so let people choose
#
choice
	prompt "Target Architecture Variant"
	depends BR2_i386
	default BR2_x86_i686
config BR2_x86_i386
	bool "i386"
config BR2_x86_i486
	bool "i486"
config BR2_x86_i586
	bool "i586"
config BR2_x86_i686
	bool "i686"
endchoice

config BR2_ARCH
	string
	default "alpha"		if BR2_alpha
	default "arm"		if BR2_arm
	default "armeb"		if BR2_armeb
	default "cris"		if BR2_cris
	default "i386"		if BR2_x86_i386
	default "i486"		if BR2_x86_i486
	default "i586"		if BR2_x86_i586
	default "i686"		if BR2_x86_i686
	default "m68k"		if BR2_m68k
	default "mips"		if BR2_mips
	default "mipsel"	if BR2_mipsel
	default "nios2"		if BR2_nios2
	default "powerpc"	if BR2_powerpc
	default "sh2a_nofpueb"	if BR2_sh2a_nofpueb
	default "sh2eb"		if BR2_sh2eb
	default "sh3"		if BR2_sh3
	default "sh3eb"		if BR2_sh3eb
	default "sh4"		if BR2_sh4
	default "sh4eb"		if BR2_sh4eb
	default "sh64"		if BR2_sh64
	default "sparc"		if BR2_sparc
	default "x86_64"	if BR2_x86_64

config BR2_ENDIAN
	string
	default "LITTLE" if BR2_arm || BR2_cris || BR2_i386 || BR2_mipsel || \
	                    BR2_sh3 || BR2_sh4 || BR2_x86_64 || BR2_nios2 || \
			    BR2_sh64
	default "BIG"    if BR2_alpha || BR2_armeb || BR2_m68k || BR2_mips || \
	                    BR2_powerpc || BR2_sh2a_nofpueb || BR2_sh2eb || \
	                    BR2_sh3eb || BR2_sh4eb || BR2_sparc

menu "Build options"

config BR2_WGET
	string "Wget command"
	default "wget --passive-ftp -nd"

config BR2_SVN
	string "Subversion (svn) checkout command"
	default "svn co"

config BR2_ZCAT
	string "zcat command"
	default "zcat"
	help
	  Command to be used to extract a gzip'ed file to stdout.
	  zcat is identical to gunzip -c except that the former may
	  not be available on your system.
	  Default is "zcat"
	  Other possible values include "gunzip -c"

config BR2_TAR_OPTIONS
	string "Tar options"
	default ""
	help
	  Options to pass to tar when extracting the sources.
	  E.g. " -v --exclude='*.svn*'" to exclude all .svn internal files
	  and to be verbose.

config BR2_DL_DIR
	string "Download dir"
	default "$(BASE_DIR)/dl"
	help
	  Directory to store all the source files that we need to fetch.

config BR2_SOURCEFORGE_MIRROR
	string "Sourceforge mirror site"
	default "easynews"
	help
	    Sourceforge has a system of mirror sites.  Some sites may be closer
	    to your location, and sometimes mirror sites go down and are no longer
	    available.  This option allows you to select your preferred Sourceforge
	    mirror site.

	    The list of mirrors is available here:
	    http://prdownloads.sourceforge.net/index-sf.html?download

config BR2_STAGING_DIR
	string "Toolchain and header file location?"
	default "$(BUILD_DIR)/staging_dir"
	help
	    This is the location where the toolchain will be installed.  The
	    toolchain will not work if it is moved from this location.
	    Therefore, if you wish to package up a uClibc toolchain, it is
	    important that is is set to the final location where the toolchain
	    will be used.

	    Most people will leave this set to the default value of
	    "$(BUILD_DIR)/staging_dir".

config BR2_TOPDIR_PREFIX
	string "Custom build dir prefix"
	default ""
	help
	    Add a custom string to the beginning of the build directories.

	    build_ARCH -> [PREFIX]_build_ARCH
	    toolchain_build_ARCH -> [PREFIX]_toolchain_build_ARCH

config BR2_TOPDIR_SUFFIX
	string "Custom build dir suffix"
	default ""
	help
	    Add a custom string to the end of the build directories.

	    build_ARCH -> build_ARCH_[SUFFIX]
	    toolchain_build_ARCH -> toolchain_build_ARCH_[SUFFIX] 

config BR2_GNU_BUILD_SUFFIX
	string "GNU build hostname suffix"
	default "pc-linux-gnu"
	help
	    The string used to pass to configure scripts via the
	    --build= option.  Just specify the suffix here, the leading
	    arch will be filled in automatically.

	    Here's some copy and paste build host options for you:
	      linux:   pc-linux-gnu
	      cygwin:  pc-cygwin
	      os x:    apple-darwin7 / apple-darwin8

config BR2_GNU_TARGET_SUFFIX
	string "GNU target suffix"
	default "linux-uclibcgnueabi" if BR2_ARM_EABI
	default "linux-uclibc"
	help
	    The string used to pass to configure scripts via the
	    --target= option.  Just specify the suffix here, the leading
	    arch will be filled in automatically.

	    Most users will want to stick with the default setting, though
	    other users (most notably ARM EABI) like to add on to this in
	    order to stay in line with gcc conventions.

	    Default options are:
	      linux-uclibcgnueabi for ARM EABI
	      linux-uclibc for the rest

config BR2_JLEVEL
	int "Number of jobs to run simultaneously"
	default "1"
	help
	    Number of jobs to run simultaneously

endmenu

source "toolchain/Config.in"

source "package/Config.in"

source "target/Config.in"
