Commit Graph

14 Commits

Author SHA1 Message Date
Yuriy Kolerov
ce6467faa1 newlib: Add missing linker options for nano.specs
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>
2023-05-10 17:30:15 +04:00
Stephanos Ioannidis
1da7698b7c newlib-nano: Fix include path for CT_NEWLIB_NANO_INSTALL_IN_TARGET
When `CT_NEWLIB_NANO_INSTALL_IN_TARGET=y`, the `nano.specs` file
emitted by the newlib-nano build script contains an invalid include
path, resulting in the full `newlib.h` being included instead of the
nano `newlib.h` by the application.

`=/include/newlib-nano` is not a valid path (`=` does not mean anything
and that string is taken as an include path as-is) and GCC ignores this
include path, resulting in application including the `newlib.h` from
`include/` which contains the newlib build configurations for the full
newlib.

This commit modifies the newlib-nano build script to emit a proper
newlib-nano include path relative to the `GCC_EXEC_PREFIX`.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
2022-05-12 20:58:29 +12:00
Derald D. Woods
396f23d3de scripts/build/companion_libs: Fix missing directory with newlib-nano
With 'CT_NEWLIB_NANO_INSTALL_IN_TARGET=y', this build failure occurs:
----------------------------------------------------------------------
[...]
[INFO ]  Installing Newlib Nano library
[EXTRA]    Configuring Newlib Nano library
[EXTRA]    Building Newlib Nano C library
[EXTRA]    Installing Newlib Nano C library
[INFO ]  Installing Newlib Nano library: done in 110.66s (at 29:04)
[INFO ]  =================================================================
[INFO ]  Installing libstdc++ newlib-nano
[EXTRA]    Configuring libstdc++ for newlib-nano
[EXTRA]    Building libstdc++ newlib-nano library
[EXTRA]    Installing libstdc++ newlib-nano library
[EXTRA]    Housekeeping for core gcc compiler
[EXTRA]       '' --> lib (gcc)   lib (os)
[EXTRA]       ' -mthumb' --> lib/thumb (gcc)   lib/thumb (os)
[EXTRA]       ' -marm -mfpu=auto -march=armv5te+fp -mfloat-abi=hard' --> lib/arm/autofp/v5te/fpu (gcc)   lib/arm/autofp/v5te/fpu (os)
[EXTRA]       ' -mthumb -mfpu=auto -march=armv7+fp -mfloat-abi=hard' --> lib/thumb/autofp/v7/fpu (gcc)   lib/thumb/autofp/v7/fpu (os)
[INFO ]  Installing libstdc++ newlib-nano: done in 457.12s (at 36:42)
[ERROR]
[ERROR]  >>
[ERROR]  >>  Build failed in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_DoExecLog[scripts/functions@376]
[ERROR]  >>        called from: newlib_nano_copy_multilibs[scripts/build/companion_libs/350-newlib_nano.sh@270]
[ERROR]  >>        called from: CT_IterateMultilibs[scripts/functions@1608]
[ERROR]  >>        called from: do_newlib_nano_for_target[scripts/build/companion_libs/350-newlib_nano.sh@254]
[ERROR]  >>        called from: do_companion_libs_for_target[scripts/build/companion_libs.sh@43]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@697]

Current command:
   'cp' '-f' '/build/toolchain/arm-none-eabi/newlib-nano/arm-none-eabi/lib/thumb/libc.a' '/build/toolchain/arm-none-eabi/arm-none-eabi/lib/thumb/libc_nano.a'
exited with error code: 1
Please fix it up and finish by exiting the shell with one of these values:
    1  fixed, continue with next build command
    2  repeat this build command
    3  abort build
----------------------------------------------------------------------

This commit calls 'mkdir -p' to create the destination path before
copying.

Signed-off-by: Derald D. Woods <woods.technical@gmail.com>
2022-05-12 20:58:03 +12:00
Alexey Neyman
7b97bdd825 Convert tabs to spaces
Recent changes introduced a mixture of tabs/spaces that result in broken
indentation in multiple places.

Signed-off-by: Alexey Neyman <stilor@att.net>
2022-02-11 00:47:51 -08:00
Kumar Gala
9179450082 newlib-nano: Fix nano.spec based on CT_NEWLIB_NANO_INSTALL_IN_TARGET
The spec file was missing replacing various libs like libc, libm, etc
with their nano equiv when CT_NEWLIB_NANO_INSTALL_IN_TARGET=y.  Update
the nano.spec file that is generated to rename libc, libm, etc if
CT_NEWLIB_NANO_INSTALL_IN_TARGET=y

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2021-07-30 00:02:42 -05: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
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
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
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
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