[OpenWrt-Devel] [PATCH 1/3] toolchain: add support of ARC architecture

Jonas Gorski jogo at openwrt.org
Thu Sep 3 09:18:50 EDT 2015


Hi,

On Wed, Sep 2, 2015 at 9:58 PM, Alexey Brodkin
<Alexey.Brodkin at synopsys.com> wrote:
> Hi Jonas,
>
> On Wed, 2015-09-02 at 10:08 +0200, Jonas Gorski wrote:
>> Hi,
>>
>> On Thu, Aug 27, 2015 at 1:03 PM, Alexey Brodkin
>> <Alexey.Brodkin at synopsys.com> wrote:
>> > This includes binutils, gcc, gdb and uClibc-ng.
>> >
>> > Latest release of ARC gcc (as of today it is "arc-2015.06")
>> > is based on upstream gcc 4.8.4.
>> >
>> > Sources are available on GitHub, see:
>> > https://github.com/foss-for-synopsys-dwc-arc-processors/gcc
>> >
>> > Latest release of ARC binutils (as of today it is "arc-2015.06")
>> > is based on upstream binutils 2.23.
>> >
>> > Sources are available on GitHub, see:
>> > https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/releases/tag/arc-2015.06
>> >
>> > Latest release of ARC GDB (as of today this is "arc-2015.06-gdb")
>> > is based on upstream gdb 7.9.1.
>> >
>> > Sources are available on GitHub, see:
>> > https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/releases/tag/arc-2015.06-gdb
>> >
>
> [snip]
>
>> > diff --git a/toolchain/binutils/Config.in b/toolchain/binutils/Config.in
>> > index 8d91223..0f670f1 100644
>> > --- a/toolchain/binutils/Config.in
>> > +++ b/toolchain/binutils/Config.in
>> > @@ -2,13 +2,19 @@
>> >
>> >  choice
>> >         prompt "Binutils Version" if TOOLCHAINOPTS
>> > -       default BINUTILS_VERSION_LINARO
>> > +       default BINUTILS_VERSION_ARC if arc
>> > +       default BINUTILS_VERSION_LINARO if !arc
>> >         help
>> >           Select the version of binutils you wish to use.
>> >
>> >         config BINUTILS_VERSION_LINARO
>> > +               depends on !arc
>> >                 bool "Linaro binutils 2.24"
>> >
>> > +       config BINUTILS_VERSION_ARC
>> > +               depends on arc
>> > +               bool "ARC binutils 2015.06"
>> > +
>> >  endchoice
>> >
>> >  config EXTRA_BINUTILS_CONFIG_OPTIONS
>> > @@ -21,5 +27,5 @@ config EXTRA_BINUTILS_CONFIG_OPTIONS
>> >  config BINUTILS_VERSION
>> >         string
>> >         prompt "Binutils Version" if (TOOLCHAINOPTS && NULL)
>> > -       default "linaro"          if BINUTILS_VERSION_LINARO
>> > -       default "linaro"
>> > +       default "linaro"          if BINUTILS_VERSION_LINARO || (!TOOLCHAINOPTS && !arc)
>> > +       default "arc"             if BINUTILS_VERSION_ARC || (!TOOLCHAINOPTS && arc)
>>
>> One of BINUTILS_VERSION_ARC and BINUTILS_VERSION_LINARO will always be
>> set regardless of TOOLCHAINOPTS being set, so you can drop the || ( )
>> part.
>
> Well that's not entirely correct.
> If TOOLCHAIN is not set then BINUTILS_VERSION_xxx won't be set as well.
> In other words following construction will lead to missing BINUTILS_VERSION
> in .config:
> ------------------------>8------------------------
> default "linaro"          if BINUTILS_VERSION_LINARO || (!TOOLCHAINOPTS && !arc)
> default "arc"             if BINUTILS_VERSION_ARC || (!TOOLCHAINOPTS && arc)
> ------------------------>8------------------------
>
> Following construction will work:
> ------------------------>8------------------------
> default "linaro"          if !arc
> default "arc"             if arc
> ------------------------>8------------------------
>
> But then this thing "prompt "Binutils Version" if TOOLCHAINOPTS" makes no sense
> because we force set ARC binutils for ARC and Linaro binutils for anything else.
>
> Well even now that prompt is useless because it doesn't allow to choose anything
> except Linaro :)

