# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

menuconfig TARGET_OPTIONS
	bool "Target Options"  if DEVEL

	config TARGET_OPTIMIZATION
		string "Target Optimizations" if TARGET_OPTIONS
		default DEFAULT_TARGET_OPTIMIZATION
		help
		  Optimizations to use when building for the target host.

	config SOFT_FLOAT
		bool "Use software floating point by default" if TARGET_OPTIONS
		default y if !HAS_FPU
		depends on arm || armeb || powerpc || mipsel || mips || mips64el || mips64
		help
		  If your target CPU does not have a Floating Point Unit (FPU) or a
		  kernel FPU emulator, but you still wish to support floating point
		  functions, then everything will need to be compiled with soft floating
		  point support (-msoft-float).

		  Most people will answer N.

	config USE_MIPS16
		bool "Build packages with MIPS16 instructions" if TARGET_OPTIONS
		depends on HAS_MIPS16
		default y
		help
		  If your target CPU does support the MIPS16 instruction set
		  and you want to use it for packages, enable this option.
		  MIPS16 produces smaller binaries thus reducing pressure on
		  caches and TLB.

		  Most people will answer N.

config UPDATE_TOOLCHAIN
	bool "Update Toolchain" if DEVEL
	default n
	help
	  Compile toolchain and update into prebuilt dir.

config MUSL_OPTIMIZATION
	bool "MUSL_OPTIMIZATION" if UPDATE_TOOLCHAIN && USE_MUSL
	depends on UPDATE_TOOLCHAIN
	depends on arm
	default y
	help
	  MUSL C library optimization.

config NEED_TOOLCHAIN
	bool
	depends on DEVEL
	default y if !EXTERNAL_TOOLCHAIN

choice
	prompt "Select external toolchain C library" if DEVEL
	depends on EXTERNAL_TOOLCHAIN
	default EXT_TOOLCHAIN_LIBC_USE_MUSL
	help
	  Select the C library implementation.
	config EXT_TOOLCHAIN_LIBC_USE_GLIBC
		bool "Use glibc"
		select USE_GLIBC
		depends on !arc

	config EXT_TOOLCHAIN_LIBC_USE_MUSL
		bool "Use musl"
		select USE_MUSL
		depends on !(arc || mips64 || mips64el)
endchoice

menuconfig TOOLCHAINOPTS
	bool "Toolchain Options"  if DEVEL
	depends on NEED_TOOLCHAIN

menuconfig EXTRA_TARGET_ARCH
	bool
	prompt "Enable an extra toolchain target architecture" if TOOLCHAINOPTS
	depends on !sparc
	default y	if powerpc64
	default n
	help
	  Some builds may require a 'biarch' toolchain. This option
	  allows you to specify an additional target arch.

	  Most people will answer N here.

	config EXTRA_TARGET_ARCH_NAME
		string
		default "powerpc64"	if powerpc64
		prompt "Extra architecture name" if EXTRA_TARGET_ARCH
		help
		  Specify the cpu name (eg powerpc64 or x86_64) of the
		  additional target architecture.

	config EXTRA_TARGET_ARCH_OPTS
		string
		default "-m64"		if powerpc64
		prompt "Extra architecture compiler options" if EXTRA_TARGET_ARCH
		help
		  If you're specifying an addition target architecture,
		  you'll probably need to also provide options to make
		  the compiler use this alternate arch.

		  For example, if you're building a compiler that can build
		  both powerpc and powerpc64 binaries, you'll need to
		  specify -m64 here.


	choice
		prompt "MIPS64 user-land ABI" if TOOLCHAINOPTS && (mips64 || mips64el)
		default MIPS64_ABI_N64
		help
		   MIPS64 supports 3 different user-land ABIs: o32 (legacy),
		   n32 and n64.

		config MIPS64_ABI_N64
			bool "n64"

		config MIPS64_ABI_N32
			bool "n32"

		config MIPS64_ABI_O32
			bool "o32"

	endchoice

comment "Binary tools"
	depends on TOOLCHAINOPTS

source "toolchain/binutils/Config.in"

comment "Compiler"
	depends on TOOLCHAINOPTS

source "toolchain/gcc/Config.in"

comment "C Library"
	depends on TOOLCHAINOPTS

choice
	prompt "C Library implementation" if TOOLCHAINOPTS
	depends on UPDATE_TOOLCHAIN
	default LIBC_USE_GLIBC if mips64 || mips64el
	default LIBC_USE_UCLIBC if arc
	default LIBC_USE_MUSL
	help
	  Select the C library implementation.

	config LIBC_USE_GLIBC
		bool "Use glibc"
		select USE_GLIBC
		depends on !arc

	config LIBC_USE_MUSL
		select USE_MUSL
		bool "Use musl"
		depends on !(arc || mips64 || mips64el)

endchoice

source "toolchain/glibc/Config.in"

comment "Debuggers"
	depends on TOOLCHAINOPTS

config GDB
	bool
	prompt "Build gdb" if TOOLCHAINOPTS
	default y if !EXTERNAL_TOOLCHAIN
	help
	  Enable if you want to build the gdb.

config INSIGHT
	bool
	prompt "Build insight-gdb" if TOOLCHAINOPTS
	select GDB
	default n
	help
	  Enable if you want to build insight-gdb.


config TOOLCHAIN_LIBC
	string
	depends on !UPDATE_TOOLCHAIN
	default "glibc"   if EXT_TOOLCHAIN_LIBC_USE_GLIBC
	default "musl"	  if !EXT_TOOLCHAIN_LIBC_USE_GLIBC

config USE_GLIBC
	default y if USE_EXTERNAL_LIBC && EXT_TOOLCHAIN_LIBC_USE_GLIBC
	default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && (mips64 || mips64el)
	bool

config USE_UCLIBC
	default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && (arc)
	bool

config USE_MUSL
	default y if USE_EXTERNAL_LIBC && !EXT_TOOLCHAIN_LIBC_USE_GLIBC
	default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && !(arc || mips64 || mips64el)
	bool

config USE_EXTERNAL_LIBC
	bool
	default y if EXTERNAL_TOOLCHAIN

source "toolchain/binutils/Config.version"
source "toolchain/gcc/Config.version"

source "toolchain/glibc/Config.version"
source "toolchain/musl/Config.version"

config LIBC
	string
	default "glibc"   if USE_GLIBC
	default "musl"	  if USE_MUSL

config LIBC_VERSION
	string
	default GLIBC_VERSION   if USE_GLIBC
	default MUSL_VERSION	if USE_MUSL

config TARGET_SUFFIX
	string
	default "gnueabi"         if USE_GLIBC && (arm || armeb)
	default "gnu"             if USE_GLIBC && !(arm || armeb)
	default "muslgnueabi"     if USE_MUSL && (arm || armeb)
	default "musl"            if USE_MUSL && !(arm || armeb)

config EXTERNAL_TOOLCHAIN
	bool
	default y if !UPDATE_TOOLCHAIN