#

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 "sh"
config BR2_sparc
	bool "sparc"
config BR2_x86_64
	bool "x86_64"
endchoice

#
# Keep the variants seperate, 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 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 "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
	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_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_JLEVEL
	int "Number of jobs to run simultaneously"
	default "1"
	help
	    Number of jobs to run simultanesouly

endmenu

source "toolchain/Config.in"

source "package/Config.in"

source "target/Config.in"
