Commit Graph

91 Commits

Author SHA1 Message Date
Chris Packham
b6a4766d22 binutils: Allow gold to be statically linked
gold uses g++ to link which doesn't recognise -all-static. It appears as
if -static should work for both libtool and g++ but for some reason it
doesn't. Remove the restriction that gold can't be included in a static
toolchain. When a static toolchain is requested pass
--with-gold-ldflags=--static to configure. Finally build gold separately
so it does not get the extra_make_flags which may contain -all-static.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2024-07-29 13:12:59 +12:00
Chris Packham
e7a88ff52d Revert "binutils: Disable glob for better portability"
This reverts commit 57f5909285. This was
originally added so that a toolchain could be built on a newer system but
run on an older one. With the benefit of hindsight that is probably the
wrong approach. The best way of achieving that goal would be to use
docker/podman container to provide an environment that is the same as
the oldest supported system and build inside that. The resulting
toolchain should be compatible with the old system and the new one.

Closes #2094

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2024-03-01 14:45:27 +13:00
Chris Packham
d91732672e scripts/build/binutils: Update path for libbfd
As of binutils 2.41 libbfd.a is not placed directly in the output
directory. Fortunately the libtool .libs location seems to have been
in place for some time so we can update the path without worrying about
backwards compatibility.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2023-12-08 12:19:38 +13:00
Chris Packham
711e7bc114 binutils: Add binutils 2.40
https://sourceware.org/pipermail/binutils/2023-January/125671.html

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2023-03-08 16:54:34 +13:00
Dries Deschout
61c4ccac5c binutils: add option to build libopcodes for target
It provides functionality to disassemble executable binaries.

Signed-off-by: Dries Deschout <dries.deschout@dodeco.eu>
2022-10-02 13:07:42 +13:00
Chris Packham
e2eb7d8587 binutils: Disable libdebuginfod when producing a static toolchain
libdebuginfod is incompatible with static linking so pass
--without-debuginfod when CT_STATIC_TOOLCHAIN is selected.

Fixes #1683

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2022-02-23 20:20:34 +13:00
Chris Packham
fa992b4191 binutils: Remove obsolete versions
The following versions were marked obsolete in crosstool-ng-1.24.0,
remove them.
- binutils-linaro-2.23.2-2013.10-4
- binutils-linaro-2.24.0-2014.11-2
- binutils-linaro-2.25.0-2015.01-2
- binutils-2.23.2
- binutils-2.24
- binutils-2.25.1

Adjust the milestones now that the old versions have been removed.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
2021-09-21 21:24:31 +12:00
Raphael Catolino
c3b13ffdda Add EXTRA_CXXFLAGS_FOR_BUILD option
Signed-off-by: Raphael Catolino <raphael.catolino@gmail.com>
2021-07-06 16:19:17 +01: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
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
Norbert Lange
605805b3dd fix nonfunctional --enable-relro option
Signed-off-by: Norbert Lange <nolange79@gmail.com>
2019-10-15 11:19:34 +02:00
Norbert Lange
7469bc8a73 enable option for binutils deterministic-archives
Signed-off-by: Norbert Lange <nolange79@gmail.com>
2019-10-10 21:39:29 +02:00
Alexey Neyman
693d3943b1 Rename JOBSFLAGS -> CT_JOBSFLAGS
... so that it is saved/restored when restarting the build.

Signed-off-by: Alexey Neyman <stilor@att.net>
2019-04-04 18:57:42 -07:00
Alexey Neyman
f2b64524b0 Add a symlink to LTO for binutils
... so that ar can find the plugin even when invoked directly, not
via the gcc-ar plugin.

Signed-off-by: Alexey Neyman <stilor@att.net>
2018-12-11 08:55:07 -08:00
Alexey Neyman
f5b57504d2 Add configuration options for enabling SSP
... in uClibc and glibc.

Fixes #681.

While here, relocate additional "sources" for uClibc/binutils into packages/
directory.

Signed-off-by: Alexey Neyman <stilor@att.net>
2018-12-04 16:15:37 -08:00
Alexey Neyman
893932e90f Add a config option for default RELRO setting
Fixes #656.

Signed-off-by: Alexey Neyman <stilor@att.net>
2018-12-03 20:19:09 -08:00
Alexey Neyman
f232d6d09a Add an ability to modify an exported variable
... and use that ability to permanently set CTNG_LD_IS in case gold is default linker
and we're building glibc.

