Created attachment 861208 [details] output of emerge --info Build fails due to unrecognized opcode 'fence.i': riscv64-unknown-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core -I.. -Wall -W -DGRUB_MACHINE_EFI=1 -DGRUB_MACHINE=RISCV64_EFI -nostdinc -isystem /usr/lib/gcc/riscv64-unknown-linux-gnu/13/include -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/include -I../include -DGRUB_FILE=\"kern/riscv/cache_flush.S\" -I. -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core -I.. -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06 -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/include -I../include -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core/lib/libgcrypt-grub/src/ -DGRUB_KERNEL=1 -D_FILE_OFFSET_BITS=64 -g -march=rv64imac -mabi=lp64 -fno-PIE -fno-pie -DGRUB_FILE=\"kern/riscv/cache_flush.S\" -I. -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core -I.. -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06 -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/include -I../include -I/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core/lib/libgcrypt-grub/src/ -DASM_FILE=1 -c -o kern/riscv/kernel_exec-cache_flush.o `test -f 'kern/riscv/cache_flush.S' || echo '/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core/'`kern/riscv/cache_flush.S /var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core/kern/riscv/cache_flush.S: Assembler messages: /var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06/grub-core/kern/riscv/cache_flush.S:43: Error: unrecognized opcode `fence.i', extension `zifencei' required This is because configure.ac asserts -march=rv64imac, intending to prevent use of float or doubles, but unfortunately 'rv64imac' lacks zifencei: if test "x$target_cpu" = xriscv64; then CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64 -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_target_cc_soft_float="-march=rv64imac -mabi=lp64"], []) This is fixed upstream (https://git.savannah.gnu.org/cgit/grub.git/tree/configure.ac): if test "x$target_cpu" = xriscv64; then CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64 -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_target_cc_soft_float="-march=rv64imac -mabi=lp64"], []) # ISA spec version 20191213 factored out extensions Zicsr and Zifencei CFLAGS="$TARGET_CFLAGS -march=rv64imac_zicsr_zifencei -mabi=lp64 -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_target_cc_soft_float="-march=rv64imac_zicsr_zifencei -mabi=lp64"], []) fi I got a clean compile by changing configure.ac to include that new CFLAGS stanza.
Does this patch suffice? https://git.savannah.gnu.org/cgit/grub.git/patch?id=049efdd72eb7baa7b2bf8884391ee7fe650da5a0
/var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06 # cat > gentoo-bug-905785.patch index 4f649ed..5c01af0 100644 --- a/configure.ac +++ b/configure.ac @@ -870,11 +870,19 @@ if test x"$platform" != xemu ; then CFLAGS="$TARGET_CFLAGS -march=rv32imac -mabi=ilp32 -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_target_cc_soft_float="-march=rv32imac -mabi=ilp32"], []) + # ISA spec version 20191213 factored out extensions Zicsr and Zifencei + CFLAGS="$TARGET_CFLAGS -march=rv32imac_zicsr_zifencei -mabi=ilp32 -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_soft_float="-march=rv32imac_zicsr_zifencei -mabi=ilp32"], []) fi if test "x$target_cpu" = xriscv64; then CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64 -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_target_cc_soft_float="-march=rv64imac -mabi=lp64"], []) + # ISA spec version 20191213 factored out extensions Zicsr and Zifencei + CFLAGS="$TARGET_CFLAGS -march=rv64imac_zicsr_zifencei -mabi=lp64 -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_soft_float="-march=rv64imac_zicsr_zifencei -mabi=lp64"], []) fi if test "x$target_cpu" = xia64; then CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror" /var/tmp/portage/sys-boot/grub-2.06-r6/work/grub-2.06 # patch -p0 < gentoo-bug-905785.patch can't find file to patch at input line 4 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |index 4f649ed..5c01af0 100644 |--- a/configure.ac |+++ b/configure.ac -------------------------- File to patch: configure.ac patching file configure.ac ... Success! >>> Installing (1 of 1) sys-boot/grub-2.06-r6::gentoo * For information on how to configure GRUB2 please refer to the guide: * https://wiki.gentoo.org/wiki/GRUB2_Quick_Start >>> Completed (1 of 1) sys-boot/grub-2.06-r6::gentoo * Messages for package sys-boot/grub-2.06-r6: * For information on how to configure GRUB2 please refer to the guide: * https://wiki.gentoo.org/wiki/GRUB2_Quick_Start * Regenerating GNU info directory index... * Processed 87 info files.
*** Bug 905948 has been marked as a duplicate of this bug. ***
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=939f10540fec60b4b22708ebd89610d95ff2097d commit 939f10540fec60b4b22708ebd89610d95ff2097d Author: Mike Gilbert <floppym@gentoo.org> AuthorDate: 2023-05-09 20:22:13 +0000 Commit: Mike Gilbert <floppym@gentoo.org> CommitDate: 2023-05-09 20:22:13 +0000 sys-boot/grub: backport build fix for RISCV Closes: https://bugs.gentoo.org/905785 Signed-off-by: Mike Gilbert <floppym@gentoo.org> sys-boot/grub/files/grub-2.06-riscv.patch | 49 +++++++++++++++++++++++++++++++ sys-boot/grub/grub-2.06-r6.ebuild | 1 + 2 files changed, 50 insertions(+)