RFC: Building RTEMS/RISC-V with LLVM/Clang

Hesham Almatary hesham.almatary at cl.cam.ac.uk
Thu Nov 14 09:53:46 UTC 2019


On Thu, 14 Nov 2019 at 07:27, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Hello Hesham,
>
> On 13/11/2019 16:32, Hesham Almatary wrote:
> > On Wed, 13 Nov 2019 at 14:48, Sebastian Huber
> > <sebastian.huber at embedded-brains.de> wrote:
> >>
> >> Hello Hesham,
> >>
> >> On 23/10/2019 15:50, Hesham Almatary wrote:
> >>> Hi,
> >>>
> >>> I submitted a RFC patch series to be able to build RTEMS/RISC-V with
> >>> LLVM/Clang. I'd appreciate your feedback on that.
> >>>
> >>> A sample configure line to build RTEMS with LLVM/Clang is:
> >>>
> >>> ../rtems/configure --target=riscv-rtems6
> >>> --enable-rtemsbsp=rv64imafdc_clang  CC_FOR_TARGET="clang"
> >>> CXX_FOR_TARGET="clang++" AR_FOR_TARGET="llvm-ar"
> >>
> >> Could you provide me a 64-bit Linux binary installation of your clang
> >> toolchain so that I can test it locally?
> >>
> > https://drive.google.com/file/d/1I0WHOMT2CCkxn_9mz7_WxEXXgCp6yNab/view?usp=sharing
>
> thanks, you can delete the file if you want.
>
> >
> > You can you also to build it yourself from source here
> > https://github.com/CTSRD-CHERI/llvm-project
> >
> >>>
> >>> NEWLIB_SYSROOT env variable needs to point to where newlib is
> >>> installed while configuring/building RTEMS.
> >>
> >> To which directory NEWLIB_SYSROOT in the /opt/rtems/5 installation tree
> >> must this point?
> >>
> > riscv-rtems5. Or the corresponding multilib directory for your RISC-V BSP.
>
> So, if I use --sysroot=/opt/rtems/5/riscv-rtems5, then clang will pick
> up /opt/rtems/5/riscv-rtems5/include for the headers and
> /opt/rtems/5/riscv-rtems5/lib for the libraries. I guess this works only
> for the default multilib. What do I have to do to use another multilib?
> Add a -L/build/rtems/5/riscv-rtems5/lib/rv32im/ilp32 before the
> --sysroot? Why don't you use -I and -L instead of the --sysroot? This
> --sysroot seems to me quite unsafe in combination with multilibs.
>
You're right. --sysroot would only work for the default build.
Normally I build newlib with Clang for each RTEMS BSP I build since
Clang/newlib isn't yet able to build multilib.That's definitely
something that can be changed. We can remove this -sysroot requirement
and ask the user to provide -I and -L in the CFLAGS while configuring.
Does that make more sense  to you?

> I tried to to this, unfortunately it doesn't work with assembler files:
>
> [  65/3840] Compiling cpukit/score/cpu/riscv/riscv-counter.S
> 08:12:49 runner ['/build/rtems-clang-riscv/sdk/bin/clang', '-DASM',
> '-target', 'riscv32-unknown-rtems6', '-Icpukit/include',
> '-I../../../cpukit/include', '-Icpukit/score/cpu/riscv/include',
> '-I../../../cpukit/score/cpu/riscv/include',
> '../../../cpukit/score/cpu/riscv/riscv-counter.S',
> 'cpukit/score/cpu/riscv/riscv-counter.S.20.o']
> clang-10: error: invalid argument 'missing --sysroot= option' not
> allowed with 'rtems driver'
>
> For C files, it is not an issue:
>
> [  63/3840] Compiling bsps/riscv/riscv/clock/clockdrv.c
> 08:23:20 runner ['/build/rtems-clang-riscv/sdk/bin/clang', '-MMD',
> '-Wmissing-prototypes', '-Wimplicit-function-declaration',
> '-Wstrict-prototypes', '-Wnested-externs', '-Wall', '-O2', '-g',
> '-fdata-sections', '-ffunction-sections', '-target',
> 'riscv32-unknown-rtems6', '-I/build/rtems/5/riscv-rtems5/include',
> '-Icpukit/include', '-I../../../cpukit/include',
> '-Icpukit/score/cpu/riscv/include',
> '-I../../../cpukit/score/cpu/riscv/include', '-Ibsps/include',
> '-I../../../bsps/include', '-Ibsps/riscv/include',
> '-I../../../bsps/riscv/include', '-Ibsps/riscv/riscv/include',
> '-I../../../bsps/riscv/riscv/include',
> '../../../bsps/riscv/riscv/clock/clockdrv.c', '-c',
> '-o/home/EB/sebastian_h/git-rtems-5/build/riscv/rv32imac/bsps/riscv/riscv/clock/clockdrv.c.5.o',
> '-DHAVE_CONFIG_H=1']
>
> This looks like a bug in the RTEMS clang driver. Are you able to fix it?
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber at embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


More information about the devel mailing list