Skip to content

Unable to build multiple libraries correctly #1205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
dreamcmi opened this issue Mar 1, 2023 · 12 comments
Closed

Unable to build multiple libraries correctly #1205

dreamcmi opened this issue Mar 1, 2023 · 12 comments

Comments

@dreamcmi
Copy link

dreamcmi commented Mar 1, 2023

My requirement is to build some newlib libraries that I need, they correspond to different arch and abi, but when I use --with-multilib-generator to build, he does not seem to build the required lib correctly, Instead, it exited normally.

The abnormal behavior is as follows

darren@darren-virtual-machine:~/riscv-gnu-toolchain$ ./configure --prefix=/home/darren/riscv-gnu-toolchain/build --enable-multilib --with-arch=rv32imac --with-abi=ilp32 --with-multilib-generator="rv32imac-ilp32--,rv32imafc-ilp32f--"
darren@darren-virtual-machine:~/riscv-gnu-toolchain$ make -j8
...
...
mkdir -p -- /home/darren/riscv-gnu-toolchain/build/share/gdb/python/gdb/command
mkdir -p -- /home/darren/riscv-gnu-toolchain/build/share/gdb/python/gdb/function
mkdir -p -- /home/darren/riscv-gnu-toolchain/build/share/gdb/python/gdb/printer
make[7]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib/gdb/data-directory'
make[6]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib/gdb/data-directory'
make[5]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib/gdb'
make[4]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib/gdb'
make[3]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib/gdb'
make[2]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib'
make[1]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gdb-newlib'
mkdir -p stamps/ && touch stamps/build-gdb-newlib
darren@darren-virtual-machine:~/riscv-gnu-toolchain$ ls build/riscv-none-elf/lib/
ldscripts
darren@darren-virtual-machine:~/riscv-gnu-toolchain$ 

When I remove --with-multilib-generator, it builds the lib fine, but only a few defaults, not what I need.

darren@darren-virtual-machine:~/riscv-gnu-toolchain$ ./configure --prefix=/home/darren/riscv-gnu-toolchain/build --enable-multilib --with-arch=rv32imac --with-abi=ilp32
darren@darren-virtual-machine:~/riscv-gnu-toolchain$ make -j8
...
...
make[9]: Nothing to be done for 'install-data-am'.
make[9]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/rv64imafdc/lp64d/libstdc++-v3'
make[8]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/rv64imafdc/lp64d/libstdc++-v3'
make[7]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/rv64imafdc/lp64d/libstdc++-v3'
make[6]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/libstdc++-v3'
make[5]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/libstdc++-v3'
make[4]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/libstdc++-v3'
make[3]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2/riscv-none-elf/libstdc++-v3'
make[2]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2'
make[1]: Leaving directory '/home/darren/riscv-gnu-toolchain/build-gcc-newlib-stage2'
mkdir -p stamps/ && touch stamps/build-gcc-newlib-stage2
darren@darren-virtual-machine:~/riscv-gnu-toolchain$ ls build/riscv-none-elf/lib/
crt0.o     libc_nano.a  libgloss_nano.a  libm_nano.a    libsim.a            libstdc++.la  nano.specs   rv32iac    rv64imac        sim.specs
ldscripts  libg.a       libg_nano.a      libnosys.a     libstdc++.a         libsupc++.a   nosys.specs  rv32im     rv64imafdc
libc.a     libgloss.a   libm.a           libsemihost.a  libstdc++.a-gdb.py  libsupc++.la  rv32i        rv32imafc  semihost.specs
@TommyMurphyTM1234
Copy link
Collaborator

Are you sure that you're doing a clean build each time?

Try omitting --enable-multilib and just specifying --with-multilib-generator="rv32imac-ilp32--,rv32imafc-ilp32f--" and see if that makes any difference.

@TommyMurphyTM1234
Copy link
Collaborator

TommyMurphyTM1234 commented Mar 1, 2023

--with-multilib-generator="rv32imac-ilp32--,rv32imafc-ilp32f--"

Actually, the problem is most likely that your multilib list is comma separated and should be semicolon separated.