Fixes #988. This was a long-standing breakage in crosstool-NG (at least since it began
to run each step in a sub-shell).

Signed-off-by: Alexey Neyman <stilor@att.net>
2018-11-01 15:50:12 -07:00
Alexey Neyman
d573c15758 Use 'chmod a-x' instead of 'chmod -x'
There is a subtle difference when executable bit is a part of the umask.
And at least some versions (Debian/stretch) fail if the resulting mode
would've been different if not for the umask setting.

Fixes #998.

Although, with such chmods/umasks it is likely that some package installation
will break anyway. But I'll leave it until somebody complains.

Signed-off-by: Alexey Neyman <stilor@att.net>
2018-09-26 23:54:55 -07:00
Nathan Chancellor
1d724767bd config: Add package versioning flexibility
Some users (like myself) may want to omit the crosstool-NG version
from the binaries' versioning output, as it can be incredibly long
and not too helpful. Add a config option to disable it. The possible
combinations are as follows:

- crosstool-NG version (default)
- crosstool-NG version - custom toolchain ID
- Custom toolchain ID
- No crosstool-NG version OR custom toolchain ID

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2017-09-01 16:48:59 -07:00
Alexey Neyman
0346153bdb Save export status for environment vars
... and limit our modifications to our variables.

Fixes #762.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-08-21 08:41:14 -07:00
Alexey Neyman
9d91f44bc8 Separate the notions of package name/label
Also, remove resolved TBDs.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-07-08 10:57:57 -07:00
Alexey Neyman
f63fbd356f Allow for custom archive names
... and directories therein.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-07-08 10:57:56 -07:00
Alexey Neyman
567277099a Fix the references to old config variables
Signed-off-by: Alexey Neyman <stilor@att.net>
2017-07-08 10:57:56 -07:00
Alexey Neyman
1e37cd5450 Honor CFLAGS_FOR_BUILD
Signed-off-by: Alexey Neyman <stilor@att.net>
2017-06-15 23:07:00 -07:00
Alexey Neyman
ae58824a7e Pass CC_FOR_BUILD to binutils
Otherwise, it fails if 'gcc' is not available.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-04-02 13:18:07 -07:00
Alexey Neyman
d6bf8e2d98 Fix symlinking to multiarch tools on Cygwin
On cygwin, creating both "foo.exe" and "foo" results in 'ln -sf'
returning an error ("File exists"). However, ln silently removes
the "foo.exe" in this case, so an attempt to re-run the same command
manually then succeeds.

Hence, make binutils.sh also create symlinks with .exe prefix,
using the new & shiny routine.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-04-01 10:12:05 -07:00
Alexey Neyman
59bab98b2d Revert "Determine whether -E/-r option selects extended regexp"
This reverts commit 7bcf18bfab.
2017-02-26 19:06:35 -08:00
Alexey Neyman
8397ad2c1a Fix the build of elf2flt on Cygwin
The -lcygwin -lc actually breaks the build: elf2flt picks up the symbols for getopt/optarg via
<getopt.h> in binutils-X.Y/include, where optarg is declared without dllimport attribute.
Therefore it pulls in getopt() from libc/libcygwin, but since optarg is not prefixed with
_imp__, it is pulled from libiberty. But the object file in libiberty also contains getopt()
thus resulting in multiple definitions thereof.

While there, kill extraneous -ldl passed into configure - configure detects -ldl successfully.

Upstream: https://github.com/uclinux-dev/elf2flt/pull/6
Signed-off-by: Alexey Neyman <stilor@att.net>
2017-02-22 22:17:49 -08:00
Alexey Neyman
7bcf18bfab Determine whether -E/-r option selects extended regexp
... and then use the right option. See the note in scripts/functions
on where we should use ${foo} and where just 'foo'; this boils down to
whether we can expect the build tools override to be in effect (e.g. in
the actual build scripts) or not (i.e. outside of scripts/build).
While running in scripts/functions, or in scripts/crosstool-NG.sh the
build tools override directory (.build/tools/bin) may have not been
set up (yet, or at all).

