Commit Graph

3435 Commits

Author SHA1 Message Date
Mike Frysinger 644e8bba07 newlib: xstormy16: add missing string.h include
Some of these functions are using memcpy & memset from string.h but
not including the header leading to implicit declaration warnings.
2022-03-01 01:14:33 -05:00
Mike Frysinger a531ad9726 newlib: speed up targ-include setup & add error checking
The current targ-include setup runs `cp` every header file it installs,
in serial.  This can be a little noticeable on systems, so cleanup the
logic to rely on cp's ability to copy multiple files to a directory in
a single call.

We still need a check for empty directories with no headers (i.e. the
glob doesn't match anything), so add a helper variable to contain that
logic to reduce the boiler plate a little.
2022-02-28 19:07:22 -05:00
Mike Frysinger 28724b2f62 newlib: libc: move stdio multiplex logic from build to source files
Rather than define per-object rules in the Makefile, have small files
that define & include the right content.  This simplifies the build
rules, and makes understanding the source a little easier (imo) as it
makes all the subdirs behave the same: you have 1 source file and it
produces 1 object.  It's also about the same amount of boiler plate,
without having to define custom build rules that can fall out of sync.
Some of these rules were already unnecessary as they were compiling a
single source file into the same named object w/out custom flags, and
Automake handles that for us completely.

This will also be important as we merge the libc.a build into the top
dir since it relies on a single flat list of objects for overrides.

Also take the opportunity to clean up the unnecessary header deps in
here.  Automake provides dependency generation for free now.
2022-02-28 19:04:11 -05:00
Mike Frysinger ec5ea6efae newlib: simplify header setup rules
Since POSIX cp requires copying a file to a directory without having
to specify the name explicitly, rely on that to avoid calling basename
on every source file.

We can also drop the stub `true` call if the -f test failed.  The use
of `if` already takes care of that in POSIX shell.
2022-02-28 19:03:57 -05:00
Mike Frysinger 8343db918f newlib: libc: move configure into top-level
This kills off the last configure script under libc/ and folds it
into the top newlib configure script.  The a lot of the logic was
already in the top configure script, so move what's left into a
libc/acinclude.m4 file.
2022-02-25 13:52:48 -05:00
Mike Frysinger 85f2dca52d newlib: add silent rules support to top-level rules 2022-02-24 19:14:12 -05:00
Mike Frysinger acf642177b newlib: fix multilib libg.a parallel builds
I split libg.a out into a sep target from libc.a for the main dir in
commit f2b053f49e ("newlib: separate out
libg from libc"), but missed the multilib dirs.  That leads to an
uncommon parallel build failure:
- libc.a rule runs & finishes
- $(BUILD_MULTISUBDIR)/libc.a rule runs
  -> failure due to libg.a not yet existing
- libg.a rule runs & finishes

Split the multilib libg rule out from libc too so it can depend on the
main libg directly and avoid this race.
2022-02-23 22:01:05 -05:00
Mike Frysinger 5ad394510b newlib: libm: workaround ar duplicate member behavior
GNU ar has undocumented behavior where it doesn't dedupe its inputs if
they're all on the same command line, so we have to dedupe ourselves.
2022-02-23 20:07:10 -05:00
Matt Joyce 44b60f0c4b Make __sdidinit unused
Remove dependency on __sdidinit member of struct _reent to check
object initialization. Like __sdidinit, the __cleanup member of
struct _reent is initialized in the __sinit() function. Checking
initialization against __cleanup serves the same purpose and will
reduce overhead in the __sfp() function in a follow up patch.
2022-02-22 12:38:46 +01:00
Mike Frysinger 416792d59a newlib: libc: delete crt0.o duplication
The crt0.o was handled in a subdir-by-subdir basis: it would be compiled
in one (e.g. libc/sys/$arch/), then copied up one level (libc/sys/), then
copied up another (libc/) before finally being copied & installed in the
top newlib dir.  The libc/sys/ copy was cleaned up, and then the top dir
was changed to copy it directly out of the libc/sys/$arch/ dir.  But the
libc/sys/ copy to libc/ was left behind.  Clean that up now too.
2022-02-18 21:25:32 -05:00
Mike Frysinger 56c65fb8d9 newlib: posix: use local includes for local headers
These headers aren't installed, so use "" includes instead of <> so
we don't search system header paths.  This matches the style used
elsewhere in the tree for these local headers, and makes it work
w/out explicit -I flags (as needed with non-recursive make).
2022-02-18 18:40:57 -05:00
Mike Frysinger ac9f8c46b1 newlib: libm: merge build up a directory
Convert all the libm/ subdir makes into the top-level Makefile.  This
allows us to build all of libm from the top Makefile without using any
recursive make calls.  This is faster and avoids the funky lib.a logic
where we unpack subdir archives to repack into a single libm.a.  The
machine override logic is maintained though by way of Makefile include
ordering, and source file accumulation in libm_a_SOURCES.

One thing to note is that this will require GNU Make because of:
	libm_a_CFLAGS = ... $(libm_a_CFLAGS_$(subst /,_,$(@D)))
This was the only way I could find to supporting per-dir compiler
settings, and I couldn't find a POSIX compatible way of transforming
the variable content.  I don't think this is a big deal as other
Makefiles in the tree are using GNU Make-specific syntax, but I call
this out as it's the only one so far in the new automake code that
I've been writing.

Automake doesn't provide precise control over the output object names
(by design).  This is fine by default as we get consistent names in all
the subdirs: libm_a-<source>.o.  But this relies on using the same set
of compiler flags for all objects.  We currently compile libm/common/
with different optimizations than the rest.

If we want to compile objects differently, we can create an intermediate
archive with the subset of objects with unique flags, and then add those
objects to the main archive.  But Automake will use a different prefix
for the objects, and thus we can't rely on ordering to override.

But if we leverage $@, we can turn Automake's CFLAGS into a multiplex
on a per-dir (and even per-file if we wanted) basis.  Unfortunately,
since $@ contains /, Automake complains it's an invalid name.  While
GNU Make supports this, it's a POSIX extension, so Automake flags it.
Using $(subst) avoids the Automake warning to get a POSIX compliant
name, albeit with a GNU Make extension.
2022-02-17 20:56:32 -05:00
Mike Frysinger f2b053f49e newlib: separate out libg from libc
Make this a separate target from libc so that we can migrate libc over
to automake more easily.  Having it integrated into the libc target is
difficult to handle when using automake rules which expect a one-to-one
mapping between names & inputs.
2022-02-17 20:54:21 -05:00
Mike Frysinger c75bb30fc1 newlib: libc: reshuffle include order for the manual
When migrating the manual to the top-level, the include order was
sorted by name of the subdir.  But this changed the chapter order
of the manual in the process.  Change the sorting back to match
existing chapters and update the comments to explain.
2022-02-17 20:43:51 -05:00
Mike Frysinger 48942fe31a newlib: powerpc: switch to Automake conditionals
Using xxx_LIBADD, xxx_DEPENDENCIES, and EXTRA_xxx_SOURCES is one way of
conditionally including files into a target.  But it's meant more for the
cases where the variables added to LIBADD & DEPENDENCIES are constructed
via substitution (e.g. AC_SUBST) or other dynamic methods.  With Automake
conditionals, then the much simpler form is to conditionally append to
the xxx_SOURCES variable and let Automake sort everything out.
2022-02-17 20:43:51 -05:00
Mike Frysinger bf9f6a0984 newlib: use https:// URIs in more places 2022-02-17 00:48:58 -05:00
Mike Frysinger beadbdfc04 newlib: fix mips fenv.o handling
Commit 8fa73a9f84 changed how fenv.c is
compiled wrt mips16 targets used the wrong variable to add fenv.o to
libm.a.  Fix that thinko so it's included in the build again.
2022-02-16 20:40:53 -05:00
Mike Frysinger 2a83e65fc2 newlib: rtems: drop redundant header install
The top-level newlib dir already takes care of recursing into the
sys/xxx/include/ subdirs and installing any headers found, so the
rtems subdir doesn't need to do this itself.
2022-02-16 20:03:57 -05:00
Mike Frysinger 01ed65ed09 newlib: add missing mkdir to header install
Make sure these subdirs exist before trying to install headers into them.
2022-02-16 20:03:07 -05:00
Mike Frysinger 40748cd73a newlib: powerpc: simplify reallocr & callocr build logic
Replace the custom build rules (which require copying & pasting from the
current Makefile) with small stub files.  This allows us to drop the rules
entirely and let Automake provide everything.
2022-02-16 20:00:27 -05:00
Mike Frysinger d1591ed4a1 newlib: i386/xstormy16: drop unused -I libm/common flag
These subdirs don't actually use anything from libm.  The common dir
in particular only has 4 header files, and none are included here.

The xstormy16 code has a comment mentioning why this hack is here, but
it refers to code that was removed when its configure script was merged
up a level.
2022-02-16 19:58:13 -05:00
Mike Frysinger 907764ebec newlib/libgloss: drop unused $(CROSS_CFLAGS)
This is used in a bunch of places, but nowhere is it ever set, and
nowhere can I find any documentation, nor can I find any other project
using it.  So delete the flags to simplify.
2022-02-15 20:02:51 -05:00
Mike Frysinger df5808b771 newlib: drop support for decstation & sunos systems
These targets don't actually cross-compile -- they try to pull some
objects out of the host's /lib/libc.a, /lib/libm.a, and /lib/crt0.o
directly and merge them into newlib's own libraries.  This is hard
to keep working and impossible to test.  Considering the vintage of
such targets, and gcc dropping them many many years ago, drop them
from newlib too.  This will make cleaning up the build a lot easier.
2022-02-15 20:00:58 -05:00
Mike Frysinger b7f2965dc3 newlib: rename doc/local.mk to Makefile.inc
For consistency across the whole tree.
2022-02-15 19:59:53 -05:00
Mike Frysinger ac90a6590b newlib: phoenix: merge configure up to top-level
Merge sys/phoenix/ configure logic into libc/ itself.  This kills
off the last lingering script in this tree (other than libc itself).
2022-02-15 19:59:08 -05:00
Mike Frysinger 86432e55b4 newlib: phoenix: merge machine/ configure scripts up a level
The machine configure scripts are all effectively stub scripts that
pass the higher level options to its own makefile.
2022-02-15 19:59:08 -05:00
Mike Frysinger d470ef6463 newlib: phoenix: merge machine/ trampoline up a level
The machine/{configure,Makefile} files exist only to fan out to the
specific machine/$arch/ subdir.  We already have all that same info
in the phoenix/ dir itself, so by moving the recursive configure and
make calls into it, we can cut off this logic entirely and save the
overhead.
2022-02-15 19:59:08 -05:00
Mike Frysinger 16c12761fd newlib: phoenix: drop missing machine subdirs
These were never added to the tree, and as we transition from autoconf
to automake, it really wants the latter subdirs to always exist.  These
don't, so delete the logic.
2022-02-15 19:59:08 -05:00
Mike Frysinger 5a6bf1749f newlib: phoenix: move some logic from configure to the Makefile
These configure scripts hardcode some settings, so move them to the
Makefile to simplify so we can drop the configure scripts entirely.
2022-02-15 19:59:08 -05:00
Andoni Arregi ec69debcb9 Improve lgammaf range for very small cases
The original cut for small arguments at |x|<2**-70 (copied from the
double version) produces that when computing nadj we get a subnormal
number for t*x and thus, the division of pi/subnormal will be INF and
the logarithm of it too, which is wrong as a result for lgammaf in this
range.
The proposed new limit seems to be safe and has been tested to
produce accurate results.
(Courtesy of Andreas Jung, ESA)
2022-02-14 14:44:11 +01:00
Mike Frysinger bf167aade1 newlib: remove unused fenv flags
These look like they were just copied & pasted from common/Makefile.am.
The funcs in this dir are all stubs that don't actually call any math
or builtin functions, and a simple compile shows they produce identical
object code.  So delete to simplify the build rules.
2022-02-11 06:26:01 -05:00
Andoni Arregi 8f2bd6f046 Fix expf overflow limit
Correct the overflow limit in the variable o_threshold to be consistent
with the FLT_UWORD_LOG_MAX variable used by the internal implementation
of the expf algorithm itself.
The u_threshold variable has also been modified to be written in the
same format.

Note that this fix improves the situation but does not completely
correct the inconsistencies regarding the overflow and underflow limits
between the expf wrapper (wf_exp.c) and the expf algorithm itself
(ef_exp.c).

Currently these limits are different for the
_FLT_LARGEST_EXPONENT_IS_NORMAL and _FLT_NO_DENORMALS cases as well as
for the case where __OBSOLETE_MATH is not defined (only for the
underflow limit in this case).
2022-02-10 15:59:14 +01:00
Mike Frysinger 1aec525a44 newlib: delete unused autotool regen scripts
These don't work at all now that we've completely upgraded autotools.
2022-02-10 01:39:08 -05:00
Mike Frysinger e95c80b6d8 newlib: libm: fix rebase conflicts
I missed this cleanup when rebasing on top of the latest branch.
2022-02-10 00:36:34 -05:00
Mike Frysinger e114cbc6e1 newlib: libm: move configure into top-level
This kills off the last configure script under libm/ and folds it
into the top newlib configure script.  The vast majority of logic
was already in the top configure script, so move the little that
is left into a libm/acinclude.m4 file.
2022-02-10 00:28:05 -05:00
Mike Frysinger 5b9c4cf23e newlib: drop support for $oext
This was needed only to support libtool in case objects ended in .lo
instead of .o, but we dropped libtool, so drop this too.
2022-02-09 23:35:23 -05:00
Mike Frysinger f034d8ad19 newlib: drop support for $aext
This was needed only to support libtool in case the library ended in
.la instead of .a, but we dropped libtool, so drop this too.
2022-02-09 23:34:17 -05:00
Mike Frysinger 5c21b37214 newlib: fix mkdoc dependencies
Make sure we depend on the right name of mkdoc all the time, and that
the rules that need it (e.g. .def files) depend on it.

Reported-by: Jon Turney <jon.turney@dronecode.org.uk>
2022-02-09 23:26:19 -05:00
Mike Frysinger 006da84337 newlib: drop libtool support
This was only ever used for i?86-pc-linux-gnu targets, but that's been
broken for years, and has since been dropped.  So clean this up too.

This also deletes the funky objectlist logic since it only existed for
the libtool libraries.  Since it was the only thing left in the small
Makefile.shared file, we can punt that too.
2022-02-09 20:27:37 -05:00
Mike Frysinger 5a0ab4454b newlib: punt sys/linux support
This was only used by the i?86-pc-linux-gnu target which we've removed,
and even though it's using a "sys/linux/" dir to make it sound like it
only depends on the Linux kernel, it's actually tied to glibc APIs built
on top of Linux.  Since the code relies on internal glibc APIs and has
been broken for some time, punt it all.  If someone wants to bring it
back, they can try and actually keep the Linux-vs-glibc APIs separate.
2022-02-09 20:27:37 -05:00
Mike Frysinger e01b2bb014 newlib: drop unused iconvdata
This was only ever used for i?86-pc-linux-gnu targets, but that's been
broken for years, and has since been dropped.  So clean this up too.
2022-02-09 20:26:55 -05:00
Mike Frysinger 462d6942f6 newlib: drop i?86-pc-linux-* target support
This was added 20+ years ago.  It seems to have very few (or no users)
as it only works on 32-bit x86 GNU/Linux (i.e. glibc) systems, and even
then only with old versions of glibc.  It hasn't compiled in at least 5
years, but most likely been broken for more like 15 years -- it relies
on internal glibc APIs (like linuxthreads), and that code has changed
and been deleted significantly since.

This single target ends up dragging in a lot of non-trivial code that is
hard to keep working, and currently impossible to verify -- the libtool
and iconvdata and sys/linux/ code isn't used by anything else, but ends
up touching just about every build file in the tree.  Punt the target so
we can start stripping out all these unique code paths.

This commit by itself just disables the target.  We'll start deleting the
individual unused pieces in followups.
2022-02-09 20:23:12 -05:00
Mike Frysinger 401e68c664 newlib: switch to standard AC_PROG_RANLIB
This is basically a noop, but switch to the autoconf macro for finding
a suitable ranlib tool.
2022-02-08 22:18:06 -05:00
Mike Frysinger 985c8f3592 newlib: drop autoconf-2.13 hack
We require autoconf-2.69 now, so we don't need this old install hack.
2022-02-08 22:18:06 -05:00
Mike Frysinger b63a4bb49a newlib: drop cygnus EXEEXT hack
Now that we rely on AC_NO_EXECUTABLES to disable link tests, we don't
need this hack to disable exeext probing.
2022-02-08 22:18:05 -05:00
Mike Frysinger e7ad3f5aa8 newlib: switch to AM_PROG_AR
Now that we require automake-1.15, we can use this macro rather than
do the tool search ourselves.
2022-02-08 21:24:59 -05:00
Mike Frysinger 34af195290 newlib: switch to standard AM_PROG_AS
Now that we require a recent automake version, rely on it to provide AS
and CCAS and CCASFLAGS for us.
2022-02-08 20:19:18 -05:00
Mike Frysinger b9346cee1a newlib: switch to standard AC_PROG_CC
Now that we use AC_NO_EXECUTABLES, and we require a recent version of
autoconf, we don't need to define our own copies of these macros.  So
switch to the standard AC_PROG_CC.
2022-02-08 19:09:26 -05:00
Mike Frysinger 9b50254377 newlib: move AC_NO_EXECUTABLES logic up to common code
This logic was added to libc & libm to get it working again after some
reworks in the CPP handling, but now that that's settled, let's move
this to the common newlib configure logic.  This will make it easier
to consolidate all the configure calls into the top-level newlib dir.

This does create a lot of noise in the generate scripts, but that's
because of the ordering of the calls, not because of correctness. We
will try to draw that back down in follow up commits as we modernize
the toolchain calls in here.
2022-02-08 19:09:26 -05:00
Mike Frysinger 953ba1e6d1 newlib: simplify nds32 automake checks
This code is a bit more convoluted than it needs to be.  GPR_SOURCES
is never set to anything, and the automake checks use negative logic
to add the SP & DP source files to dedicated variables that are only
expanded once.  Get rid of the unused variable, use normal boolean
logic, and collapse the source settings into a single variable.
2022-02-08 19:06:15 -05:00