So, try --with-multilib-generator="rv32imac-ilp32--; rv32imafc-ilp32f--" instead.

@dreamcmi
Copy link
Author

dreamcmi commented Mar 1, 2023

Oh, thanks. It was caused by the wrong symbol I wrote.

@dreamcmi dreamcmi closed this as completed Mar 1, 2023
@dreamcmi dreamcmi reopened this Mar 1, 2023
@dreamcmi
Copy link
Author

dreamcmi commented Mar 1, 2023

Oh, there is another question, if I want to compile the gcc toolchain that supports rv32imac rv32imafc rv32ec at the same time, what should I do?
I am now executing ./configure --prefix=/home/darren/riscv-gnu-toolchain/build --enable-multilib --with-arch=rv32imac --with-abi=ilp32 --with-multilib-generator="rv32imac-ilp32--;rv32imafc-ilp32f--;rv32ec-ilp32e--"
But when compiling the rv32imafc target, there will be a newlib problem. It seems that the hard floating point (abi is ilp32f) is not used when newlib is compiled, but the abi is set to ilp32.

/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none- elf/lib/libnosys.a(fstat.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld:/ home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a( isatty.o): can't link soft-float modules with single-float modules

@TommyMurphyTM1234
Copy link
Collaborator

TommyMurphyTM1234 commented Mar 1, 2023

But when compiling the rv32imafc target, there will be a newlib problem. It seems that the hard floating point (abi is ilp32f) is not used when newlib is compiled, but the abi is set to ilp32.

When compiling your code for rv32imafc/ilp32f are you sure that you are passing both -march=rv32imafc and -mabi=ilp32f? If you only pass the former then the ABI will default to the toolchain default which, in this case, is ilp32, and you will get the sort of float module mismatch at link time that you mention.

Note that when you do ./configure --with-arch=rv32imac --with-abi=ilp32 then there is no need to specify that arch/abi combination in the --with-multilib-generator list as the required libs will already be built as the toolchain's defaults. And you don't need to specify --enable-multilib when --with-multilib-generator is specified as the latter implies the former.

@dreamcmi
Copy link
Author

dreamcmi commented Mar 1, 2023

I set add_compile_options(-march=rv32imafc -mabi=ilp32f) when compiling

@dreamcmi
Copy link
Author

dreamcmi commented Mar 1, 2023

When I set ./configure --prefix=/home/darren/riscv-gnu-toolchain/build --with-multilib-generator="rv32imac-ilp32--;rv32imafc-ilp32f--;rv32ec-ilp32e-- "
It throws new error ABI is incompatible with that of the selected emulation:target emulation elf32-littleriscv does not match elf64-littleriscv'

@TommyMurphyTM1234
Copy link
Collaborator

I set add_compile_options(-march=rv32imafc -mabi=ilp32f) when compiling

I don't understand. Where are you setting this?
You need to provide more details about how to reproduce your issue if you want help.

When I set ./configure --prefix=/home/darren/riscv-gnu-toolchain/build --with-multilib-generator="rv32imac-ilp32--;rv32imafc-ilp32f--;rv32ec-ilp32e-- "
It throws new error ABI is incompatible with that of the selected emulation:target emulation elf32-littleriscv does not match elf64-littleriscv'

That's because, for some reason, when you're targeting rv32imafc/ilp32f it's falling back to the toolchain default of rv64gc/lp64d and generating that mismatch error at link time.

But it's difficult to know what's going on when you are not providing adequate info to reproduce your issues.

@TommyMurphyTM1234
Copy link
Collaborator

TommyMurphyTM1234 commented Mar 1, 2023

I built the toolchain as follows:

cd ~/Downloads
git clone https://github.com/riscv-collab/riscv-gnu-toolchain
cd riscv-gnu-toolchain
./configure --prefix=`pwd`/installed-tools --with-arch=rv32imac --with-abi=ilp32 --with-multilib-generator="rv32imafc-ilp32f--;rv32ec-ilp32e--"
make

Then I created a simple test.c program in installed-tools/bin:

/* test.c */

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello, World!\n");
    return 0;
}

