# binutils options

comment "GNU binutils"

choice
    bool
    prompt "binutils version"
# Don't remove next line
# CT_INSERT_VERSION_BELOW

config BINUTILS_V_2_21_53
    bool
    prompt "2.21.53 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select BINUTILS_2_21_or_later

config BINUTILS_V_2_21_1a
    bool
    prompt "2.21.1a"
    select BINUTILS_2_21_or_later

config BINUTILS_V_2_20_1a
    bool
    prompt "2.20.1a"
    select BINUTILS_2_20_or_later

config BINUTILS_V_2_19_1a
    bool
    prompt "2.19.1a"
    select BINUTILS_2_19_or_later

config BINUTILS_V_2_18a
    bool
    prompt "2.18a"
    select BINUTILS_2_18_or_later

config BINUTILS_V_2_17a
    bool
    prompt "2.17a (OBSOLETE)"
    depends on OBSOLETE

config BINUTILS_V_2_16_1a
    bool
    prompt "2.16.1a (OBSOLETE)"
    depends on OBSOLETE

endchoice

config BINUTILS_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "2.21.53" if BINUTILS_V_2_21_53
    default "2.21.1a" if BINUTILS_V_2_21_1a
    default "2.20.1a" if BINUTILS_V_2_20_1a
    default "2.19.1a" if BINUTILS_V_2_19_1a
    default "2.18a" if BINUTILS_V_2_18a
    default "2.17a" if BINUTILS_V_2_17a
    default "2.16.1a" if BINUTILS_V_2_16_1a

config BINUTILS_2_21_or_later
    bool
    select BINUTILS_2_20_or_later
    select BINUTILS_HAS_GOLD
    select BINUTILS_HAS_PLUGINS

config BINUTILS_2_20_or_later
    bool
    select BINUTILS_2_19_or_later

config BINUTILS_2_19_or_later
    bool
    select BINUTILS_2_18_or_later

config BINUTILS_2_18_or_later
    bool
    select BINUTILS_HAS_PKGVERSION_BUGURL

config BINUTILS_HAS_GOLD
    bool

config BINUTILS_GOLD_SUPPORTS_ARCH
    bool

config BINUTILS_HAS_PLUGINS
    bool

config BINUTILS_HAS_PKGVERSION_BUGURL
    bool

# Only these architectures have support in gold
config ARCH_arm
    select BINUTILS_GOLD_SUPPORTS_ARCH

config ARCH_x86
    select BINUTILS_GOLD_SUPPORTS_ARCH

# Force using the BFD linker if needed
# This is the case for some C libraries (eg. glibc and
# eglibc at least) and affected components can select this
config BINUTILS_FORCE_LD_BFD
    bool

choice
    bool
    prompt "Linkers to enable"

config BINUTILS_LINKER_LD
    bool
    prompt "ld"
    help
      The historical, bfd linker.

config BINUTILS_LINKER_GOLD
    bool
    prompt "gold"
    depends on BINUTILS_HAS_GOLD
    depends on BINUTILS_GOLD_SUPPORTS_ARCH
    depends on ! BINUTILS_FORCE_LD_BFD
    depends on EXPERIMENTAL
    select BINUTILS_GOLD_INSTALLED
    help
      gold is a new, optimised, multi-threaded linker with support
      for plugins. Designed to be a drop-in replacement for the
      original linker, ld, it can be much faster, with a 5:1 or
      bigger ratio being not uncommon, YMMV.

config BINUTILS_LINKER_LD_GOLD
    bool
    prompt "ld, gold"
    depends on BINUTILS_HAS_GOLD
    depends on BINUTILS_GOLD_SUPPORTS_ARCH
    depends on EXPERIMENTAL
    select BINUTILS_GOLD_INSTALLED
    select BINUTILS_LINKER_BOTH
    help
      Both the historical ld and the new gold linkers will be
      installed, with ld being the default linker used.
      
      See help for gold, above.

config BINUTILS_LINKER_GOLD_LD
    bool
    prompt "gold, ld"
    depends on BINUTILS_HAS_GOLD
    depends on BINUTILS_GOLD_SUPPORTS_ARCH
    depends on EXPERIMENTAL
    select BINUTILS_GOLD_INSTALLED
    select BINUTILS_LINKER_BOTH
    select BINUTILS_LD_WRAPPER if BINUTILS_FORCE_LD_BFD
    help
      Both the historical ld and the new gold linkers will be
      installed, with gold being the default linker used.
      
      See help for gold, above.

endchoice # Enable linkers

if BINUTILS_LINKER_GOLD
comment "WARNING! gold is not capable of"
comment "|         building glibc/eglibc!"
endif # BINUTILS_LINKER_GOLD

config BINUTILS_GOLD_INSTALLED
    bool

config BINUTILS_GOLD_THREADS
    bool
    prompt "|  Enable threaded gold"
    depends on BINUTILS_GOLD_INSTALLED
    help
      When configured with threads, gold can link in parallel,
      possibly cooperating with a make jobserver.

config BINUTILS_LINKER_BOTH
    bool

config BINUTILS_LINKERS_LIST
    string
    default "ld"        if BINUTILS_LINKER_LD
    default "gold"      if BINUTILS_LINKER_GOLD
    default "ld,gold"   if BINUTILS_LINKER_LD_GOLD
    default "gold,ld"   if BINUTILS_LINKER_GOLD_LD

config BINUTILS_LD_WRAPPER
    bool
    prompt "|  Add ld wrapper"
    depends on BINUTILS_LINKER_BOTH
    help
      Add an ld wrapper that calls to either gold or ld.
      
      By default, the wrapper will call to the default wrapper,
      but if you set the environment variable CTNG_LD_IS, you
      can change which linker will get called:
        CTNG_LD_IS=gold     will unconditionally call the gold linker
        CTNG_LD_IS=bfd      will unconditionally call the old bfd ld linker

config BINUTILS_LINKER_DEFAULT
    string
    default "bfd"   if BINUTILS_LINKER_LD || BINUTILS_LINKER_LD_GOLD
    default "gold"  if BINUTILS_LINKER_GOLD || BINUTILS_LINKER_GOLD_LD

config BINUTILS_PLUGINS
    bool
    prompt "Enable support for plugins"
    depends on BINUTILS_HAS_PLUGINS
    depends on ! STATIC_TOOLCHAIN
    help
      binutils can be extended through the use of plugins.
      Especially, gold can use the lto-plugin, as installed
      by gcc, to handle LTO.

config BINUTILS_EXTRA_CONFIG_ARRAY
    string
    prompt "binutils extra config"
    default ""
    help
      Extra flags passed onto ./configure when configuring
      
      You can enter multiple arguments here, and arguments can contain spaces
      if they are properly quoted (or escaped, but prefer quotes). Eg.:
          --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space

config BINUTILS_FOR_TARGET
    bool
    prompt "binutils libraries for the target"
    depends on ! BARE_METAL
    depends on ! BACKEND
    help
      Some utilities may need binutils libraries to be available on
      the target, eg. oprofile.

if BINUTILS_FOR_TARGET

config BINUTILS_FOR_TARGET_IBERTY
    bool
    prompt "libiberty"
    default y

config BINUTILS_FOR_TARGET_BFD
    bool
    prompt "libbfd"
    default y

endif # BINUTILS_FOR_TARGET
