Skip to content

Add support for gcc --enable-multilib-space option #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 413 commits into
base: zephyr-crosstool-ng-1.25.0
Choose a base branch
from

Conversation

keith-packard
Copy link
Collaborator

Set CT_MULTILIB_SPACE to pass --enable-multilib-space during GCC build. When set, also build
dependent libraries in multilib mode, even if CT_MULTILIB is not set.

cpackham and others added 30 commits April 30, 2023 20:28
Add 6.3
Update 6.2.7 -> 6.2.12
Update 6.1.20 -> 6.1.25
Update 5.15.103 -> 5.15.108
Update 5.10.175 -> 5.10.179
Update 5.4.237 -> 5.4.242
Update 4.19.278 -> 4.19.282
Update 4.14.310 -> 4.14.314

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Run the patches through

  ./maintainer/manage-packages.sh -P -s gcc-12.2.0

to mop up the fact that we'd ended up with two 0005 patches.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Old options %(newlib_nano_link) for the linker must be passed
otherwise linking may fail. E.g., in case of multilib
configurations a correct emulation mode may be not passed.

Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
Add gcc 12.3.0 and regenerate patches against the new version.

https://gcc.gnu.org/pipermail/gcc-announce/2023/000176.html
https://gcc.gnu.org/gcc-12/changes.html

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Add gcc 13.1.0 with rebased patches against the new version.

https://gcc.gnu.org/pipermail/gcc-announce/2023/000175.html
https://gcc.gnu.org/gcc-13/changes.html
https://gcc.gnu.org/gcc-13/porting_to.html

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Currently uclibc configurations fail to build with GCC13

 src/gcc/libstdc++-v3/src/c++17/floating_from_chars.cc: In function 'std::from_chars_result std::from_chars(const char*, const char*, _Float128&, chars_format)':
 src/gcc/libstdc++-v3/src/c++17/floating_from_chars.cc:1281:10: error: 'from_chars_strtod' was not declared in this scope
     1281 |   return from_chars_strtod(first, last, value, fmt);
          |          ^~~~~~~~~~~~~~~~~
    make[6]: *** [Makefile:587: floating_from_chars.lo] Error 1
    make[6]: *** Waiting for unfinished jobs....

For now require GCC older than 13 when using uclibc.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
GCC13 picks up some new errors on older glibc versions. Disable -Werror
automatically when these combinations are selected.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Depending on the host C++ compiler GCC13 fails on riscv configurations
with the following error

 src/gcc/gcc/config/riscv/genrvv-type-indexer.cc:118:30: error: no member named 'log2' in namespace 'std'; did you mean simply 'log2'?
        elmul_log2 = lmul_log2 - std::log2 (sew / eew);
                                 ^~~~~~~~~
                                 log2
 /usr/include/c++/v1/math.h:1463:1: note: 'log2' declared here
    log2(_A1 __lcpp_x) _NOEXCEPT {return ::log2((double)__lcpp_x);}
    ^

Bring in an upstream fix for the build error.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
…rocessors/ykolerov-newlib-nano

newlib: Add missing linker options for nano.specs
On systems that lack pread64() (e.g. musl) the following build error is
observed.

  src/gdb/gdbserver/linux-low.cc:5393:45: error: expected ':' before ')' token
  src/gdb/gdbserver/linux-low.cc:5393:45: error: expected primary-expression before ')' token
  src/gdb/gdbserver/linux-low.cc:5393:45: error: expected ':' before ')' token
  src/gdb/gdbserver/linux-low.cc:5393:45: error: expected primary-expression before ')' token

Bring in the upstream fix for this error.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Dima Krasner <dima@dimakrasner.com>
Variable native_extra_config must be used for configuration
options instead for extra_config for native GDB.

Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
It's necessary for building native GDB 13+. It depends
on MPFR but it hasn't presented in scripts yet for building
for target.

Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
GDB 13+ depends on MPFR thus it must be selected.

Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
These versions were present in crosstool-ng 1.25.0 so as per current
policy mark them as obsolete so they can be dropped after the next
release.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Picolibc 1.8.1 has been added so we can drop 1.7.9.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Run patches through ./maintainer/manage-packages.sh -P -s gcc-6.5.0 to
clean them up.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
isl-0.26 moves some header includes around so now if we want
isl_val_free we need to include isl/val.h. Otherwise we get errors such
as

 src/gcc/gcc/graphite-isl-ast-to-gimple.c: In member function 'tree_node* translate_isl_ast_to_gimple::gcc_expression_from_isl_expr_int(tree, isl_ast_expr*)':
 src/gcc/gcc/graphite-isl-ast-to-gimple.c:349:3: error: 'isl_val_free' was not declared in this scope; did you mean 'isl_vec_free'?
      349 |   isl_val_free (val);
          |   ^~~~~~~~~~~~
          |   isl_vec_free

