ARM-software / LLVM-embedded-toolchain-for-Arm

A project dedicated to building LLVM toolchain for 32-bit Arm embedded targets.
Apache License 2.0
377 stars 85 forks source link

clang/clang++ multi-lib selection: prefer no rtti, no exceptions variant for clang #449

Open JoshuaYonathan opened 1 month ago

JoshuaYonathan commented 1 month ago

Hello,

When I run the following command: clang -print-multi-directory --target=arm-none-eabi -march=armv7e-m -mfloat-abi=hard -mfpu=fpv5-d16

I expect the output: arm-none-eabi/armv7em_hard_fpv5_d16

However, I get the output: arm-none-eabi/armv7em_hard_fpv5_d16_exn_rtti

Adding the -fno-rtti -fno-exceptions flags gets me the output I expect, but wouldn't it be the correct behavior to select the non-exn_rtti libs when invoking clang and not clang++?

voltur01 commented 4 weeks ago

Hi Joshua,

Thank you for reaching out!

-fno-rtti -fno-exceptions should not have impact on C code generation and thus the C libraries, so effectively C libraries in both folders armv7em_hard_fpv5_d16 and armv7em_hard_fpv5_d16_exn_rtti must be the same. Which is not ideal, but this is how the multilib setup works now.

For a C project library folder selection should not make a difference, however I agree that it would be cleaner to select armv7em_hard_fpv5_d16 when clang is used as you suggested. I will keep this issue as an improvement in the multilib setup.