aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-emulation/nemu-xiangshan/files/nemu-xiangshan-add-syncconfig.patch14
-rw-r--r--app-emulation/nemu-xiangshan/files/nemu-xiangshan-disable-git-tracking.patch13
-rw-r--r--app-emulation/nemu-xiangshan/metadata.xml8
-rw-r--r--app-emulation/nemu-xiangshan/nemu-xiangshan-9999.ebuild124
4 files changed, 159 insertions, 0 deletions
diff --git a/app-emulation/nemu-xiangshan/files/nemu-xiangshan-add-syncconfig.patch b/app-emulation/nemu-xiangshan/files/nemu-xiangshan-add-syncconfig.patch
new file mode 100644
index 0000000..537c3de
--- /dev/null
+++ b/app-emulation/nemu-xiangshan/files/nemu-xiangshan-add-syncconfig.patch
@@ -0,0 +1,14 @@
+diff --git a/scripts/config.mk b/scripts/config.mk
+index 7b85f49..f8d994e 100644
+--- a/scripts/config.mk
++++ b/scripts/config.mk
+@@ -26,6 +26,9 @@ $(MCONF):
+ $(FIXDEP):
+ $(Q)$(MAKE) $(silent) -C $(FIXDEP_PATH)
+
++syncconfig: $(CONF) $(FIXDEP)
++ $(Q)$(CONF) $(silent) --syncconfig $(Kconfig)
++
+ menuconfig: $(MCONF) $(CONF) $(FIXDEP)
+ $(Q)$(MCONF) $(Kconfig)
+ $(Q)$(CONF) $(silent) --syncconfig $(Kconfig)
diff --git a/app-emulation/nemu-xiangshan/files/nemu-xiangshan-disable-git-tracking.patch b/app-emulation/nemu-xiangshan/files/nemu-xiangshan-disable-git-tracking.patch
new file mode 100644
index 0000000..80ff5c5
--- /dev/null
+++ b/app-emulation/nemu-xiangshan/files/nemu-xiangshan-disable-git-tracking.patch
@@ -0,0 +1,13 @@
+diff --git a/scripts/git.mk b/scripts/git.mk
+index 5400e61..8e0a353 100644
+--- a/scripts/git.mk
++++ b/scripts/git.mk
+@@ -7,8 +7,4 @@ GITFLAGS = -q --author='tracer-ics2021 <tracer@njuics.org>' --no-verify --allow-
+
+ # prototype: git_commit(msg)
+ define git_commit
+- -@git add $(NEMU_HOME)/.. -A --ignore-errors
+- -@while (test -e .git/index.lock); do sleep 0.1; done
+- -@(echo "> $(1)" && echo $(STUID) && hostnamectl && uptime) | git commit -F - $(GITFLAGS)
+- -@sync
+ endef
diff --git a/app-emulation/nemu-xiangshan/metadata.xml b/app-emulation/nemu-xiangshan/metadata.xml
new file mode 100644
index 0000000..decc6f6
--- /dev/null
+++ b/app-emulation/nemu-xiangshan/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="github">OpenXiangShan/NEMU</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-emulation/nemu-xiangshan/nemu-xiangshan-9999.ebuild b/app-emulation/nemu-xiangshan/nemu-xiangshan-9999.ebuild
new file mode 100644
index 0000000..fb8c93e
--- /dev/null
+++ b/app-emulation/nemu-xiangshan/nemu-xiangshan-9999.ebuild
@@ -0,0 +1,124 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DISABLE_AUTOFORMATTING="true"
+DOC_CONTENTS='
+ nemu-xiangshan mini config HOWTO
+
+Note: nemu-xiangshan is configurable via mconf, like the linux kernel.
+Without user config, this ebuild will target minimum riscv64
+You are encouraged to configure it on your own. Here are a couple of ways:
+
+1) USE="-savedconfig" and set/unset the remaining flags to obtain the features
+you want, and possibly a lot more.
+
+2) You can create your own configuration file by doing:
+
+FEATURES="keepwork" USE="savedconfig -*" emerge nemu-xiangshan
+cd /var/tmp/portage/app-emulation/nemu-xiangshan*/work/nemu-xiangshan*
+make menuconfig
+
+Now configure nemu-xiangshan as you want. Finally save your config file:
+
+cp config/.config /etc/portage/savedconfig/app-emulation/nemu-xiangshan-${PV}
+
+where ${PV} is the current version. You can then run emerge again with
+your configuration by doing:
+
+USE="savedconfig" emerge nemu-xiangshan
+'
+
+inherit savedconfig readme.gentoo-r1
+
+DESCRIPTION="NJU EMUlator, a full system x86/mips32/riscv32/riscv64 emulator for teaching"
+HOMEPAGE="https://github.com/OpenXiangShan/NEMU"
+
+# no license specified in upstream
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="savedconfig"
+
+EGIT_REPO_URI="https://github.com/OpenXiangShan/NEMU.git"
+EGIT_SUBMODULES=(
+ ready-to-run
+)
+inherit git-r3
+
+DEPEND="
+ sys-apps/dtc
+ media-libs/libsdl2
+ sys-libs/zlib
+ sys-libs/readline:=
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-disable-git-tracking.patch
+ "${FILESDIR}"/${PN}-add-syncconfig.patch
+)
+
+QA_PREBUILT="
+ usr/share/${PN}/ready-to-run/coremark-2-iteration.bin
+ usr/share/${PN}/ready-to-run/linux.bin
+ usr/share/${PN}/ready-to-run/riscv64-nemu-interpreter-dual-so
+ usr/share/${PN}/ready-to-run/linux-0xa0000.bin
+ usr/share/${PN}/ready-to-run/microbench.bin
+ usr/share/${PN}/ready-to-run/riscv64-nemu-interpreter-so
+"
+
+src_prepare() {
+ default
+ sed -i -e "/^CCACHE/d" scripts/build.mk || die
+}
+
+src_configure() {
+ export NEMU_HOME="${PWD}"
+ if use savedconfig; then
+ restore_config .config
+ if [[ -f .config ]]; then
+ ewarn "Using saved config"
+ else
+ die "No saved config, please consider generate one with 'make menuconfig'"
+ fi
+ else
+ elog "No saved config, seeding minimum riscv64"
+ cp configs/riscv64-xs_defconfig .config || die
+ fi
+
+ emake -j1 syncconfig < <(yes '') > /dev/null
+}
+
+src_compile() {
+ export NEMU_HOME="${PWD}"
+ emake
+ # TODO: require cross-compilation
+ # cd resource/gcpt_restore || die
+ # emake
+}
+
+src_install() {
+ dodoc README.md
+ dodoc -r resource/debian
+ dodoc -r resource/sdcard
+ readme.gentoo_create_doc
+
+ insinto "/usr/share/${PN}/"
+ rm -r ready-to-run/.git || die
+ doins -r ready-to-run
+ # Disallow stripping of prebuilt images
+ dostrip -x ${QA_PREBUILT}
+
+ cd build || die
+ for binary in $(ls -1 2>/dev/null); do
+ IFS='-' read -a name <<<"${binary}" || die
+ if [[ "${name[1]}" == 'nemu' ]]; then
+ newbin "${binary}" "${name[0]}-nemu-xiangshan-${name[@]:2}"
+ fi
+ done
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}