And then I compiled it as follows with all arch/abi combinations supported by the toolchain and had no problems:

cd installed-tools/bin

./riscv32-unknown-elf-gcc test.c -o test-rv32imac-ilp32.exe
./riscv32-unknown-elf-gcc -march=rv32imafc -mabi=ilp32f test.c -o test-rv32imafc-ilp32f.exe
./riscv32-unknown-elf-gcc -march=rv32ec -mabi=ilp32e test.c -o test-rv32ec-ilp32e.exe

ls -l *.exe
-rwxrwxr-x 1 tommy tommy 20300 Mar  1 22:42 test-rv32ec-ilp32e.exe
-rwxrwxr-x 1 tommy tommy 17928 Mar  1 22:42 test-rv32imac-ilp32.exe
-rwxrwxr-x 1 tommy tommy 17940 Mar  1 22:42 test-rv32imafc-ilp32f.exe

So I don't really know why you seem to be having problems but there is no issue with the toolchain that I can see.

@dreamcmi
Copy link
Author

dreamcmi commented Mar 2, 2023

I think the problem lies in the ld stage. It can be seen that your steps are for running on the local machine without explicitly linking newlib. Because I am going to use it for riscv mcu, so newlib will be statically linked when compiling. It is written like this in cmake

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/Ld/Link.ld)
add_link_options(-nostartfiles
                 -Xlinker --gc-sections
                 -Wl, --print-memory-usage
                 -Wl,-Map,${PROJECT_NAME}.map
                 --specs=nano.specs
                 --specs=nosys.specs)

https://github.com/dreamcmi/CH32V307-CMake

When I follow your command line (./configure --prefix=/home/darren/riscv-gnu-toolchain/build --with-arch=rv32imac --with-abi=ilp32 --with-multilib-generator="rv32imafc-ilp32f--;rv32ec-ilp32e--") after compiling it still gives the error.

darren@darren-virtual-machine:~/CH32V307-CMake$ rm -rf build
darren@darren-virtual-machine:~/CH32V307-CMake$ cmake -G Ninja -B build
-- Now is UNIX-like OS!
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/darren/CH32V307-CMake/build
darren@darren-virtual-machine:~/CH32V307-CMake$ cmake --build build
[2/33] Building C object CMakeFiles/ch32v307-ninja.elf.dir/APP/ch32v30x_it.c.obj
/home/darren/CH32V307-CMake/APP/ch32v30x_it.c:12:1: warning: argument to 'interrupt' attribute is not '"user"', '"supervisor"', or '"machine"' [-Wattributes]
   12 | void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
      | ^~~~
/home/darren/CH32V307-CMake/APP/ch32v30x_it.c:13:1: warning: argument to 'interrupt' attribute is not '"user"', '"supervisor"', or '"machine"' [-Wattributes]
   13 | void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
      | ^~~~
