Hi everyone,
This is my first time using the mailing list/patching an open-source program, so let me know if I am doing something wrong.
I was trying to build the riscv version of tcc while using the newlib standard library for riscv provided by GCC and I ran into a couple of issues. First, I wanted to make the cross compiler use the newlib library by default and I believe using the `--sysincludepaths`, `--libpaths`, and `--crtprefix` However, I found when I tried adding these options to the `./configure` script, they had no effect on the tcc cross compiler. (Command and output shown below)
```
../configure \
--prefix=$HOME/.local \
--sysincludepaths=/usr/riscv64-elf/include \
--libpaths=/usr/riscv64-elf/lib \
--crtprefix=/usr/riscv64-elf/lib
make cross-riscv64
```
TCC output
```
./riscv64-tcc -print-search-dirs
install: /home/nebk/.local/lib/tcc
include:
/home/nebk/.local/lib/tcc/include
/usr/local/include
/usr/include
libraries:
/usr/lib
/lib
/usr/local/lib
libtcc1:
/home/nebk/.local/lib/tcc/riscv64-libtcc1.a
crt:
/usr/lib
elfinterp:
/lib/ld-linux-riscv64-lp64d.so.1
```
I put together a small patch that seems to fix the issue (0001-Update-build-scripts.patch). It changes the `print_mak` function in the configure script to output these options to the `EXTRA_DEFINES` variable (a random name I chose) instead of the `NATIVE_DEFINES` variable. Then the `EXTRA_DEFINES` variable is always appended to the total build defines, so that is used for cross-compilers as well as the main tcc compiler. With this change a few other lines could probably be removed from the Makefile as well, but I wasn't brave enough to do it.
The next issue I ran into was errors when using `stdint.h`, (specifically a file included by it `_intsup.h`). Many base definitions that are provided by the gcc riscv compiler were missing (like __INT32_TYPE__) along with some pointer size definitions. I added in the pointer size definitions generally, and the other riscv definitions were copied from definitions by the riscv gcc compiler. This is in (0002-stdint-base-types-for-riscv-in-tccdef.h.patch).
The file contents for _intsup.h can be found here:
https://www.sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=newlib/libc/include/sys/_intsup.h;h=993121ba890b2208eb83432daf741aa0ba598d30;hb=HEADThanks,
-Sam Ellicott
Soli Deo Gloria