For tcc, it should make no difference in the code,
if your system is a x86_64 or an aarch64 machine,
but i expect, that tcc on aarch64 is far less tested.
And yes, an full assembler for riscv64 is missing in tcc.
For your issues with the missing "crt1.o" and "crti.o" files:
These are the startup files and they are provided by
by the c runtime library. (dev package)
For the gnu c library, they are in the cross dev packages
in your linux distro.
A gcc cross compiler package is always specific:
one host, one target(family),
but you can try zig.
While the package is designed/created for the zig language,
zig is also a c and a c++ compiler
(mostly based on clang and llvm).
The interesting part of zig is also the fact,
that all targets are supported in one package
and that the c and c++ runtime libraries
are included in source form and compiled
for each target.
And the zig downloads are not only x86_64 and x86,
but also for running zig on aarch64 systems
(linux, windows, macos)
See the downloads at
https://ziglang.org/downloadsand you might want to try: zig-linux-aarch64-*
zig cc -target riscv64-linux-musl
zig c++ -target riscv64-linux-musl
supported targets:
(
https://ziglang.org/learn/overview/#support-table )
--
bye bye ... Detlef