Commit Graph

1300 Commits

Author SHA1 Message Date
Nik Konyuchenko
05c6758985 Fix build of older Glibc using GCC >=10
Issue #1535

GCC 10 changed the default to -fno-common, which leads to a linking error in GLibc older than 2.30.

This change adds -fcommon cflag for the target GLibc versions <=2.29 and GCC >=10.

This change also adds additional cflags for the target GLibc to disable
new GCC11 checks that lead to compilation errors.

Signed-off-by: Nik Konyuchenko <spaun2002mobile@gmail.com>
2021-06-24 00:58:32 -07:00
Chris Packham
96d8a0588f gcc: Make CC_GCC_TM_CLONE_REGISTRY tristate
Explicitly passing --disable-tm-clone-registry causes gcc to create a
crtbegin.o with a zero-sized .init_array/.fini_array. This in turn
causes ld to complain.

Make CC_GCC_TM_CLONE_REGISTRY a tristate so if it's not explicitly
enabled we can let ./configure decide.

Fixes #1531

Fixes: 1e21a302 ("gcc: Add CT_CC_GCC_TM_CLONE_REGISTRY config")
Signed-off-by: Chris Packham <judge.packham@gmail.com>
2021-06-20 11:37:00 +12:00
Chris Packham
594b9286f4
Merge pull request #1524 from stephanosio/gcc_custom_libstdcpp_cxx_flags_upstream
Fix libstdc++ build options
2021-06-09 20:11:48 +12:00
Stephanos Ioannidis
1e21a30287 gcc: Add CT_CC_GCC_TM_CLONE_REGISTRY config
This commit adds a new gcc config `CT_CC_GCC_TM_CLONE_REGISTRY` that
enables the GCC transactional memory clone registry feature for libgcc.

Note that the gcc option to control this feature is only available in
gcc 10 and above.
(see gcc commit 5a4602805eb3ebddbc935b102481e63bffc7c5e6)

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2021-06-08 02:13:45 +09:00
Stephanos Ioannidis
7144b5f275 newlib: Add libstdc++ nano-specific CXXFLAGS
This commit adds a new config that can be used to specify the target
CXXFLAGS specific to the libstdc++ newlib-nano variant.

By default, this config is set to specify the `-fno-exceptions` option,
which disables C++ exception handling support and greatly reduces the
compiled binary size.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2021-06-07 19:53:28 +09:00
Stephanos Ioannidis
fffa4c5aa5 gcc: Allow setting custom target CXXFLAGS
This commit adds two additional arguments (`cxxflags_for_target` and
`extra_cxxflags_for_target`) for the gcc backend build function that
can be used to specify custom target CXXFLAGS.

By default, the target CXXFLAGS is set to the target CFLAGS. When
`cxxflags_for_target` is specified however, it overrides that behaviour
and allows setting different target CXXFLAGS from the target CFLAGS.

The `extra_cxxflags_for_target` argument can be used to specify the
extra target CXXFLAGS to be appended to the target CXXFLAGS. This is
useful when it is necessary to append CXX-specific flags to the
existing CFLAGS to be used as the target CXXFLAGS.

A useful application of this is building full and nano versions of
libstdc++ with different target CXXFLAGS as necessitated by
`nano.specs`.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2021-06-07 19:53:28 +09:00
Stephanos Ioannidis
3c637c1eec gcc: Assume '-O2' by default for building gcc target libraries
The gcc target libraries (e.g. libstdc++) are currently built without
any optimisation flag when `CT_CC_GCC_ENABLE_TARGET_OPTSPACE` is not
enabled and default to `-O0` unless user explicitly specifies an
optimisation flag.

This commit updates the gcc build script to assume `-O2` for building
target libraries unless user provides a different optimisation flag.

Note also that this is the default behaviour for gcc when
C[XX]FLAGS_FOR_TARGET is not overridden.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2021-06-07 19:52:58 +09:00
Chris Packham
0528a9d744 Merge branch 'abrodkin-newlib-nano-relocatable' of git://github.com/foss-for-synopsys-dwc-arc-processors/crosstool-ng 2021-04-19 20:29:26 +12:00
Chris Packham
e27def9d3b Merge branch 'newlib-nano-target' of git://github.com/galak/crosstool-ng 2021-04-19 20:25:49 +12:00
Alexey Brodkin
89273b59af newlib-nano: Use run-time calculated paths in top-level nano.specs
In currently generated top-level "nano.specs" we resolve
paths during toolchain building and then use those pre-defined
full paths once the toolchain got built.