[33/33] Linking C executable ch32v307-ninja.elf
FAILED: ch32v307-ninja.elf 
: && /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-gcc  -nostartfiles -Xlinker --gc-sections -Wl,--print-memory-usage -Wl,-Map,ch32v307-ninja.map --specs=nano.specs --specs=nosys.specs -T /home/darren/CH32V307-CMake/Ld/Link.ld CMakeFiles/ch32v307-ninja.elf.dir/APP/ch32v30x_it.c.obj CMakeFiles/ch32v307-ninja.elf.dir/APP/main.c.obj CMakeFiles/ch32v307-ninja.elf.dir/APP/system_ch32v30x.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Core/core_riscv.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Debug/debug.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_adc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_bkp.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_can.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_crc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_dac.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_dbgmcu.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_dma.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_dvp.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_eth.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_exti.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_flash.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_fsmc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_gpio.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_i2c.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_iwdg.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_misc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_opa.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_pwr.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_rcc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_rng.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_rtc.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_sdio.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_spi.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_tim.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_usart.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Peripheral/src/ch32v30x_wwdg.c.obj CMakeFiles/ch32v307-ninja.elf.dir/Startup/startup_ch32v30x_D8C.S.obj -o ch32v307-ninja.elf   && cd /home/darren/CH32V307-CMake/build && /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-objcopy -Oihex /home/darren/CH32V307-CMake/build/ch32v307-ninja.elf /home/darren/CH32V307-CMake/build/ch32v307-ninja.hex && /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-objcopy -Obinary /home/darren/CH32V307-CMake/build/ch32v307-ninja.elf /home/darren/CH32V307-CMake/build/ch32v307-ninja.bin && /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-objdump --all-headers --demangle --disassemble /home/darren/CH32V307-CMake/build/ch32v307-ninja.elf > /home/darren/CH32V307-CMake/build/ch32v307-ninja.lst && /home/darren/riscv-gnu-toolchain/build/bin/riscv-none-elf-size --format=berkeley /home/darren/CH32V307-CMake/build/ch32v307-ninja.elf
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-closer.o): in function `_close_r':
closer.c:(.text._close_r+0x14): warning: _close is not implemented and will always fail
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fstatr.o): in function `_fstat_r':
fstatr.c:(.text._fstat_r+0x16): warning: _fstat is not implemented and will always fail
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-isattyr.o): in function `_isatty_r':
isattyr.c:(.text._isatty_r+0x14): warning: _isatty is not implemented and will always fail
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-lseekr.o): in function `_lseek_r':
lseekr.c:(.text._lseek_r+0x18): warning: _lseek is not implemented and will always fail
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-readr.o): in function `_read_r':
readr.c:(.text._read_r+0x18): warning: _read is not implemented and will always fail
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-printf.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-printf.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-puts.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-puts.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-wbuf.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-wbuf.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-wsetup.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-wsetup.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fflush.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fflush.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-findfp.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-findfp.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fwalk.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fwalk.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-impure.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-impure.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-makebuf.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-makebuf.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memset.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memset.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-freer.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-freer.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-mallocr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-mallocr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-vfprintf.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-vfprintf.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-sbrkr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-sbrkr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-stdio.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-stdio.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-writer.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-writer.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-closer.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-closer.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fstatr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fstatr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fvwrite.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-fvwrite.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-isattyr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-isattyr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-lseekr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-lseekr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memchr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memchr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memcpy-asm.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memcpy-asm.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memmove.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-memmove.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-mlock.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-mlock.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-reallocr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-reallocr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-vfprintf_i.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-vfprintf_i.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-readr.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-readr.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-reent.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-reent.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-msizer.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libc_nano.a(lib_a-nano-msizer.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(close.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(close.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(fstat.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(fstat.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(isatty.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(isatty.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(lseek.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(lseek.o)
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(read.o): can't link soft-float modules with single-float modules
/home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/bin/ld: failed to merge target specific data of file /home/darren/riscv-gnu-toolchain/build/lib/gcc/riscv-none-elf/12.2.0/../../../../riscv-none-elf/lib/libnosys.a(read.o)
Memory region         Used Size  Region Size  %age Used
           FLASH:        8324 B       288 KB      2.82%
             RAM:         32 KB        32 KB    100.00%
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

@TommyMurphyTM1234
Copy link
Collaborator

I think the problem lies in the ld stage. It can be seen that your steps are for running on the local machine without explicitly linking newlib.

Yes, but it is implicitly/automatically linking newlib. There's no other C library in the bare metal toolchain (unless you build the Picolib version of the toolchain if the patches for doing so have all been integrated - I'm not sure).

Because I am going to use it for riscv mcu, so newlib will be statically linked when compiling.

Same with my simple example. Obviously everything is statically linked for a bare metal target.

It is written like this in cmake

Your issue is with your build process and not with the toolchain. I.e. it's a CMake/Ninja issue and not a toolchain issue. You should probably seek support for these tools in another more appropriate forum.

@TommyMurphyTM1234 TommyMurphyTM1234 closed this as not planned Won't fix, can't repro, duplicate, stale Mar 2, 2023
@dreamcmi
Copy link
Author

dreamcmi commented Mar 2, 2023

Oh, you reminded me that I did not set march and mabi for ld, which caused this error. After I set it, it worked normally, thank you very much.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants