-# Debuginfo and stripping makes no sense for this package.
+# Disable debug packages, we don't need them.
%global debug_package %{nil}
-%global __strip /bin/true
-%global _binaries_in_noarch_packages_terminate_build 0
-Name: opensbi
-Version: 0.9
-Release: 1%{?dist}
-Summary: RISC-V Open Source Supervisor Binary Interface (OpenSBI)
+# Make sure we use the cross-binary to strip.
+%global __strip riscv64-linux-gnu-strip
+
+# Avoid this error caused by cross-compilation and packaging the
+# result in a noarch package:
+# error: Arch dependent binaries in noarch package
+%global _binaries_in_noarch_packages_terminate_build 0
-License: BSD
-URL: https://github.com/riscv-software-src/opensbi
+%global forgeurl https://github.com/riscv/opensbi
+%global commit 355796c5bc1906d749850e4215e0f7f53802ba5b
+%forgemeta
-Source0: https://github.com/riscv-software-src/%{name}/archive/refs/tags/v%{version}.tar.gz
+Name: opensbi
+Version: 1.2
+Release: 1%{?dist}
+Summary: RISC-V Open Source Supervisor Binary Interface
-BuildRequires: gcc-riscv64-linux-gnu
-BuildRequires: binutils-riscv64-linux-gnu
+License: BSD
+URL: %{forgeurl}
+Source: %{forgesource}
-# The -devel subpackage contains riscv64 code so you'll get:
-# > Arch dependent binaries in noarch package
+# The resulting binary contains RISC-V firmware intended to be used
+# under virtualization, so it can be used on any architecture.
Buildarch: noarch
+BuildRequires: gcc-riscv64-linux-gnu
+BuildRequires: binutils-riscv64-linux-gnu
+BuildRequires: findutils
+BuildRequires: grep
+BuildRequires: coreutils
+BuildRequires: make
+BuildRequires: dtc
+BuildRequires: python3
+BuildRequires: gawk
+BuildRequires: sed
+
%description
-The RISC-V Supervisor Binary Interface (SBI) is the firmware
-used to boot RISC-V virtual machines in qemu.
+RISC-V Open Source Supervisor Binary Interface. This is for QEMU
+RISC-V virt machines.
-%package devel
-Summary: Development files for %{name}
-# NB: Doesn't require the base package because it doesn't need it.
+%prep
+%forgesetup
-%description devel
-This package contains development files (headers, libraries, etc)
-for %{name}.
+%build
+mkdir build32 build64
+# Build 32 bit firmware.
+%make_build \
+ O=build32 \
+ CROSS_COMPILE=riscv64-linux-gnu- \
+ PLATFORM=generic \
+ PLATFORM_RISCV_XLEN=32
+# Build 64 bit firmware.
+%make_build \
+ O=build32 \
+ CROSS_COMPILE=riscv64-linux-gnu- \
+ PLATFORM=generic
+%install
+# Install 32 bit firmware.
+%make_install \
+ O=build32 \
+ CROSS_COMPILE=riscv64-linux-gnu- \
+ PLATFORM=generic \
+ PLATFORM_RISCV_XLEN=32 \
+ I=%{buildroot} \
+ INSTALL_LIB_PATH=%{_libdir} \
+ INSTALL_FIRMWARE_PATH=%{_datadir}/%{name}
+pushd %{buildroot}%{_datadir}/%{name}/generic/firmware
+for f in fw_*.bin fw_*.elf; do
+ mv $f opensbi-riscv32-generic-$f
+done
+popd
+
+# Install 64 bit firmware.
+%make_install \
+ O=build64 \
+ CROSS_COMPILE=riscv64-linux-gnu- \
+ PLATFORM=generic \
+ I=%{buildroot} \
+ INSTALL_LIB_PATH=%{_libdir} \
+ INSTALL_FIRMWARE_PATH=%{_datadir}/%{name}
+pushd %{buildroot}%{_datadir}/%{name}/generic/firmware
+for f in fw_*.bin fw_*.elf; do
+ mv $f opensbi-riscv64-generic-$f
+done
+popd
-%prep
-%setup -q -n opensbi-%{version}
+# Remove development libraries and headers for the time being.
+rm -rfv %{buildroot}%{_libdir}
+rm -rfv %{buildroot}/include
+# Remove the example/testing payloads.
+rm -rfv %{buildroot}%{_datadir}/%{name}/*/firmware/payloads
-%build
-%global platforms generic
-for platform in %{platforms}; do
- make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=$platform %{?_smp_mflags}
-done
+%files
+%license COPYING.BSD
+%doc README.md
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}/*
-%install
-# This installs into the install/ subdirectory ...
-for platform in %{platforms}; do
- make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=$platform %{?_smp_mflags} \
- install
-done
-# ... and we copy the files we want to the desired locations.
-mkdir -p %{buildroot}%{_libdir}
-cp -a install/usr/lib64/* %{buildroot}%{_libdir}
+%changelog
+* Tue May 23 2023 Richard W.M. Jones <rjones@redhat.com> 1.2
+- Use forge macros
+- Convert to use cross-compilation
+- Fix dates in changelog
-mkdir -p %{buildroot}%{_includedir}
-cp -a install/usr/include/* %{buildroot}%{_includedir}
+* Tue May 02 2023 David Abdurachmanov <davidlt@rivosinc.com> v1.2.116.2023.05.02.7919530-1
+- Sync with upstream master branch (v1.2-116-g7919530)
-mkdir -p %{buildroot}%{_datadir}
-cp -a install/usr/share/opensbi %{buildroot}%{_datadir}/%{name}
+* Thu Jan 26 2023 David Abdurachmanov <davidlt@rivosinc.com> v1.2.0.2023.01.26.c6b5188c-1
+- Use v1.2 (last stable release for now)
+* Wed Jan 25 2023 David Abdurachmanov <davidlt@rivosinc.com> v1.2.34.2023.01.25.c45992c-1
+- Sync with upstream master branch (v1.2-34-gc45992c)
-%files
-%{_datadir}/%{name}
+* Thu Nov 17 2022 David Abdurachmanov <davidlt@rivosinc.com> v1.1.85.2022.11.17.14f5c4c-1
+- Sync with upstream master branch (v1.1-85-g14f5c4c)
+* Mon Jun 27 2022 David Abdurachmanov <davidlt@rivosinc.com> v1.1.0.2022.06.27.4489876-1
+- Sync with upstream master branch (v1.1 tag)
-%files devel
-%dir %{_libdir}/lp64
-%{_libdir}/lp64/libsbi*.a
-%{_libdir}/lp64/opensbi/generic/lib/libplatsbi.a
-%{_includedir}/sbi/
-%{_includedir}/sbi_utils/
+* Thu Jun 23 2022 David Abdurachmanov <davidlt@rivosinc.com> v1.0.99.2022.06.23.6f1fe98-1
+- Sync with upstream master branch
+* Thu Jun 02 2022 David Abdurachmanov <davidlt@rivosinc.com> v1.0.92.2022.06.13.9dc5ec5-1
+- Sync with upstream master branch
-%changelog
-* Mon Sep 20 2021 Richard W.M. Jones <rjones@redhat.com> - 0.9-1
-- Initial release.
+* Thu Jun 02 2022 David Abdurachmanov <davidlt@rivosinc.com> v1.0.81.2022.06.02.cb8271c-1
+- Sync with upstream master branch
+
+* Sat Nov 06 2021 David Abdurachmanov <david.abdurachmanov@gmail.com> v0.9.163.2021.11.06.0979ffd-1
+- Sync with upstream master branch
+
+* Fri Oct 08 2021 David Abdurachmanov <david.abdurachmanov@gmail.com> v0.9.152.2021.10.08.754d511-1
+- Sync with upstream master branch
+
+* Tue Aug 17 2021 David Abdurachmanov <david.abdurachmanov@gmail.com> v0.9.134.2021.08.17.7aa6c9a-1
+- Sync with upstream master branch
+- Upstream support for SiFive HiFive Unmatched
+
+* Wed Apr 21 2021 David Abdurachmanov <david.abdurachmanov@gmail.com> v0.9.35.2021.04.21.f41196a
+- Update to v0.9+
+
+* Wed Jan 06 2021 David Abdurachmanov <david.abdurachmanov@sifive.com> v0.8.81.2021.01.06.7dcb1e1
+- New version
+- Switch to generic platform
+- Remove all others special Fedora variants of firmware
+- Remove development library and documentation (not needed)
+- Remove example payloads