Also, modify the installed scripts (populate, xldd) accordingly.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-02-13 22:47:40 -08:00
Carlos Santos
755de234cb elf2flt: use CT_ARCH to set target CPU, not CT_TARGET
CT_TARGET is composed as "${CT_ARCH}${CT_ARCH_SUFFIX}", so CT_TARGET may
become something like "armv7", for example. This is used by the configure
script to set the "CPU" variable in the Makefile, leading to a commad line
containing

    -DTARGET_armv7 -DTARGET_CPU="armv7"

In this case the compilation of elf2flt.c fails with "Don't know how to
support your CPU architecture??". Passsing "CPU=${CT_ARCH}" in the make
command line overrides the configured value and solves the problem.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
2017-02-06 22:20:21 -08:00
Alexey Neyman
bd318e886b Fix installation of manuals for binutils
It was running 'make gas ld ...', which was succeeding, but didn't install
anything.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-01-30 12:11:37 -08:00
Alexey Neyman
7186e39f32 Run all configure scripts using ${CONFIG_SHELL}
... as its help message says in menuconfig.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-01-25 00:06:28 -08:00
Alexey Neyman
9f5a92a783 Unify fetching Linaro components.
Add CT_GetLinaro, use it from gcc/binutils/gdb/glibc/newlib.

Signed-off-by: Alexey Neyman <stilor@att.net>
2017-01-12 23:00:41 -08:00
Alexey Neyman
488b27f58b Partially revert 6f8e89cb5c.
The referenced commit replaced 'make' with '${make}' everywhere. This is
wrong for at least the utilities that we may build as companion tools
(make, libtool): this will always invoke the version detected by configure
by supplying the absolute path. In other words, the wrappers in
.build/tools/bin are not fallbacks - they are either temporary (in case
a respective companion tool is built) or permanent redirectors.

This is the reason why the PATH= has .build/*/buildtools/bin at higher
precedence than .build/tools/bin; the latter has the versions detected by
configure and the former has the versions built as companion tools.

Revert the rest of the gang (grep/sed/...) for consistency. After all,
we may decide to supply some of them as well (awk, for instance).

Signed-off-by: Alexey Neyman <stilor@att.net>
2016-11-20 23:50:17 -08:00
Kirill K. Smirnov
3362272d40 elf2flt: do not treat warnings as errors
elf2flt is configured with -Werror flag by default. Disable it.

Signed-off-by: Kirill K. Smirnov <kirill.k.smirnov@gmail.com>
2016-09-20 23:28:29 +03:00
Kirill K. Smirnov
10972baa20 binutils: make symlinks in a consistent way
On the stage "core gcc pass-2" the following layout is created:

1) buildtools/bin/TARGET-{ar,as,elf2flt,flthdr,ld,ld.bfd,ranlib,strip}
2) buildtools/TARGET/bin/{ar,as,elf2flt,flthdr,ld,ld.bfd,ranlib,strip}
3) x-tools/TARGET/bin/TARGET-{ar,as,elf2flt,flthdr,ld,ld.bfd,ranlib,strip}
4) x-tools/TARGET/TARGET/bin{ar,as,elf2flt,flthdr,ld,ld.bfd,ranlib,strip}

where both (1) and (2) are symlinks to (3). This effectively renders
core pass-2 gcc with elf2flt linker unusable.

Related elf2flt discussion:
https://github.com/crosstool-ng/crosstool-ng/pull/443

Signed-off-by: Kirill K. Smirnov <kirill.k.smirnov@gmail.com>
2016-09-13 22:07:14 +03:00
Martin Lund
b06f5ab689 Update elf2flt git repository location
The elf2flt git repository has been moved to GitHub. Updated the script
accordingly.

Signed-off-by: Martin Lund <martin.lund@keep-it-simple.com>
2016-06-10 22:11:39 +02:00
Bryan Hundven
72f3b9196a elf2flt: Use openadk version of elf2flt
elf2flt is now hosted on github here:
https://github.com/uclinux-dev/elf2flt

But, until arm support is upstream, we'll switch to Waldemar Brodkorb
version of elf2flt.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2016-01-13 05:58:28 -08:00
Bryan Hundven
84486b46d3 binutils: Fix installing libiberty for target
If CT_BINUTILS_FOR_TARGET_IBERTY is set, then it seems that we also must
set `--enable-install-libiberty` for configure to pickup that it needs
to be installed.

This closes #302

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2016-01-02 03:15:07 -08:00
Bryan Hundven
4e2227e8a5 scripts: Update usage of CT_GetCustom
This commit updates the build scripts to match the new usage of
CT_GetCustom from the previous change.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-12-08 10:55:13 -08:00
Bryan Hundven
ed21bcaf89 binutils: Fix LDFLAGS for static toolchain
If building a static toolchain, the ldflags option passed to
do_binutils_backend is overridden when we set `LDFLAGS=-all-static`.

We should pass `LDFLAGS=${ldflags} -all-static` in this case.

This fixes #297

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-12-07 11:21:34 -08:00
Bryan Hundven
d06cb88596 binutils: Fix binutils manuals_install variable
In commit: 74d555b2
A regex in a parameter subsitution replaces a '#' hash symbol, but it is
not made literal '\#', so from the hash to the end of the line is a
comment.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-12-05 06:45:08 -08:00
Bryan Hundven
3c072d6206 binutils/gdb: Fix configure options when building from binutils-gdb repo
When building from:
{git,http}://sourceware.org/git/binutils-gdb.git

and setting BINUTILS_CUSTOM or GDB_CUSTOM, they could be the same
source.

These config options should not affect normal released versions.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-11-24 20:40:44 -08:00
Bryan Hundven
6f8e89cb5c consistency: Use exported variables of required tools
We check for apps:

* make
* sed
* grep
* awk
* libtool/libtoolize
* install
* patch
* and more

...during configure. Our scripts should be consistent about using the
variables that define where the found tool was found.

Of course, we do hard-link these tools in buildtools, but that should be
a backup for the components we are building. Our scripts should always
use the tools we find.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-11-17 02:48:09 -08:00
Chris Zankel
81328ed1cb xtensa: add support for the configurable Xtensa architecture.
The Xtensa processor architecture is a configurable, extensible,
and synthesizable 32-bit RISC processor core. Processor and SOC vendors
can select from various processor options and even create customized
instructions in addition to a base ISA to tailor the processor for
a particular application.

Because of the configurability, the build process requires one additional
step for gcc, binutils, and gdb to update the default configuration.
These configurations are packed into an 'overlay' tar image, and are
simply untarred on top of the default configuration during the build.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2015-11-13 09:08:53 +03:00
Bryan Hundven
7b8d76ed56 scripts/*/*.sh: prioritize http downloads
Prirotize http downloads before ftp downloads.
By having http download first, those using proxy will work with the
current download mechnism.

