Ok, Thanks for your review. I will prepare a new implement recently.
BR,
Jiawei
----- Original Message -----
From: "Kito Cheng"
To: "Christoph Müllner"
Cc: Jiawei , [email protected], [email protected], [email protected]
Sent: Mon, 1 Sep 2025 18:41:03 +0800
Subject: Re: [PATCH] RISC-V: Allow profiles input in '--with-arch' option.
Hi Jiawei:
I would prefer to have full verification on arch-canonicalize side,
could you extract profile list to a def file like riscv-cores.def or
riscv-ext.def and then read that in arch-canonicalize?
On Mon, Sep 1, 2025 at 6:03 PM Christoph Müllner
wrote:
>
>
>
> On Tue, Aug 26, 2025 at 11:26 AM Jiawei 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
>>