That's OK until the toolchain is used right were it was built,
otherwise paths used in the top-level "nano.specs" become
irrelevant and linker fails to find "nano" libs reverting to
non-"nano" libs in the default location.

See https://github.com/crosstool-ng/crosstool-ng/issues/1491.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2021-04-16 17:11:01 +03:00
Kumar Gala
8e99639419 newlib-nano: Add option to copy libs into target
Add an option that will install a copy of newlib-nano lib*.a file in
the target dir but renamed with a nano.a suffix (eg: libc_nano.a) as
some default nano.spec files from newlib expect this setup.

Additionally the newlib-nano version of newlib.h will get copied to
include/newlib-nano/newlib.h.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2021-04-15 14:29:04 -05:00
Kumar Gala
2816a97a25 newlib-nano: remove whitespace from nano.spec file
Remove trailing whitespace from generated nano.spec file.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2021-04-15 14:29:04 -05:00
Alexey Brodkin
2baacbfe36 gdb: Don't mess with gdbserver config permissions
Some really old GDB releases did have gdbserver's configure
script w/o execution permissions, so there was a need in the fix.

As per Yann most likely it could have been true for GDB versions in
between v5.3 & 6.6. Moreover it could have been fixed on re-release
of GDB tarballs done in 2011, see [1].

And given we no longer support such old GDB versions in CT-NG
(as of today we have 6.8 - 9.2, moreover it's not clear which of
6.8-7.x versions are still being actively used) we'll revert that old hack
for now in a hope that it won't hurt anybody.

Though if somebody sees that problem again
we'll be able to revert this again ;)

[1] https://sourceware.org/legacy-ml/gdb/2011-09/msg00002.html

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2021-04-15 16:26:05 +03:00
Chris Packham
3fa241a4e1 build: debug: strace: Add -D__USE_MISC to target CFLAGS
Similar to commit ca45a8f9 ("Add -D__GLIBC__ to target CFLAGS") newer
versions of strace bundle the kernel headers which cause build errors
such as:

[ALL  ]    In file included from /home/x-tool/.build/arm-unknown-linux-musleabi/src/strace/bundled/linux/include/uapi/linux/in6.h:26,
[ALL  ]                     from /home/x-tool/.build/arm-unknown-linux-musleabi/src/strace/bundled/linux/include/uapi/linux/if_bridge.h:19,
[ALL  ]                     from /home/x-tool/.build/arm-unknown-linux-musleabi/src/strace/src/rtnl_mdb.c:16:
[ERROR] /home/x-tool/.build/arm-unknown-linux-musleabi/src/strace/bundled/linux/include/uapi/linux/libc-compat.h:109: error: "__UAPI_DEF_IN6_ADDR_ALT" redefined [-Werror]
[ALL  ]      109 | #define __UAPI_DEF_IN6_ADDR_ALT  1
[ALL  ]          |
[ALL  ]    In file included from /home/x-tool/.build/arm-unknown-linux-musleabi/src/strace/src/rtnl_mdb.c:15:
[ALL  ] /home/x-tool/x-tools/arm-unknown-linux-musleabi/arm-unknown-linux-musleabi/sysroot/usr/include/netinet/in.h:401: note: this is the location of the previous definition
[ALL  ]      401 | #define __UAPI_DEF_IN6_ADDR_ALT 0
[ALL  ]          |
[ALL  ]    cc1: all warnings being treated as errors

By defining __USE_MISC we get __UAPI_DEF_IN6_ADDR_ALT defined in a
compatible manner.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2021-03-30 12:58:47 +13:00
Ivan Kukhta
8b4373d4ee Extend CC_GCC_LIBSSP with manual state
Signed-off-by: Ivan Kukhta <Ivan.Kukhta@acronis.com>
2021-03-17 13:50:45 +03:00
Alexey Brodkin
5171b3033a newlib-nano: Create symlinks for nano-suffixed libs
If existing board's .specs are used for linking of a user's application,
then instead of normally used libs like libc.a & libstdc++.a might be
requested their "nano"-suffixed siblings: libc_nano.a, libstdc++_nano etc.

That way:
----------------------------->8---------------------------
%rename link_gcc_c_sequence	myboard_link_gcc_c_sequence

*myboard_libc:
%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}

*link_gcc_c_sequence:
%(myboard_link_gcc_c_sequence) --start-group %G %(myboard_libc) --end-group
----------------------------->8---------------------------

Our companion newlib-nano libs are all built optimized for size, so we'd like
to use them for linking. But given linker will see "-lc_nano -lstdc++_nano"
on its command line non-suffixed libs will be ignored.

To solve it we create those "_nano"-suffixed libraries as simple symlinks to
existing libs..

Fixes https://github.com/crosstool-ng/crosstool-ng/issues/1458.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2021-02-19 19:25:12 +03:00
Chris Packham
30316cd27a
Merge pull request #1448 from dinuxbg/master
Add PRU target configuration
2021-01-25 12:40:31 +13:00
Dimitar Dimitrov
e7d0485ca2 Add package with PRU linker scripts and headers
Include the gnuprumcu package in PRU cross toolchain.
Toolchain is somewhat useless without device specs and
linker scripts for the various SoCs.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2021-01-19 21:18:55 +02:00
Dimitar Dimitrov
c800bc8c82 Add PRU cross tool target
Add sample configuration for building cross toolchain for the TI PRU.
PRU cores are present in many of the BeagleBone single board computers.

More information about the PRU can be found in https://bbb.io/pru

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2021-01-19 21:18:55 +02:00
Keith Packard
beb587a271 newlib-nano: Build libstdc++ against newlib-nano if requested
This uses the gcc support for building libstdc++ using alternate lib
header files.

Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-14 15:05:10 -08:00
Keith Packard
15e053fdc4 Create nano.spec file that sits atop the existing nano build
Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-14 15:05:10 -08:00
Keith Packard
945b4c6436 Add newlib-nano as companion lib
This allows building newlib-nano in addition to newlib and picolibc,
allowing users to select between C libraries within the same toolchain.

Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-14 15:05:10 -08:00
Chris Packham
e64318656c Merge branches 'elijahr-dtc-1.6.0', 'elijahr-readme-typo', 'foss-for-synopsys-dwc-arc-processors-abrodkin-libgmp-for-mac' and 'keith-packard-picolibc-companion' 2021-01-13 19:50:23 +13:00
Keith Packard
27b18d2fc7 picolibc: Build libstdc++ against picolibc if requested
This uses the gcc support for building libstdc++ using alternate lib
header files.

Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-11 23:29:01 -08:00
Keith Packard
43f5079382 gcc: Add support for building libstdc++ with alternate libc
This adds another mode to do_gcc_core_backend that builds libstdc++
against an alternate libc implementation.

Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-11 22:48:46 -08:00
Keith Packard
7e457684ea picolibc: Convert to companion library
This allows configurations to include picolibc without excluding
another C library.

Signed-off-by: Keith Packard <keithp@keithp.com>
2021-01-08 17:48:33 -08:00
Alexey Brodkin
1a65041dc0 libgmp: Fix cross-canadian build for macOS
Currently when building cross-canadian toolchain for macOS
the folowing error happens when GCC is configured:
|ld: illegal text-relocation to '___gmp_binvert_limb_table' in
|... /.build/... /buildtools/complibs-host/lib/libgmp.a(mp_minv_tab.o) from '___gmpn_divexact_1' in
|... /.build/... /buildtools/complibs-host/lib/libgmp.a(dive_1.o)
|collect2: error: ld returned 1 exit status

Apparently this might be solved with GMP configured with "--with-pic",
even though we're talking about static library here.

That solution was found here:
    https://github.com/Homebrew/homebrew-core/pull/25470

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2020-12-23 18:34:08 +03:00
Alexey Brodkin
b833f45259 gcc: Make it aware of Newlib nano IO feature
Even though GCC as a compiler has nothing to do with a C library
being used it still makes sense to know about Newlib's compact
implementation of IO functions:

 * For targets like MSP430 which require to have such a tuned
   Newlib if "-mtiny-printf" is passed to the GCC's command-line [1]

 * For correct compilation of the following GCC's own DejaGnu tests [2]:
     - gcc/testsuite/gcc.c-torture/execute/920501-8.c
     - gcc/testsuite/gcc.c-torture/execute/930513-1.c
     - gcc/testsuite/gcc.dg/torture/builtin-sprintf.c
     - gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.x

[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=02afb6a9321fbfb435452636cedc2cd43f0c4fd2
[2] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=571bbd0d48d5872eacbd0b681fce6e1ae754520b

So we add that missing cross-dependency now.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2020-12-23 17:54:03 +03:00
Chris Packham
a4231a555a
Merge pull request #1342 from DspHack/feature/add_support_for_ti_c6x
Experimental: Add support for the Texas Instruments C6X (TMS320C6000 …
2020-11-10 20:29:25 +13:00
Dan Tejada
3a3e645245 c6x: Remove multilib requirement
Restore tuple config check
     Add sample configuration

Signed-off-by: Dan Tejada <dan.tejada@cantada.com>
2020-11-02 16:21:26 -05:00
Chris Packham
beae27d87b arm: Disable context functions for Thumb
Similar to commit 57679b5e ("Disable context functions for Thumb") when
building for thumb we need to unset UCLIBC_HAS_CONTEXT_FUNCS.

Fixes #1397

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2020-11-01 21:17:50 +13:00
Chris Packham
827b42336e Merge branch 'xlocale' of git://github.com/lancethepants/crosstool-ng into lancethepants-xlocale 2020-11-01 20:01:58 +13:00
lancethepants
bc5798a8ea Don't remove XLOCALE support unconditionally.
Signed-off-by: Lance Fredrickson <lancethepants@gmail.com>
2020-10-15 13:59:04 -06:00
Alexey Brodkin
57f5909285 binutils: Disable glob for better portability
Since glibc 2.27 glob interface was changed [1]  and so
"glob" & "glob64" symbols require glibc 2.27+.

For us that means if we build Binutils on a machine with glibc 2.27+
produced binaries won't be any longer usable on machines with older
glibc.

As an example [2]: build on Ubuntu 18.04 (with glibc 2.27) and try to run
on CentOS 7.x (with glibc 2.17), you'll see this:
---------------------->8-------------------
ldd ld
ld: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by ld)
---------------------->8-------------------

Now given glob is not really used by Binutils itself (only needed by GDB)
and we build Binutils & GDB separately let's make at least Binutils
more portable.

In theory we may even try to do the same hack for GDB forcing it to use
imported glob implementation. But since GDB is now built strictly by C++
compiler we'll get waaay to many incompatibilities due to multiple changes
of C++ ABI in between GCC 7.5 of Ubuntu 18.04 and GCC 4.8.5 of CentOS 7.x,
so there's no point to even try.

[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=ccf970c7a77e86f4f5ef8ecc5e637114b1c0136a
[2] https://github.com/zephyrproject-rtos/sdk-ng/issues/280

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
2020-10-14 23:10:47 +03:00
Chris Packham
99ce9d3861
Merge pull request #1400 from fvalette/fix-m4-build-for-mingw32-host
m4: fix build for mingw32 host
2020-10-07 20:03:16 +13:00
Florent Valette
1c93176e05 m4: fix build for mingw32 host
While building a canadian toolchain for windows host (any target),
the build failed for m4 host companion_tool with a recent mingw-w64
(at least 7.0.0).
m4 needs stack smashing protection which is not part of mingw-w64 c
library and an explicit trigger to link w/ libssp is needed.

Signed-off-by: Florent Valette <florent.valette@gmail.com>
2020-10-06 09:32:40 +02:00
Hans-Christian Noren Egtvedt
60e782fdec glibc: set glibc build system default_cflags empty
By setting glibc build system default_cflags to be empty before
building, we will enforce the build system to only use the crosstool-ng
CFLAGS when building glibc.

Properly solves the issue identified in #1396.

Signed-off-by: Hans-Christian Noren Egtvedt <hegtvedt@cisco.com>
2020-10-05 15:37:19 +02:00
Keith Packard
e802686d86 picolibc: Use target architecture to drive picolibc configuration
This selects code matching the target architecture within picolibc.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-09-16 16:04:51 -07:00
Keith Packard
c1c475d0a0 Map picolibc to suitable CT_TARGET_SYS values
picolibc is another bare-metal C library, and so should be mapped
to CT_TARGET_SYS just like newlib does.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-09-16 11:52:58 -07:00
Keith Packard
c15de32ec6 Add picolibc support [v2]
This adds support for using picolibc instead of newlib on embedded
systems.

Signed-off-by: Keith Packard <keithp@keithp.com>

v2:
	Add check for meson and ninja
	Sync option default values with current picolibc defaults
	Remove xtensa sys header file install as those aren't in picolibc
2020-09-01 09:42:53 -07:00
Stephanos Ioannidis
041427aec9 Enable static libgcc when CT_GDB_NATIVE_STATIC_LIBSTDCXX is set
This commit updates the GDB build script to specify `-static-libgcc`
when `CT_GDB_NATIVE_STATIC_LIBSTDCXX` is enabled. Both libgcc and
libstdc++ are considered to be part of the "standard libraries," and
should be specified by the same flag (the configuration symbol could
potentially use a better name and/or further indirection).

This also semantically aligns the `CT_GDB_NATIVE_STATIC_LIBSTDCXX`
with the equivalent GCC configuration `CT_CC_GCC_STATIC_LIBSTDCXX`,
which also enables static linking of both libgcc and libstdc++.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2020-05-26 16:34:31 +09:00
Stephanos Ioannidis
b07da3bb69 Fix CT_GDB_NATIVE_STATIC_LIBSTDCXX reference
This commit fixes an incorrect reference to the configuration
`CT_GDB_NATIVE_STATIC_LIBSTDCXX` in the GDB build script.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2020-05-26 16:25:20 +09:00
Dan Tejada
d532f02542 Experimental: Add support for the Texas Instruments C6X (TMS320C6000 series) DSPs
-- c6x: Add support for c6x product families to pass on to uClibC-ng
  -- c6x: Fix multilib support
  -- c6x: Add patch fix internal instruction error (GCC 57295)

Signed-off-by: Dan Tejada <dan.tejada@cantada.com>
2020-05-20 21:16:14 -04:00
Alexey Neyman
8606251585 Add --with-cpu= on 32-bit SPARC
... if building for GLIBC 2.31+.

Signed-off-by: Alexey Neyman <stilor@att.net>
2020-03-03 16:40:33 -08:00
Alexey Neyman
d978290f39 Set --with-cpu-{32,64} for multilib builds
GLIBC 2.31 needs --with-cpu=ultrasparc for both 32/64-bits now, and
--with-cpu only sets the CPU model for the "primary" bitness.

Signed-off-by: Alexey Neyman <stilor@att.net>
2020-02-26 11:05:19 -08:00
Alexey Neyman
4fa0ba100b
Merge pull request #1270 from nolange/prevent_glibc_cflags_override
prevent the glibc build from overwriting flags
2020-02-16 15:22:44 -08:00
Alexey Neyman
be04d50510
Merge pull request #1303 from stilor/wip
Update docker to ubuntu 19.10
2020-02-09 13:26:47 -08:00
Alexey Neyman
c317f57b40 Suppress YAML support in DTC
... which fails to build if pkg-config is not installed.

Signed-off-by: Alexey Neyman <stilor@att.net>
2020-02-03 16:12:38 -08:00
Alexey Neyman
a152d61313
Merge pull request #1257 from nolange/fix_binutils_typo
fixup typo in bitutils.sh
2020-01-21 16:56:17 -08:00
Alexey Neyman
90947b3166
Merge pull request #1274 from maxmorozov/master
CT_LIBC_NEWLIB_REGISTER_FINI is processed correctly
2020-01-21 16:44:29 -08:00