On Tue, Aug 26, 2025 at 11:26 AM Jiawei <[email protected]> wrote:
> This patch allows profiles input in '--with-arch'. With this change,
> profile names such as `rva22*`, `rvb23*`, or `rvi*` can be passed
> directly to `--with-arch` without triggering configure errors. This
> makes it easier to configure and build a toolchain targeting RISC-V
> profiles, since the input can match the profile name directly instead
> of requiring manual mapping to base ISA strings.
>
The validation of the profiles (string starts with "rvi", "rva", or "rvb")
seems a bit weak.
On the one hand, that means the validation is future-proof. But what
happens if "rva19" is provided as a profile?
I don't see a way around validating the exact profile name (and only
allowing supported profiles).
BR
Christoph
> gcc/ChangeLog:
>
> * config.gcc: Accept RISC-V profiles in `--with-arch`.
> * config/riscv/arch-canonicalize: Add profile detection and
> skip canonicalization for profiles.
>
> ---
> gcc/config.gcc | 6 ++++--
> gcc/config/riscv/arch-canonicalize | 8 +++++++-
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index 04e88cce00d..a209c64958b 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -4775,7 +4775,8 @@ case "${target}" in
>
> # Infer arch from --with-arch, --target, and --with-abi.
> case "${with_arch}" in
> - rv32e* | rv32i* | rv32g* | rv64e* | rv64i* | rv64g*)
> + rv32e* | rv32i* | rv32g* | rv64e* | rv64i* | rv64g* \
> + | rvi* | rva* | rvb*)
> # OK.
> ;;
> "")
> @@ -4829,7 +4830,8 @@ case "${target}" in
> | ilp32d,rv32*d* | ilp32d,rv32g* \
> | lp64,rv64* | lp64e,rv64e* \
> | lp64f,rv64*f* | lp64f,rv64g* \
> - | lp64d,rv64*d* | lp64d,rv64g*)
> + | lp64d,rv64*d* | lp64d,rv64g* \
> + | lp64d,rvi* | lp64d,rva* | lp64d,rvb*)
> ;;
> *)
> echo "--with-abi=${with_abi} is not supported for
> ISA ${with_arch}" 1>&2
> diff --git a/gcc/config/riscv/arch-canonicalize
> b/gcc/config/riscv/arch-canonicalize
> index 15a398502b3..76951261452 100755
> --- a/gcc/config/riscv/arch-canonicalize
> +++ b/gcc/config/riscv/arch-canonicalize
> @@ -341,6 +341,9 @@ def get_all_extensions():
> #
> IMPLIED_EXT = parse_def_files()
>
> +def is_profile_arch(arch):
> + return arch.startswith(("rva", "rvb", "rvi"))
> +
> def arch_canonicalize(arch, isa_spec):
> # TODO: Support extension version.
> is_isa_spec_2p2 = isa_spec == '2.2'
> @@ -608,7 +611,10 @@ if __name__ == "__main__":
> sys.exit(run_unit_tests())
> elif args.arch_strs:
> for arch in args.arch_strs:
> - print (arch_canonicalize(arch, args.misa_spec))
> + if is_profile_arch(arch):
> + print(arch)
> + else:
> + print(arch_canonicalize(arch, args.misa_spec))
> else:
> parser.print_help()
> sys.exit(1)
> --
> 2.43.0
>
>