This tells me that that mechnism needs to be updated.
(proxy support and/or kconfig toggles)

closes #3

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2015-02-01 21:00:14 -08:00
Cristoforo Cataldo
ca5003cbe6 binutils: Add Linaro Binutils 2.25-2015.01 and 2.24-2014.11
This commit allows to choose, download and build latest Linaro Binutils:
- binutils-linaro-2.25.0-2015.01-2
- binutils-linaro-2.24.0-2014.11-2

Signed-off-by: Cristoforo Cataldo <cristoforo.cataldo@gmail.com>
2015-01-16 21:52:25 +01:00
Bryan Hundven
79422633cf scripts: Update download locations
This change updates the download locations to default to the official
download site.

For gcc and gdb, also separate out the linaro download locations so that
if you are downloading the linaro variant, it skips trying to download
from the official gcc mirror.

This commit closes #3

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Reported-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-12-08 15:03:08 -08:00
Solomon Peachy
4125a79589 binutils: Fix elf2flt compile on more modern systems
Without this fix, elf2flt will blow up complaining that it can't resolve
dlopen() and friends.  One has to explicitly pass '-ldl' on the final
linking command line, because the system linker is not resolving
indirect dependent shared libraries.

I've needed to this patch for several years on Fedora systems.

Signed-off-by: Solomon Peachy <pizza@shaftnet.org>
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2014-12-05 13:09:51 -08:00
goodmenlinux@gmail.com
f65ecce4ba binutils: Fixup the static toolchain build problem
When try to build the static toolchain, binutils failed.

    I have checked the libtool script, and found that the following option
          -all-static
          -static
          -static-libtool-libs

    are processed in a strange way. If any one of those three options
    appears firstly in the cmdline, all others will be neglected. Our
    LDFLAGS is ".... -static -all-static -o", so the -static option
    takes the real effect, and the -all-static has no useage actually!
    that is the cause of the failure.

Signed-off-by: Brock Zheng <goodmenlinux@gmail.com>
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
2014-12-05 03:20:04 -08:00