#

mainmenu "Buildroot2 Configuration"

config BR2_HAVE_DOT_CONFIG
	bool
	default y

choice
	prompt "Target Architecture"
	default BR2_i386
	help
	  Select the target architecture family to build for.

config BR2_alpha
	bool "alpha"
config BR2_arm
	bool "arm"
config BR2_armeb
	bool "armeb"
config BR2_avr32
	bool "avr32"
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
	help
	  Specific CPU variant to use

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_arm1176jz_s
	bool "arm1176jz-s"
config BR2_arm1176jzf_s
	bool "arm1176jzf-s"
config BR2_sa110
	bool "sa110"
config BR2_sa1100
	bool "sa1100"
config BR2_xscale
	bool "xscale"
config BR2_iwmmxt
	bool "iwmmxt"
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 ARM1176JZ_S	if BR2_arm1176jz_s
	default ARM1176JZF_S	if BR2_arm1176jzf_s
	default ARM_SA110	if BR2_sa110
	default ARM_SA1100	if BR2_sa1100
	default ARM_XSCALE	if BR2_xscale
	default ARM_IWMMXT	if BR2_iwmmxt
	default GENERIC_ARM	if BR2_generic_arm

choice
	prompt "Target ABI"
	depends BR2_arm || BR2_armeb
	default BR2_ARM_OABI
	help
	  Application Binary Interface to use

config BR2_ARM_OABI
	bool "OABI"
config BR2_ARM_EABI
	bool "EABI"
endchoice

choice
	prompt "Target Architecture Variant"
	depends BR2_avr32
config BR2_ap7000
	bool "AP7000"
config BR2_ap7010
	bool "AP7010"
config BR2_ap7020
	bool "AP7020"
endchoice


choice
	prompt "Target Architecture Variant"
	depends BR2_sh
	default BR2_sh4
	help
	  Specific CPU variant to use

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
	help
	  Specific CPU variant to use

config BR2_x86_i386
	bool "i386"
config BR2_x86_i486
	bool "i486"
config BR2_x86_i586
	bool "i586"
config BR2_x86_i686
	bool "i686"
config BR2_x86_pentium4
	bool "pentium4"
config BR2_x86_nocona
	bool "nocona"
config BR2_x86_core2
	bool "core2"
endchoice

choice
	prompt "Target Architecture Variant"
	depends BR2_x86_64
	default BR2_x86_64_core2
	help
	  Specific CPU variant to use

config BR2_x86_64_opteron
	bool "opteron"
config BR2_x86_64_nocona
	bool "nocona"
config BR2_x86_64_core2
	bool "core2"
endchoice

config BR2_ARCH
	string
	default "alpha"		if BR2_alpha
	default "arm"		if BR2_arm
	default "armeb"		if BR2_armeb
	default "avr32"		if BR2_avr32
	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 "i686"		if BR2_x86_pentium4
	default "i686"		if BR2_x86_nocona
	default "i686"		if BR2_x86_core2
	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
	default "x86_64"	if BR2_x86_64_nocona
	default "x86_64"	if BR2_x86_64_core2
	default "x86_64"	if BR2_x86_64_opteron

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_avr32 || 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 "gzip -d -c"
	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 "gzip -d -c"
	  Other possible values include "gunzip -c" or "zcat".

config BR2_BZCAT
	string "bzcat command"
	default "bzcat"
	help
	  Command to be used to extract a bzip2'ed file to stdout.
	  bzcat is identical to bunzip2 -c except that the former may
	  not be available on your system.
	  Default is "bzcat"
	  Other possible values include "bunzip2 -c" or "bzip2 -d -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_ATMEL_MIRROR
	depends BR2_TARGET_ATMEL && (BR2_avr32 || BR2_arm)
	string "Atmel AVR32/AT91 download site"
	default "ftp://at91dist:distrib@81.80.104.162/AT91_Third_Party_Design_Flow/Linux_Host/"
	help
	  Unofficial site for AVR32/AT91 Buildroot patches, or your local mirror.
	  Atmel does not currently support buildroot, but this site makes
	  available neccessary patches and prepatched packages useful
	  to extend a buildroot for AVR32 or AT91 ARM based boards.
	  Issues with contents of this server needs to be highlighted
	  on the buildroot mailing list and
	  should not be addressed directly to Atmel
	  Atmel provides support for their AVR32 chips on 
	  http://avr32linux.org/ or http://www.avrfreaks.net/
	  Atmel provides support for AT91 chips on www.at91.com.
	  Commercial AT91 Linux support is through www.timesys.com
	  Community  AT91 Linux support is through http://maxim.org.za/AT91_26.html

config BR2_AT91_PATCH_MIRROR
	depends BR2_TARGET_ATMEL && BR2_arm
	string "Atmel AT91 Linux Patch download site"
	default "http://maxim.org.za/AT91RM9200/2.6/"
	help
	  Patches for the AT91 generated by the Linux community
	  usually ends up here, courtesy of Andrew Victor
	  
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

config BR2_PREFER_IMA
	bool "prefer IMA compiles"
	default n
	help
	  Where possible, compile package with Inter Module Analysis.
	  This potentially uses alot of system resources on your compile
	  host with the benefit of creating smaller binaries for the target.

	  If unsure, say No.

	  WARNING: This is highly experimental at the moment.

config BR2_DEPRECATED
	bool "Show packages that are deprecated or obsolete"
	default n
	help
	  This option hides outdated/obsolete versions of packages.

config BR2_PREFER_STATIC_LIB
	bool "prefer static libraries"
	default n
	help
	  Where possible, build and use static libraries for the target.
	  This potentially increases your code size and should only be
	  used if you know what you do.
	  The default is to build dynamic libraries and use those on
	  the target filesystem.

	  WARNING: This is highly experimental at the moment.

endmenu

source "toolchain/Config.in"

source "package/Config.in"

source "target/Config.in"