This looks like a bug in kconfig; the symbols shouldn't just vanish
just because the choice isn't visible. Since this isn't obvious to fix
(at least I couldn't find a way at a first glance), I'd rather mirror
how we worked around if for the GCC version selection, so use
something like

choice
       prompt "Binutils Version" if TOOLCHAINOPTS
       default BINUTILS_USE_VERSION_LINARO if !arc
       default BINUTILS_USE_VERSION_ARC if arc

       config BINUTILS_USE_VERSION_LINARO
                bool "Linaro binutils 2.24"
                select BINUTILS_VERSION_LINARO

       config BINUTILS_USE_VERSION_LINARO
                bool "ARC binutils 2015.06"
                select BINUTILS_VERSION_ARC

endchoice
...
config BINUTILS_VERSION_LINARO
       default y if !TOOLCHAINOPTS && !arc

config BINUTILS_VERSION_ARC
       default y if !TOOLCHAINOPTS && arc


Btw, does your ARC binutils version have any upstream/vanilla binutils
version equivalence? That might be more interesting than the "date"
release version.

>> > diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile
>> > index 0276512..d420802 100644
>> > --- a/toolchain/binutils/Makefile
>> > +++ b/toolchain/binutils/Makefile
>> > @@ -10,11 +10,20 @@ PKG_NAME:=binutils
>> >  PKG_VERSION:=$(call qstrip,$(CONFIG_BINUTILS_VERSION))
>> >  BIN_VERSION:=$(PKG_VERSION)
>> >
>> > -PKG_SOURCE_URL:=https://releases.linaro.org/14.09/components/toolchain/binutils-linaro/
>> > -PKG_REV:=2.24.0-2014.09
>> > -PKG_SOURCE:=$(PKG_NAME)-linaro-$(PKG_REV).tar.xz
>> > -PKG_MD5SUM:=8f9b2b2e049d59b1b86ce9657802a353
>> > -BINUTILS_DIR:=$(PKG_NAME)-linaro-$(PKG_REV)
>> > +ifeq ($(findstring arc, $(CONFIG_BINUTILS_VERSION)),arc)
>>
>> Any reason why ifeq($(CONFIG_BINUTILS_VERSION),arc) directly doesn't work?
>
> Well it's possible to do that this way but it requires quotes word we're comparing to.
> So following string will work:
> ------------------------>8------------------------
> ifeq ($(CONFIG_BINUTILS_VERSION),"arc")
> ------------------------>8------------------------
>
> That's because version we set in Config in is quoted as well.
>
> Still if we do search of "arc" substring it will work even if we change binutils
> version string to match gcc's pattern like "arc-2015.06" etc.
> So I wanted to implement a sort of universal approach.

And then we get a sparc-binutils version and everything breaks apart ;P

If we ever would want to support more than one binutils version, then
I'd rather do it like the gcc selection, so keep the
arc/linaro/vanilla fork separate from the release version.

>
> If you think that explanation above makes not much sense I will
> rework it.
>
>> >  config GCC_VERSION_4_8_LINARO
>> > -       default y if (!TOOLCHAINOPTS && !TARGET_octeon)
>> > +       default y if (!TOOLCHAINOPTS && !(TARGET_octeon || arc))
>> >         bool
>> >
>> >  config GCC_VERSION_4_9_LINARO
>> >         bool
>> >
>> > +config GCC_VERSION_4_8_ARC
>> > +       default y if (!TOOLCHAINOPTS && arc)
>> > +       bool
>> > +
>> >  config GCC_VERSION
>> >         string
>> >         default "4.6.3"     if GCC_VERSION_4_6_3
>> > @@ -16,6 +20,7 @@ config GCC_VERSION
>> >         default "4.6-linaro"    if GCC_VERSION_4_6_LINARO
>> >         default "4.8-linaro"    if GCC_VERSION_4_8_LINARO
>> >         default "4.9-linaro"    if GCC_VERSION_4_9_LINARO
>> > +       default "arc-2015.06"   if GCC_VERSION_4_8_ARC
>>
>> Can we call this "4.8-arc" just like the others?
>
> I'm afraid not. Because we use that name later to reconstruct the a name
> of the tarball, see:
> ------------------------>8------------------------
> PKG_SOURCE:=$(PKG_NAME)-$(GCC_VERSION).tar.gz
> ------------------------>8------------------------
>
> And our tarball name is "gcc-arc-2015.06.tar.gz".

linaro gcc versions also use a date-release for their tarball names,
but have it hidden behind their branch selection. (4.8, 4,9, ..). But
well, this isn't uservisible, so it's a-ok.

I assume the arc binutils and gccs are only a stop-gap solution util
the arc support trickled down into the default openwrt toolchains?


Jonas
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list