Clang/LLVM is a cross-compiler, and so we don't have to make a choice
about -march/-mabi at build-time, but we may have to compute a
default -march/-mabi when compiling a program. Until now, each
place that has needed a default -march has calculated one itself.
This patch adds a single place where a default -march is calculated,
in order to avoid calculating different defaults in different places.
This patch adds a new function riscv::getRISCVArch which encapsulates
this logic based on GCC's for computing a default -march value
when none is provided. This patch also updates the logic in
riscv::getRISCVABI to match the logic in GCC's build system for
computing a default -mabi.
This patch also updates anywhere that -march is used to now use the
new function which can compute a default. In particular, we now
explicitly pass a -march value down to the gnu assembler.
GCC has convoluted logic in its build system to choose a default
-march/-mabi based on build options, which would be good to match.
This patch is based on the logic in GCC 9.2.0. This commit's logic is
different to GCC's only for baremetal targets, where we default
to rv32imac/ilp32 or rv64imac/lp64 depending on the target triple.
Tests have been updated to match the new logic.
llvm::StringSwitch has a method StartsWithLower which might help make the logic a bit clearer
Something like this (I haven't tested it!)