Bring in an upstream fix that uses the correct header file.

Fixes crosstool-ng#1962
Signed-off-by: Chris Packham <judge.packham@gmail.com>
Use a relative path for include directory if gdb or gdbserver
is being built and installed for a target. Otherwise headers
are installed in ${destdir}${CT_HEADERS_DIR} - a concatenation
of ${destdir} and an absolute path to sysroot's include directory.
As a result debug-root may contain wrong paths for includes.

Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
https://lists.strace.io/pipermail/strace-devel/2023-May/011317.html

Add strace 6.3. Remove 6.2.
Add upstream patch for working with newer Linux headers.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
If static cross GDB configuration is selected, cross GDB will be linked
statically with std c++ library, because there is no separate option for
static std c++ library for cross GDB.
The use of not existing variable CT_GDB_NATIVE_STATIC_LIBSTDC has been
replaced with CT_GDB_NATIVE_STATIC_LIBSTDCXX.

Signed-off-by: Maksim Morozov <maxim.morozov.a@gmail.com>
Bring in upstream support for newer float standards being used by GCC.

Fixes crosstool-ng#1957
Signed-off-by: Chris Packham <judge.packham@gmail.com>
cpackham and others added 29 commits January 25, 2025 21:44
MUSL's or1k support lacks definitions for elf_gregset_t which leads to
failures like

[ERROR] sysroot/usr/include/sys/procfs.h:29:9: error: 'elf_gregset_t' does not name a type; did you mean 'gregset_t'?
[ERROR] sysroot/usr/include/sys/procfs.h:54:9: error: 'elf_gregset_t' does not name a type; did you mean 'gregset_t'?
[ERROR] sysroot/usr/include/sys/procfs.h:55:9: error: 'elf_fpregset_t' does not name a type

Disable GDB support in the or1k-unknown-linux-musl config.

Fixes crosstool-ng#2266
Signed-off-by: Chris Packham <judge.packham@gmail.com>
…nd x86_64

Signed-off-by: Bruce McCulloch <bruce.mcculloch@oracle.com>
Add newly released mold version 2.36.0 from upstream
https://github.com/rui314/mold

New Features
- The --package-metadata=<string> option has been added to embed a given
  string into the .note.package section. This option is designed for
  build scripts that generate binary packages, such as .rpm or .deb, to
  include package metadata in each executable. It simplifies the process
  of identifying the corresponding package for a given executable or
  core file. (7ddc8f4)

- [ARM][PowerPC] We've improved the algorithm for creating range
  extension thunks to reduce memory usage and improve speed. For
  example, linking clang-19 for ARM64 is now ~7% faster than before.
  (9fc0ace)

- [RISC-V][LoongArch] We've improved the algorithm for code-shrinking
  linker relaxation to reduce memory usage and improve speed. For
  example, linking clang-19 for RISC-V is now ~4% faster than before.
  (3234d88)

Bug Fixes and Compatibility Improvements
- mold created a bad relocation for an IFUNC if the linker's output file
  type was a shared library and the symbol was exported. This bug could
  cause a segmentation fault of a linked program. The problem has now
  been fixed. (a297859)

- [RISC-V] mold could produce incorrect code as a result of
  code-shrinking relaxation for the R_RISCV_HI20 relocation. That type
  of relocation was used rarely because it is not PC-relative. That
  being said, if your program used the relocation, and the relocation
  targets were at a low address (from 0x1f800 to 0x20000), your program
  would crash at runtime due to the linker's bug. The issue has now been
  resolved. (eec3f6b)

- [RISC-V][LoongArch] When the linker removed instructions from a
  function as a result of code-shrinking relaxation, the function
  symbol's size in the output file should be updated to reflect the
  result of relaxation, even though doing it is mostly cosmetic. mold
  did not do that. Now, mold sets correct sizes to output function
  symbols. (e6345d5)

- [LoongArch] Binaries linked with mold now work on 64 KiB page systems.
  Previously, only up to 16 KiB pages were supported. (2d7b6b2)

