[Bug 1350884] Review Request: mspgcc - Rebase of GCC for the MSP430 to TI / Red Hat upstream

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.redhat.com/show_bug.cgi?id=1350884



--- Comment #36 from Brandon Nielsen <nielsenb@xxxxxxxxxxx> ---
(In reply to Jonathan Wakely from comment #35)
> (In reply to Brandon Nielsen from comment #32)
> > Spec URL:
> > https://copr-be.cloud.fedoraproject.org/results/nielsenb/msp430-development-
> > tools/fedora-rawhide-x86_64/01577708-msp430-elf-toolchain/msp430-elf-
> > toolchain.spec
> 
> 
> When creating the symlinks for the binutils executables I'd be tempted to do:
> 
> 
> # Symlink binutils so we can build GCC
> mkdir bin
> for i in addr2line ar cxxfilt elfedit gprof libtool objcopy objdump ranlib
> readelf size strings
> do
>   ln -sr binutils/binutils/$i bin/%{target}-$i
> done
> for i in as ld nm strip
> do
>   ln -sr binutils/binutils/$i-new bin/%{target}-$i
> done
> 
> Personally I find it a bit easier to read because it's less of a wall of
> text, and it's clear which ones are linked using the same name and which
> ones aren't. But that's just me, what you have is fine.
> 
> I don't think building GCC actually needs most of these, but it doesn't hurt
> to add them.
> 

I could feasibly do away with the renaming entirely and use the
'--program-prefix' configure option (see additional discussion below)? No
matter what, I like your solution better.

[Snip]
> > > Issues:
> > > =======
> > > - Header files in -devel subpackage, if present.
> > >   **Lots of leftover header files in subdirs of /usr/msp430-elf**
> > >   See: https://docs.fedoraproject.org/en-US/packaging-
> > >   guidelines/#_devel_packages
> > 
> > It's a compiler, the headers are necessary as far as I'm aware.
> 
> It's possible the msp430-elf-gcc package won't actually work without some of
> those headers, so there's no benefit to putting them in a separate -devel
> package.
> 
> But it's not true for all of them.
> 
> The files in /usr/msp430-elf/lib/gcc/msp430-elf/9.2.0/plugin/ are not
> strictly necessary to use the compiler, only if you want to build GCC
> plugins for msp430-elf. You could either not bother packaging the plugin
> support at all, or you could leave it in the main msp430-elf-gcc package
> (which is what the avr-gcc package appears to do too).
> 
> The files in /usr/msp430-elf/msp430-elf/include/ appear to be the newlib
> libc headers. In theory they could be put in a separate
> msp430-elf-newlib-devel subpackage. Code which doesn't use anything from the
> C standard library could still be compiled by msp430-elf-gcc without the
> newlib headers.
> 

I've waffled back and forth on the plugin headers since I've started trying to
package this. Ultimately, the "upstream" (such that it is) binary packages
include them last I checked, so I figured I would as well. Same with the newlib
headers. I could check again, but at some level, if I'm shipping most of the
headers, why not just ship all?

> > > - Static libraries in -static or -devel subpackage, providing -devel if
> > >   present.
> > >   Note: Package has .a files: msp430-elf-gcc, msp430-elf-gcc-c++. Illegal
> > >   package name: msp430-elf-gcc, msp430-elf-gcc-c++. Does not provide
> > >   -static: msp430-elf-gcc, msp430-elf-gcc-c++.
> > >   See: https://docs.fedoraproject.org/en-US/packaging-
> > >   guidelines/#packaging-static-libraries
> > 
> > Again, this is a compiler, as far as I know, those are necessary.
> 
> Again, true for some of those libs that msp430-elf-gcc depends on, but not
> true for the ones in msp430-elf-gcc-c++.
> 
> Fedora's native GCC package puts the C++ standard library headers and libs
> into separate packages, not part of gcc-c++. Specifically, libstdc++-devel
> and libstdc++-static.
> 
> That means the gcc-c++ package can be used to compile C++ code that doesn't
> depend on the standard library or the C++ runtime. But for most practical
> uses you also need to install libstdc++-devel (and for static linking,
> libstdc++-static as well).
> 
> 
> That said, this seems like a reasonable way to split the packages up.
> There's probably not much practical benefit to more granularity for the
> stdlib files.
> 

avr-gcc doesn't appear to do this, I can check the other cross compilers. I'm
open to either really.

> 
> > > 
> > > 
> > > ===== MUST items =====
> > > 
> > > C/C++:
> > > [x]: Package does not contain kernel modules.
> > > [?]: Package contains no static executables.
> > > [!]: Development (unversioned) .so files in -devel subpackage, if present.
> > >      Note: Unversioned so-files in private %_libdir subdirectory (see
> > >      attachment). Verify they are not in ld path.
> > 
> > I agree this is gross, but it's not in "regular" gcc's ld path, so I think
> > it's okay?
> 
> Yes, I think these are OK where they are:
> 
> msp430-elf-gcc:
> /usr/msp430-elf/lib/gcc/msp430-elf/9.2.0/plugin/libcc1plugin.so
> msp430-elf-gcc:
> /usr/msp430-elf/lib/gcc/msp430-elf/9.2.0/plugin/libcp1plugin.so
> msp430-elf-gcc: /usr/msp430-elf/libexec/gcc/msp430-elf/9.2.0/liblto_plugin.so
> 
> They're specific to this build of GCC, and won't be used by anything else.
> 

I will remove them.

[Snip]
> > > [!]: Fully versioned dependency in subpackages if applicable.
> > >      Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in
> > >      msp430-elf-gcc , msp430-elf-gcc-c++ , msp430-elf-gdb , msp430-elf-
> > >      binutils
> > >      Review: it's a good idea to include this.
> > 
> > I'm not sure I understand. I've added some missing requires (the C++
> > compiler now requires the C compiler, the C compiler now requires binutils),
> > but if I add the "Requires: {name}%{?_isa} = %{version}-%{release}"
> > requested, I just get packages that are uninstallable. Is there some
> > documentation I can look at to see an example of what's being requested?
> 
> I think you want %{?_isa} to be present on the Requires tags, otherwise it's
> possible for a user to manually install the 32-bit msp430-elf-binutils.i686
> package on an x86_64 and have that satisfy the requirement for
> msp430-elf-binutils. But what you're really trying to require is the
> msp430-elf-binutils.x86_64 one, so you need the %{?_isa} suffix.
>

Thanks, I understand now.

> I agree that you don't want the subpackages to require the main one, but
> that's because the main one doesn't actually exist ... no
> msp430-elf-toolchain package actually gets created.
> 
> Shouldn't that main package be an umbrella package that installs the others,
> i.e. the main package should have:
> 
> Requires: %{name}-binutils%{?_isa} = %{version}-%{release}
> Requires: %{name}-gcc%{?_isa} = %{version}-%{release}
> Requires: %{name}-gcc-c++%{?_isa} = %{version}-%{release}
> Requires: %{name}-gdb%{?_isa} = %{version}-%{release}
> 
> That would allow you to say 'dnf install msp430-elf-toolchain' and get all
> of the subpackages at once.

That's a good idea! My only thought is I don't actually know many developers
doing C++ on embedded, but I like the idea of being able to get the complete
toolchain.

An additional question, since I've moved to setting the
'--prefix=%{_prefix}/%{target}' on configure, I've needed to add a matching
'-B/usr/bin/msp430-elf-' to any Makefile using the resulting compiler. Would
setting the program prefix, instead of adding the prefix with my symlinks, fix
this?

One final question, do I need to run add a check step? They used to not work,
but I think they do now.


-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are always notified about changes to this product and component
_______________________________________________
package-review mailing list -- package-review@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to package-review-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/package-review@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite Conditions]     [KDE Users]

  Powered by Linux