The previous patch added the function 'CT_DoMultilibTarget()' to
scripts/build/arch/*.sh.
This patch calls the common function to (currently) get just the target
tuple for the current multilib target.
This patch was originally by: Cody P Schafer
Changed by Alexey Neyman: first, try `gcc -print-multiarch`. If it is
supported, use whatever it reports. Otherwise, fall back to our
guesswork. Move "i486" quirk into glibc.sh, as it is specific to glibc
(e.g. uclibc will need i386, which is what GCC reports).
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Signed-off-by: Ray Donnelly <mingw.android@gmail.com>
Signed-off-by: Alexey Neyman <stilor@att.net>
i[34567]86-*-gnux32 is not a valid tuple.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Signed-off-by: Ray Donnelly <ray.donnelly@gmail.com>
Signed-off-by: Alexey Neyman <stilor@att.net>
This code was abstracted out of Cody P Schafer's multilib patch.
It doesn't seem right having architecture dependent code in a
specific libc implementation script. So this patch breaks it out into
scripts/build/arch/<arch>.sh in a function:
multilib_target_to_build="$(CT_DoArchMultilibTarget 'multi_flags'
'target-in')"
Note that this function gets called on each multilib variant with
different sets of compiler flags supplied in 'multi_flags'. The caller
will first filter the flags so that there is no conflicting flags (e.g.,
no '-m32 -m64') supplied.
Changed by Alexey Neyman:
- make option analysis check specific option rather than match global
options string as a whole. Moreover, old code did not handle multiple
options in the same multilib, e.g. '-m64 -mlittle'.
- fixed substitutions in powerpc.sh (*le variants did not match the
pattern in the shell parameter expansion)
- make s390.sh actually apply the flags it gathered from the options.
- straighten the spaghetti in x86.sh by setting two flags, arch & abi.
Also, do not depend on "gnu" being the last part - we can have
'*-uclibcx32', for example.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Signed-off-by: Ray Donnelly <ray.donnelly@gmail.com>
Signed-off-by: Alexey Neyman <stilor@att.net>
Written by Bryan Hundven.
Modified by Alexey Neyman to actually add the option to gcc.in.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Signed-off-by: Ray Donnelly <mingw.android@gmail.com>
Signed-off-by: Alexey Neyman <stilor@att.net>
By default, it is 'auto' - which means, it is enabled if there are
multilibs directories detected in the installation location for libgcc.
Thus, it is not detected for pass-1 GCC: the installation location is
empty at this point.
Signed-off-by: Alexey Neyman <stilor@att.net>
If a multilib configuration contains an endianness option, the
${endian_extra} is set to, for example, 'mb' (note, no dash!). It is
then added to CFLAGS, resulting in bogus flags like 'mb -mb'. But it is
not even needed, as ${extra_flags} already contains the very same
option!
Found by experimenting with multilibs with different endianness on SH,
which still didn't work, but that's another story...
Signed-off-by: Alexey Neyman <stilor@att.net>
Now that libc backend installs the libraries into the directory reported
by gcc as 'multi-os-directory', sh4 libraries are installed into a '!m4'
subdirectory. This directory then confuses GNU ld, which assumes the
exclamation mark to be a word separator and attempts to link to
'/usr/lib' (a directory). However, if multilib is enabled, the default
libraries are installed into the [expected] '/usr/lib/./'. This looks
like an artifact of SuperH's unique way of specifying the multilibs to
be built in GCC (which may list exclusions, starting with '!').
Signed-off-by: Alexey Neyman <stilor@att.net>
By default, sparc64-*-linux is configured with -mcpu=v9. However,
according to https://sourceware.org/ml/libc-alpha/2005-12/msg00027.html:
"There is no Linux sparc64 port that runs on non-UltraSPARC-I+ ISA
CPUs."
v9 is such a "non-UltraSPARC-I+ ISA CPU", so it makes no sense to
default to v9 when targetting Linux.
Change the default to ultrasparc, even though it can suboptimally
schedule instructions for newer SPARC CPUs. See the pending patch:
https://patchwork.ozlabs.org/patch/409424/
Signed-off-by: Alexey Neyman <stilor@att.net>
If EXPERIMENTAL is not set, the only choice for version is the set of
released versions - currently, 1.1.14. But this only option is disabled
because it is also marked EXPERIMENTAL; this leaves no available choices
in the configuration.
Marking MUSL as experimental: it seems to have header issues which
prevent, for example, gdbserver from building. musl copied chunks of
ptrace.h code from the kernel into its own headers, which now clash with
Linux kernel headers. Manifests at least on SH4 target.
Also, musl breaks in powerpc builds: GCC balks at it with "unsupported
DEFAULT_LIBC" message. Also, 64-bit powerpc and mips are not supported.
So, until someone figures out the dependencies for musl in config/, mark
it experimental.
Signed-off-by: Alexey Neyman <stilor@att.net>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69959
...was observed while trying to build gcc-5.3.0 on latest (at the time
of this change) archlinux using gcc-6.1.1.
This patch fixes the issue.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
This issue was reported on github:
https://github.com/crosstool-ng/crosstool-ng/issues/378
by: alonbg
This is the same addToolVersion.sh change in the zipfile, with minor
changes. (whitespace)
This closes#378
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Previous fix for cross-gdb broke powerpc-unknown_nofpu-linux-gnu which
uses an old GDB (6.8a). That GDB's configure chokes on $CC values with
multiple consecutive spaces; see the comment in 300-gdb.sh.
Signed-off-by: Alexey Neyman <stilor@att.net>
I couldn't get this sample to build. I tried rolling ct-ng back to 1.22
and back to the commit that introduced it, to no avail. Not sure if it
ever built on my machine.
The first problem is the failure to build binutils/gold because of the
missing <pthread.h> in mingw. However, even if CT_BINUTILS_GOLD_THREADS
option is unset, the build dies in configure of the pass-1 of the core CC.
The config.log states that it failed to link with libmpfr.a, which has
a lot of undefined references to symbols like '__imp___iob_func'.
Googling shows that these symbols are some dark Cygwin/MinGW magic and I
do not have the knowledge of these arcana. Let some other MinGWizard fix
it another day.
Signed-off-by: Alexey Neyman <stilor@att.net>
GLIBC 2.23 dropped support for pre-v9 SPARC in pthreads. Pass host
triplet with s/sparc/sparcv9/ replacement for 2.23.
Signed-off-by: Alexey Neyman <stilor@att.net>
GDB's configure mishandles the libexpat.{so,a} libraries when it is
given -static in CFLAGS AND --with-libexpat-prefix in configure's args:
it checks for <prefix>/lib/libexpat.so and finding that, attempts to
link it as `gcc -static .. conftest.c <prefix>/lib/libexpat.so`; this
obviously fails (.so cannot be statically linked), so configure assumes
libexpat is unusable. Thus, --with-libexpat-prefix is dangerous and
should be avoided; instead, configure should find the libraries via the
supplied CC/LD definitions.
Currently, native GDB 7.11 fails to build with uClibc-ng due to
undefined reference to _obstack_free.
On IRC
[http://crosstool-ng.osuosl.org/download/ibot-logs/2016-02-28.html], it
has been suggested to disable obstack in uClibc configuration. I think
it is a workaround rather than a fix: if another library/app needs
obstack, this leaves no viable configuration. IMO, if uClibc seeks to
mimic the glibc API, it should also provide _obstack_free call (an
alias for which it already has, even though commented out).
Signed-off-by: Alexey Neyman <stilor@att.net>
There is invalid assembly in dmalloc for PowerPC. The issue is that
'stw' expects a memory operand, and =g constraint allows both registers
and memory. Newer GCC tends to choose register even at -O0, resulting in
invalid assembly. Instead, force a register constraint in 'mflr' and let
GCC decide if it wants to store it into memory at all.
Reported this upstream.
Signed-off-by: Alexey Neyman <stilor@att.net>
Pass CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET and LDFLAGS_FOR_TARGET to
gcc configure in do_gcc_core_backend as they may be used to build
libstdc++ for bare-metal target.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET are rewritten in gcc-4.8.x and
gcc-4.9.x, so libstdc++ does not get any flags passed to gcc configure.
Backport fixes for config/mt-gnu and config/mt-ospace that preserve these
flags. With these fixes libstdc++ gets built with flags specified in
CT_TARGET_CFLAGS.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Because I don't pass `-o` to gcc, it makes an a.out file with gcc.
For clang it doesn't make the a.out, as that is not the default.
It doesn't hurt to output to /dev/null for both.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
This commit moves the do_libc_configure function to do_libc_backend and
switches do_libc_start_files and do_libc_final to call do_libc_backend.
The major reason for the rewrite is that musl => 1.1.13 has had it's own
build system rewritten and can now build out-of-tree.
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>