- [s390x] The s390x processor-specific ABI requires the linker to
  reserve the first three slots of the .got section for the runtime.
  mold, however, reserved only two slots and used the third for itself.
  Even though we did not observe issues in the wild, it was a violation
  of the psABI. The problem has now been fixed. (dfce2fc)

Signed-off-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no>
https://sourceware.org/pipermail/libc-announce/2025/000045.html

Support for nios2*-*-linux-gnu has been removed in this version so the
nios2 architecture now requires and older glibc.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Some canadian configs that use uclibc are pinned to gettext-0.20.1. We
need to update some of the configure checks to avoid issues with newer
versions of GCC.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Add the latest gettext version.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Update the x86_64-unknown-linux-gnu,arm-picolibc-eabi sample config.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
More configure checks that need updating.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
https://sourceware.org/pipermail/gdb-announce/2025/000144.html

Signed-off-by: Chris Packham <judge.packham@gmail.com>
…text

The latest gettext has problems building this configuration. Pin the
version to gettext-0.22.5 which works fine.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
GMP 6.2.1 may fail some autoconf test when using GCC master (to-be-15) branch.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
Previous commits added selects so that the nios2 architecture only used
GDB/GLIBC versions that still support it however these weren't qualified
leading to kconfig complaints such as

  WARNING: unmet direct dependencies detected for GLIBC_REQUIRE_older_than_2_41
    Depends on [n]: LIBC_GLIBC_SHOW [=n]
    Selected by [y]:
    - ARCH_NIOS2 [=y] && GEN_CHOICE_ARCH [=y]

Qualify these selects with if DEBUG_GDB and if LIBC_GLIBC to stop the
complaints.

Fixes: 9d91ceb ("gdb: Add 16.1")
Fixes: 87605d6 ("glibc: Add 2.41")
Signed-off-by: Chris Packham <judge.packham@gmail.com>
This commit adds an option to strip the target toolchain libraries
(e.g. libc, libstdc++) of any unneeded or debugging information.

Stripping is enabled by default as it is often desirable to reduce the
overall toolchain size when producing a release.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
Some target libraries (e.g. newlib for RISC-V) may contain local
symbol information when built with the `-g` flag.

This commit adds the `--discard-locals` flag to discard all the
unnecessary local symbols from the object files.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
This commit updates the build script to strip additional debug sections
added by the Binutils 2.38 when stripping the target libraries.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
As these are not installed in the usual lib directory, the library
stripping option doesn't catch them. Add explicit steps in the
picolibc build script to perform this task.

Signed-off-by: Keith Packard <keithp@keithp.com>
The x86_64 build uses objcopy, and if that is run in a cross-build environment, the
native version will not work. Use the target-specific name instead.

Signed-off-by: Keith Packard <keithp@keithp.com>
Support latest upstream release

Signed-off-by: Keith Packard <keithp@keithp.com>
This parallels the newlib-nano setting,
NEWLIB_NANO_GCC_LIBSTDCXX_TARGET_CXXFLAGS, and provides a place to
specify options that control how libstdc++ is build, such as
-fno-exceptions.

Signed-off-by: Keith Packard <keithp@keithp.com>
Picolibc 1.8.10 reworked the configuration option for single/multi
thread support and removed some unused options for exit handler
support.

Map LIBC_PICOLIBC_MULTITHREAD to the new single-thread option or the old
newlib-retargetable-locking+newlib-multithread options depending on whether
the picolibc version knows about the single-thread option.

Remove support for newlib-register-fini, newlib-atexit-dynamic-alloc,
newlib-global-atexit and lite-exit options as all of those relate to
the legacy exit handler code. There hasn't ever been any way to enable
this using crosstool-ng, so none of these options have ever done
anything.

The help strings for each of of the unused configuration variables
have been updated.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Duy Nguyen <duy.nguyen.xa@renesas.com>
Install the stdio headers.
Create a dummy picolibc.h header.

Signed-off-by: Keith Packard <keithp@keithp.com>
This uses a newer gnulib with support for more recent compiler
versions.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
The upstream option name for selecting how libstdc++ performs I/O
is '--enable-cstdio', not '--enable-stdio'.

Signed-off-by: Keith Packard <keithp@keithp.com>
When CT_MULTILIB_SPACE is selected, build gcc with the
--enable-multilib-space flag.

Signed-off-by: Keith Packard <keithp@keithp.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.