Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index Assistance Unsupported Software
  • Search

[SOLVED] games-emulation/ares ebuild need help

This forum covers all Gentoo-related software not officially supported by Gentoo. Ebuilds/software posted here might harm the health and stability of your system(s), and are not supported by Gentoo developers. Bugs/errors caused by ebuilds from overlays.gentoo.org are covered by this forum, too.
Post Reply
Advanced search
18 posts • Page 1 of 1
Author
Message
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

[SOLVED] games-emulation/ares ebuild need help

  • Quote

Post by sdauth » Tue May 21, 2024 1:19 am

Hello,
I created the following ebuild for games-emulation/ares : https://github.com/ares-emulator/ares
I'm having an issue with the librashader USE flag I added to enable/disable librashader.
Otherwise, it builds fine. clang is enabled by default as it is recommended by ares project.

The ares doc says :
Librashader Support

If you do not want to include librashader support, you can pass the following option to the make command to skip these requirements using: librashader=false

Librashader requires rust in order to build. You can install it with the following command:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup toolchain install nightly

In order to build librashader, change into the ares/thirdparty/librashader directory and run the script build-librashader.sh Note that once the build completes, it will instruct you to run three copy commands to install the library on your system. These paths may be different depending on Linux distribution.
I don't think I want to do that : "run the script build-librashader.sh" ; what's the correct way to do it ?

Thanks.

ares-138.ebuild

Code: Select all

# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit desktop toolchain-funcs

ARES_COMMIT="57c01b8e17746151a58af822d1db4aa59f21f673"

DESCRIPTION="ares is a cross-platform, open source, multi-system emulator, focusing on accuracy and preservation."
HOMEPAGE="https://ares-emu.net https://github.com/ares-emulator/ares"
SRC_URI="https://github.com/ares-emulator/ares/archive/${ARES_COMMIT}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/${PN}-${ARES_COMMIT}"

LICENSE="GPL-3+ ISC"
SLOT="0"
KEYWORDS="~amd64"
IUSE="alsa ao +clang +gtk librashader openal +opengl oss +pulseaudio +sdl udev xv"

RDEPEND="
  x11-libs/libX11
  x11-libs/libXext
  x11-libs/libXrandr
  alsa? ( media-libs/alsa-lib )
  ao? ( media-libs/libao )
  openal? ( media-libs/openal )
  opengl? ( media-libs/libglvnd[X] )
  pulseaudio? ( media-libs/libpulse )
  sdl? ( media-libs/libsdl2[joystick] )
  udev? ( virtual/libudev:= )
  xv? ( x11-libs/libXv )
  librashader? ( games-misc/librashader )
  gtk? (
    dev-libs/glib:2
    x11-libs/cairo
    x11-libs/gdk-pixbuf:2
    x11-libs/gtk+:3[X]
    x11-libs/gtksourceview:3.0=
    x11-libs/pango
  )
  !gtk? (
    dev-qt/qtcore:5
    dev-qt/qtgui:5
    dev-qt/qtwidgets:5
  )
"
DEPEND="
  ${RDEPEND}
  x11-base/xorg-proto"
BDEPEND="
  virtual/pkgconfig
  !clang? (
    >sys-devel/gcc-11.4.0
  )
  clang? (
    sys-devel/lld
    sys-devel/clang
  )
"

src_prepare() {
  default
}

src_compile() {
  if use clang ; then
    compiler="clang++"
  else
    compiler="$(tc-getCXX)"
  fi

  # Librashader requires rust in order to build.
  if use librashader ; then
    librashader=true
  else
    librashader=false
  fi

  local makeopts=(
    platform=linux
    compiler="${compiler}"
    hiro=$(usex gtk gtk3 qt5)
    librashader="${librashader}"
  )

  local drivers=(
    video.xshm
    input.xlib
    $(usev alsa audio.alsa)
    $(usev ao audio.ao)
    $(usev openal audio.openal)
    $(usev opengl "video.glx video.glx2")
    $(usev oss audio.oss)
    $(usev pulseaudio "audio.pulseaudio audio.pulseaudiosimple")
    $(usev sdl input.sdl)
    $(usev udev input.udev)
    $(usev xv video.xvideo)
  )

  local coreopts=(
    cores="a26 fc sfc n64 sg ms md ps1 pce ng msx cv myvision gb gba ws ngp spec"
    ruby="${drivers[*]}"
  )

  emake "${makeopts[@]}" "${coreopts[@]}" -C desktop-ui
}

src_install() {
  dobin desktop-ui/out/ares
  domenu desktop-ui/resource/ares.desktop
  doicon desktop-ui/resource/ares.png

  use opengl && insinto /usr/share/ares/Shaders && doins -r thirdparty/slang-shaders/*
  insinto /usr/share/ares/Database && doins -r mia/Database/*
}
Last edited by sdauth on Thu May 23, 2024 3:12 pm, edited 5 times in total.
Top
Hu
Administrator
Administrator
Posts: 24385
Joined: Tue Mar 06, 2007 5:38 am

  • Quote

Post by Hu » Tue May 21, 2024 2:06 am

That curlpipesh doesn't bode well (even if it is parroted from the Rust project, where it was a bad idea from the beginning). However, delegating part of the build to the upstream project's shell script is not inherently wrong. We routinely delegate to upstream's Makefile or equivalent. Is there something in this particular shell script that makes you want to avoid invoking it from the ebuild?
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Tue May 21, 2024 5:09 am

The idea was to skip downloading rust nightly (although maybe it is really needed ?) and use the rust version I have on my system.
But after looking at : thirdparty/librashader/librashader-build-script/Cargo.toml

Code: Select all

[dependencies]
cbindgen = "0.26.0"
clap = { version = "=4.1.0", features = ["derive"] }
It needs clap dependency, which is not available as a gentoo ebuild.
I suppose I need to add that instead (with maybe cbindgen too) to CRATES variable and also (maybe) add a cargo eclass.
Also, I don't know how to call the build script in the src_compile(), any tips would be appreciated ! :)
I'm not even sure my GPU can handle those shaders but if I can learn one thing or two..
Top
Hu
Administrator
Administrator
Posts: 24385
Joined: Tue Mar 06, 2007 5:38 am

  • Quote

Post by Hu » Tue May 21, 2024 2:20 pm

Does this not work?

Code: Select all

src_compile() {
    (cd ares/thirdparty/librashader && ./build-librashader.sh)
}
If not, what does it display?
Top
GDH-gentoo
Advocate
Advocate
User avatar
Posts: 2111
Joined: Sat Jul 20, 2019 7:02 pm
Location: South America

  • Quote

Post by GDH-gentoo » Tue May 21, 2024 2:58 pm

The build-librashader.sh script is just a wrapper around a cargo run command. The ebuild could probably skip the check with rustup and the check for MacOS, and just call whatever Gentoo eclasses offer for doing cargo run. Probably without the +nightly option for trying the installed dev-lang/rust.
Ionen wrote:As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though :)
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Tue May 21, 2024 3:30 pm

Hu wrote:Does this not work?

Code: Select all

src_compile() {
    (cd ares/thirdparty/librashader && ./build-librashader.sh)
}
If not, what does it display?
Thanks. It checks if rustup is installed and exit.

Code: Select all

>>> Source configured.
>>> Compiling source in /var/tmp/portage/games-emulation/ares-138/work/ares-57c01b8e17746151a58af822d1db4aa59f21f673 ...
++ uname
+ '[' Linux '!=' Darwin ']'
++ uname
+ '[' Linux '!=' Windows_NT ']'
+ pkg-config --exists librashader
+ command -v rustup
+ echo 'rustup not found. Please install rustup from https://rustup.rs/. If prompted, please install the nightly toolchain.'
rustup not found. Please install rustup from https://rustup.rs/. If prompted, please install the nightly toolchain.
+ exit 1
GDH-gentoo wrote:The build-librashader.sh script is just a wrapper around a cargo run command. The ebuild could probably skip the check with rustup and the check for MacOS, and just call whatever Gentoo eclasses offer for doing cargo run. Probably without the +nightly option for trying the installed dev-lang/rust.
How to skip the check for MacOS, rustup and +nightly ? Do I have to "patch" the buildscript ?

I also tried to add cargo eclass with CRATES variable + ${CARGO_CRATE_URIS} in SRC_URI.
Added in src_compile() just above emake :
cd thirdparty/librashader/librashader-build-script || die
cargo_src_compile

Code: Select all

>>> Unpacking source...
>>> Unpacking ares-138.tar.gz to /var/tmp/portage/games-emulation/ares-138/work
 * Unpacking crates ...
tar -x -C /var/tmp/portage/games-emulation/ares-138/work/cargo_home/gentoo -f ash-0.37.3+1.3.251.crate
tar -x -C /var/tmp/portage/games-emulation/ares-138/work/cargo_home/gentoo -f cbindgen-0.26.0.crate
tar -x -C /var/tmp/portage/games-emulation/ares-138/work/cargo_home/gentoo -f clap-4.1.0.crate
tar -x -C /var/tmp/portage/games-emulation/ares-138/work/cargo_home/gentoo -f halfbrown-0.2.4.crate                            [ ok ]
>>> Source unpacked in /var/tmp/portage/games-emulation/ares-138/work
>>> Preparing source in /var/tmp/portage/games-emulation/ares-138/work/ares-57c01b8e17746151a58af822d1db4aa59f21f673 ...
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/games-emulation/ares-138/work/ares-57c01b8e17746151a58af822d1db4aa59f21f673 ...
>>> Source configured.
>>> Compiling source in /var/tmp/portage/games-emulation/ares-138/work/ares-57c01b8e17746151a58af822d1db4aa59f21f673 ...
 * cargo build --release
error: no matching package found
searched package name: `glob`
perhaps you meant:      clap
location searched: registry `crates-io`
required by package `librashader v0.2.7 (/var/tmp/portage/games-emulation/ares-138/work/ares-57c01b8e17746151a58af822d1db4aa59f21f673/thirdparty/librashader/librashader)`
As a reminder, you're using offline mode (--offline) which can sometimes cause surprising resolution failures, if this error is too confusing you may wish to retry without the offline flag.
Apparently some dependency is missing but I don't know why it is searching for "glob" :roll:
The cargo stuff is confusing and it is the first time I deal with it...
Top
GDH-gentoo
Advocate
Advocate
User avatar
Posts: 2111
Joined: Sat Jul 20, 2019 7:02 pm
Location: South America

  • Quote

Post by GDH-gentoo » Tue May 21, 2024 4:07 pm

sdauth wrote:How to skip the check for MacOS, rustup and +nightly ? Do I have to "patch" the buildscript ?
I'd just ignore the script and call an eclass function in the ebuild. I haven't reviewed the Rust / Cargo-related eclasses yet to be able to make a suggestion at the moment.
sdauth wrote:The cargo stuff is confusing and it is the first time I deal with it...
F@#$&&g Rust and every language that wants to reinvent package managent :P
Ionen wrote:As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though :)
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Tue May 21, 2024 5:55 pm

I created an ebuild for librashader instead.
Compilation failed, it doesn't seem to like stable channel.

Code: Select all

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:49:1
   |
49 | #![feature(impl_trait_in_assoc_type)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:50:1
   |
50 | #![feature(let_chains)]
   | ^^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0554`.
error: could not compile `librashader-reflect` (lib) due to 2 previous errors
This is latest tagged version: 0.2.7

Maybe the stable version (0.2.4) works, I'm going to try that.
EDIT : nope

Code: Select all

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:49:1
   |
49 | #![feature(impl_trait_in_assoc_type)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:50:1
   |
50 | #![feature(let_chains)]
   | ^^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0554`.
error: could not compile `librashader-reflect` (lib) due to 2 previous errors
----
By the way, this is the ebuild for 0.2.7 (insane stuff.. look at the number of crates :lol: maybe some are not needed, the windows stuff etc.. Haven't investigated yet)

Code: Select all

# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# Autogenerated by pycargoebuild 0.13.2

EAPI=8

CRATES="
	ab_glyph@0.2.23
	ab_glyph_rasterizer@0.1.8
	adler@1.0.2
	ahash@0.7.8
	ahash@0.8.10
	aho-corasick@1.1.2
	allocator-api2@0.2.16
	android-activity@0.5.2
	android-properties@0.2.2
	android_system_properties@0.1.5
	array-concat@0.5.2
	array-init@2.1.0
	arrayref@0.3.7
	arrayvec@0.7.4
	as-raw-xcb-connection@1.0.1
	ash-window@0.12.0
	ash@0.37.3+1.3.251
	async-trait@0.1.77
	atomic-waker@1.1.2
	atty@0.2.14
	auto_ops@0.3.0
	autocfg@1.1.0
	base64@0.13.1
	bincode@2.0.0-rc.3
	bincode_derive@2.0.0-rc.3
	bit-set@0.5.3
	bit-vec@0.6.3
	bit_field@0.10.2
	bitflags@1.3.2
	bitflags@2.4.2
	bitvec@1.0.1
	blake3@1.5.0
	block-buffer@0.10.4
	block-sys@0.2.1
	block2@0.3.0
	block2@0.4.0
	block@0.1.6
	build-target@0.4.0
	bumpalo@3.15.3
	bytecount@0.6.7
	bytemuck@1.14.3
	bytemuck_derive@1.5.0
	byteorder@1.5.0
	bytes@1.5.0
	calloop-wayland-source@0.2.0
	calloop@0.12.4
	cbindgen@0.26.0
	cc@1.0.88
	cesu8@1.1.0
	cfg-if@1.0.0
	cfg_aliases@0.1.1
	clap@3.2.25
	clap@4.1.0
	clap_derive@4.1.0
	clap_lex@0.2.4
	clap_lex@0.3.3
	cmake@0.1.50
	cocoa-foundation@0.1.2
	cocoa@0.25.0
	codespan-reporting@0.11.1
	color_quant@1.1.0
	com@0.6.0
	com_macros@0.6.0
	com_macros_support@0.6.0
	combine@4.6.6
	concurrent-queue@2.4.0
	config@0.13.4
	constant_time_eq@0.3.0
	core-foundation-sys@0.8.6
	core-foundation@0.9.4
	core-graphics-types@0.1.3
	core-graphics@0.23.1
	cpufeatures@0.2.12
	crc-catalog@2.4.0
	crc32fast@1.4.0
	crc@3.0.1
	crossbeam-deque@0.8.5
	crossbeam-epoch@0.9.18
	crossbeam-utils@0.8.19
	crunchy@0.2.2
	crypto-common@0.1.6
	cty@0.2.2
	cursor-icon@1.1.0
	d3d12@0.19.0
	data-encoding@2.5.0
	digest@0.10.7
	dirs-next@1.0.2
	dirs-sys-next@0.1.2
	dispatch@0.2.0
	dlib@0.5.2
	dlv-list@0.3.0
	document-features@0.2.8
	downcast-rs@1.2.0
	either@1.10.0
	encoding_rs@0.8.33
	env_logger@0.10.2
	equivalent@1.0.1
	errno@0.3.8
	exr@1.72.0
	fastrand@2.0.1
	fdeflate@0.3.4
	fixedbitset@0.4.2
	flate2@1.0.28
	flume@0.11.0
	foreign-types-macros@0.2.3
	foreign-types-shared@0.3.1
	foreign-types@0.5.0
	fs2@0.4.3
	funty@2.0.0
	generic-array@0.14.7
	gethostname@0.4.3
	getrandom@0.2.12
	gfx-maths@0.2.9
	gif@0.13.1
	gl@0.14.0
	gl_generator@0.14.0
	glfw-sys@4.0.0+3.3.5
	glfw@0.47.0
	glfw@0.49.1
	glob@0.3.1
	glow@0.13.1
	glslang-sys@0.3.2
	glslang@0.3.2
	glutin_wgl_sys@0.5.0
	gpu-alloc-types@0.3.0
	gpu-alloc@0.6.0
	gpu-allocator@0.25.0
	gpu-descriptor-types@0.1.2
	gpu-descriptor@0.2.4
	half@2.4.0
	halfbrown@0.2.4
	hashbrown@0.12.3
	hashbrown@0.13.2
	hashbrown@0.14.3
	hassle-rs@0.11.0
	heck@0.4.1
	hermit-abi@0.1.19
	hermit-abi@0.3.9
	hexf-parse@0.2.1
	humantime@2.1.0
	icrate@0.0.4
	icrate@0.1.0
	image@0.24.9
	indexmap@1.9.3
	indexmap@2.2.3
	is-terminal@0.4.12
	itoa@1.0.10
	jni-sys@0.3.0
	jni@0.21.1
	jpeg-decoder@0.3.1
	js-sys@0.3.68
	json5@0.4.1
	khronos-egl@6.0.0
	khronos_api@3.1.0
	lazy_static@1.4.0
	lebe@0.5.2
	libc@0.2.153
	libloading@0.7.4
	libloading@0.8.1
	librashader-spirv-cross@0.25.1
	libredox@0.0.1
	libredox@0.0.2
	linked-hash-map@0.5.6
	linux-raw-sys@0.4.13
	litrs@0.4.1
	lock_api@0.4.11
	log@0.4.21
	mach-siegbert-vogt-dxcsa@0.1.3
	malloc_buf@0.0.6
	matches@0.1.10
	memchr@2.7.1
	memmap2@0.9.4
	metal@0.27.0
	minimal-lexical@0.2.1
	miniz_oxide@0.7.2
	naga@0.19.0
	ndk-context@0.1.1
	ndk-sys@0.5.0+25.2.9519653
	ndk@0.8.0
	nom@7.1.3
	nom_locate@4.2.0
	num-bigint@0.4.4
	num-complex@0.4.5
	num-integer@0.1.46
	num-iter@0.1.44
	num-rational@0.4.1
	num-traits@0.2.18
	num@0.4.1
	num_enum@0.7.2
	num_enum_derive@0.7.2
	objc_exception@0.1.2
	objc-sys@0.3.2
	objc2-encode@3.0.0
	objc2-encode@4.0.0
	objc2@0.4.1
	objc2@0.5.0
	objc@0.2.7
	once_cell@1.19.0
	orbclient@0.3.47
	ordered-multimap@0.4.3
	os_str_bytes@6.6.1
	owned_ttf_parser@0.20.0
	parking_lot@0.12.1
	parking_lot_core@0.9.9
	paste@1.0.14
	pathdiff@0.2.1
	percent-encoding@2.3.1
	persy@1.4.7
	pest@2.7.7
	pest_derive@2.7.7
	pest_generator@2.7.7
	pest_meta@2.7.7
	petgraph@0.6.4
	pin-project-lite@0.2.13
	pkg-config@0.3.30
	platform-dirs@0.3.0
	png@0.17.13
	polling@3.5.0
	pollster@0.3.0
	ppv-lite86@0.2.17
	presser@0.3.1
	proc-macro-crate@3.1.0
	proc-macro-error-attr@1.0.4
	proc-macro-error@1.0.4
	proc-macro2@1.0.78
	profiling@1.0.15
	qoi@0.4.1
	quick-xml@0.31.0
	quote@1.0.35
	radium@0.7.0
	rand@0.8.5
	rand_chacha@0.3.1
	rand_core@0.6.4
	range-alloc@0.1.3
	raw-window-handle@0.4.3
	raw-window-handle@0.5.2
	raw-window-handle@0.6.0
	raw-window-metal@0.3.2
	rayon-core@1.12.1
	rayon@1.9.0
	redox_syscall@0.3.5
	redox_syscall@0.4.1
	redox_users@0.4.4
	regex-automata@0.4.5
	regex-syntax@0.8.2
	regex@1.10.3
	renderdoc-sys@1.0.0
	ron@0.7.1
	rspirv@0.12.0+sdk-1.3.268.0
	rust-ini@0.18.0
	rustc-hash@1.1.0
	rustix@0.38.31
	rustversion@1.0.14
	ryu@1.0.17
	same-file@1.0.6
	scoped-tls@1.0.1
	scopeguard@1.2.0
	sctk-adwaita@0.8.1
	serde@1.0.197
	serde_derive@1.0.197
	serde_json@1.0.114
	sha2@0.10.8
	simd-adler32@0.3.7
	slab@0.4.9
	slotmap@1.0.7
	smallvec@1.13.1
	smithay-client-toolkit@0.18.1
	smol_str@0.2.1
	spin@0.9.8
	spirv-to-dxil-sys@0.4.7
	spirv-to-dxil@0.4.7
	spirv@0.3.0+sdk-1.3.268.0
	sptr@0.3.2
	static_assertions@1.1.0
	strict-num@0.1.1
	strsim@0.10.0
	syn@1.0.109
	syn@2.0.52
	tap@1.0.1
	tempfile@3.10.1
	termcolor@1.4.1
	textwrap@0.16.1
	thiserror-impl@1.0.57
	thiserror@1.0.57
	tiff@0.9.1
	tiny-skia-path@0.11.4
	tiny-skia@0.11.4
	tinymap@0.4.0
	tinyvec@1.6.0
	toml@0.5.11
	toml_datetime@0.6.5
	toml_edit@0.21.1
	tracing-core@0.1.32
	tracing@0.1.40
	ttf-parser@0.20.0
	typenum@1.17.0
	ucd-trie@0.1.6
	unicode-ident@1.0.12
	unicode-segmentation@1.11.0
	unicode-width@0.1.11
	unicode-xid@0.2.4
	unsigned-varint@0.7.2
	version_check@0.9.4
	virtue@0.0.13
	walkdir@2.4.0
	wasi@0.11.0+wasi-snapshot-preview1
	wasm-bindgen-backend@0.2.91
	wasm-bindgen-futures@0.4.41
	wasm-bindgen-macro-support@0.2.91
	wasm-bindgen-macro@0.2.91
	wasm-bindgen-shared@0.2.91
	wasm-bindgen@0.2.91
	wayland-backend@0.3.3
	wayland-client@0.31.2
	wayland-csd-frame@0.3.0
	wayland-cursor@0.31.1
	wayland-protocols-plasma@0.2.0
	wayland-protocols-wlr@0.2.0
	wayland-protocols@0.31.2
	wayland-scanner@0.31.1
	wayland-sys@0.31.1
	web-sys@0.3.68
	web-time@0.2.4
	weezl@0.1.8
	wgpu-core@0.19.0
	wgpu-hal@0.19.1
	wgpu-types@0.19.2
	wgpu@0.19.3
	widestring@1.0.2
	winapi-i686-pc-windows-gnu@0.4.0
	winapi-util@0.1.6
	winapi-x86_64-pc-windows-gnu@0.4.0
	winapi@0.3.9
	windows-core@0.52.0
	windows-sys@0.45.0
	windows-sys@0.48.0
	windows-sys@0.52.0
	windows-targets@0.42.2
	windows-targets@0.48.5
	windows-targets@0.52.4
	windows@0.52.0
	windows_aarch64_gnullvm@0.42.2
	windows_aarch64_gnullvm@0.48.5
	windows_aarch64_gnullvm@0.52.4
	windows_aarch64_msvc@0.42.2
	windows_aarch64_msvc@0.48.5
	windows_aarch64_msvc@0.52.4
	windows_i686_gnu@0.42.2
	windows_i686_gnu@0.48.5
	windows_i686_gnu@0.52.4
	windows_i686_msvc@0.42.2
	windows_i686_msvc@0.48.5
	windows_i686_msvc@0.52.4
	windows_x86_64_gnu@0.42.2
	windows_x86_64_gnu@0.48.5
	windows_x86_64_gnu@0.52.4
	windows_x86_64_gnullvm@0.42.2
	windows_x86_64_gnullvm@0.48.5
	windows_x86_64_gnullvm@0.52.4
	windows_x86_64_msvc@0.42.2
	windows_x86_64_msvc@0.48.5
	windows_x86_64_msvc@0.52.4
	winit@0.29.11
	winnow@0.5.40
	wyz@0.5.1
	x11-dl@2.21.0
	x11rb-protocol@0.13.0
	x11rb@0.13.0
	xcursor@0.3.5
	xkbcommon-dl@0.4.2
	xkeysym@0.2.0
	xml-rs@0.8.19
	yaml-rust@0.4.5
	zerocopy-derive@0.7.32
	zerocopy@0.7.32
	zigzag@0.1.0
	zune-inflate@0.2.54
"

inherit cargo

DESCRIPTION="RetroArch shaders for all."
HOMEPAGE="https://github.com/SnowflakePowered/librashader"
SRC_URI="
	${CARGO_CRATE_URIS}
  https://github.com/SnowflakePowered/librashader/archive/librashader-v${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/${PN}-${PN}-v${PV}"

LICENSE="|| ( GPL-3 MPL-2.0 )"
# Dependent crate licenses
LICENSE+="
	Apache-2.0 BSD-2 BSD CC0-1.0 ISC MIT MPL-2.0 Unicode-DFS-2016 ZLIB
"
SLOT="0"
KEYWORDS="~amd64"
Top
GDH-gentoo
Advocate
Advocate
User avatar
Posts: 2111
Joined: Sat Jul 20, 2019 7:02 pm
Location: South America

  • Quote

Post by GDH-gentoo » Tue May 21, 2024 8:22 pm

sdauth wrote:

Code: Select all

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:49:1
   |
49 | #![feature(impl_trait_in_assoc_type)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> librashader-reflect/src/lib.rs:50:1
   |
50 | #![feature(let_chains)]
   | ^^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0554`.
error: could not compile `librashader-reflect` (lib) due to 2 previous errors
Looks like this project really wants nightly... Try again after (re)installing dev-lang/rust with the nightly USE flag set. No available dev-lang/rust-bin alternative for this unfortunately.
sdauth wrote:(insane stuff.. look at the number of crates :lol: [...])
Typical of packages written in Rust...
Ionen wrote:As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though :)
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Wed May 22, 2024 3:14 am

So I've rebuilt rust with nightly USE and this time, librashader compiled without issue.
Except a QA warning during installation about missing SONAME :

Code: Select all

* QA Notice: The following shared libraries lack a SONAME
 * /usr/lib64/librashader.so.1
Also, the prefix is wrong here :
/usr/lib64/pkgconfig/librashader.pc

Code: Select all

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${exec_prefix}/include
 
Name: librashader
Description: RetroArch shaders for all
Version: 0.2.0
Libs: -L${libdir} -lrashader
Cflags: -I${includedir}
For some reason, cargo_src_compile worked but produced a "release" build instead of "optimized" and "librashader.so" was missing in the target dir (there was only "librashader_capi.so")
So I ran the cargo run command instead. This is probably not the right way to do it but at least there is some progress...
When running ares from terminal, it doesn't complain anymore about missing librashader libs.

Here is what I modified :

Code: Select all

src_compile() {
#cargo_src_compile
PREFIX="${EPREFIX}/usr" LIBDIR="${PREFIX}"/$(get_libdir) cargo run -p librashader-build-script -- --profile optimized
}

src_install() {
  newlib.so target/optimized/librashader.so librashader.so.1
  dosym librashader.so.1 /usr/$(get_libdir)/librashader.so

  insinto /usr/$(get_libdir)/pkgconfig
  doins pkg/librashader.pc
}
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Thu May 23, 2024 2:35 am

I found an other issue, when I compile ares in my gentoo chroot (for core2duo laptop) on my main machine
and install the binpkg then ares crashes with "Illegal instruction" (traps: ares[16230] trap invalid opcode)
By default, the package is built with clang but the same issue happens when I use gcc instead.

Looking at the GNUmakefile :

Code: Select all

ifneq ($(filter $(arch),x86 amd64),)
  ifeq ($(filter cl,$(compiler)),)
    ifeq ($(local),true)
      flags += -march=native
    else
      # For official builds, default to x86-64-v2 (Intel Nehalem, AMD Bulldozer) which supports up to SSE 4.2.
      flags += -march=x86-64-v2
    endif
  endif
endif
In the ebuild I have :

Code: Select all

  if use clang ; then
    compiler="clang++"
  else
    compiler="$(tc-getCXX)"
  fi
and local is set to true by default so -march=native is used but it seems that when ares is compiled in the gentoo chroot with the following make.conf :

Code: Select all

COMMON_FLAGS="-march=core2 -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 sse4_1 ssse3"
it somehow includes instructions not available on my laptop... How to make it respect CFLAGS & CPU_FLAGS_X86 so it uses -march=core2 ?
On the other hand, If I compile ares directly on my core2duo laptop then -march=native works as expected and ares runs fine.
Also, I can't set local=false to use march=x86-64-v2 because it enables sse4_2 (not available on core2duo)

Is it something I can fix in the ebuild ?

EDIT :

Solved with :

Code: Select all

src_prepare() {
  default
  myarch=$(get-flag march)
  sed -i "s|-march=native|-march=$myarch|g" desktop-ui/GNUmakefile || die
}
Top
Hu
Administrator
Administrator
Posts: 24385
Joined: Tue Mar 06, 2007 5:38 am

  • Quote

Post by Hu » Thu May 23, 2024 11:58 am

That solution looks plausible, but I wonder if you could instead just replace upstream's -march=native with an empty string, and allow the user's CFLAGS to provide the required -march, without the need for your ebuild to extract it from CFLAGS.
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Thu May 23, 2024 12:11 pm

@Hu:
In fact, I tried it just before the simple sed edit.

I added CFLAGS variable in makeopts and set local=false (in GNUmakefile) so it doesn't use -march=native.

Code: Select all

  local makeopts=(
    verbose
    local=false
    compiler="${compiler}"
    CFLAGS="${CFLAGS} ${LDFLAGS}"
    platform=linux
    hiro=$(usex gtk gtk3 qt5)
    librashader="${librashader}
    vulkan=false
  )
Then used sed to remove reference to "-march=x86-64-v2" and let it empty :

Code: Select all

src_prepare() {
  default

  sed -i 's:-march=x86-64-v2::' desktop-ui/GNUmakefile || die
}
The compilation command was (in the ares log)

Code: Select all

make -j5 compiler=clang++ 'CFLAGS=-march=core2 -O2 -pipe -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs' verbose local=false platform=linux hiro=gtk3 librashader=false vulkan=false 'cores=a26 fc sfc n64 sg ms md ps1 pce ng msx cv myvision gb gba ws ngp spec' 'ruby=video.xshm input.xlib audio.alsa video.glx video.glx2 input.sdl input.udev video.xvideo' -C desktop-ui
looked good, compiled just fine but for some reason, I was still receiving an "illegal instruction" when executing it on the core2 laptop :?
Anyway, all of that was for nothing because I found out ares requires opengl 3.x as a minimum, even without the shader thing. (the gui starts fine but when launching a game, it complains about old opengl) And this old laptop is stuck on opengl 2.x so... I'll keep using mednafen or retroarch on that.. :lol:

----
EDIT :

Working ebuild for ares & librashader (requires rust with nightly USE set for now, see: https://github.com/SnowflakePowered/lib ... /issues/55)
Not perfect so if someone wants to improve them...
A nice thing would be to improve librashader ebuild and add some USE flags to be able to enable/disable d3d11, metal, vulkan etc.. so it can be compiled a little bit faster.
I'm a noob with cargo eclass and haven't looked on how to do that.

ares-138.ebuild
librashader-0.2.7
Top
Amon2501
Tux's lil' helper
Tux's lil' helper
Posts: 142
Joined: Wed Dec 12, 2018 1:38 pm

  • Quote

Post by Amon2501 » Sat Nov 23, 2024 8:40 pm

Sorry for necrobump but im using that emulator too. Found a solution to make librashader work.

Code: Select all

cargo run -p librashader-build-script -- --profile optimized --stable
Did the trick and it builds using the stable rust without errors. Then just copy librashader.so to /usr/local/lib(64)

That should be re-done after any upgrade of the rust itself.
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Mon Nov 25, 2024 5:07 pm

Amon2501 wrote:and it builds using the stable rust without errors.
Thanks for the update Amon2501! Good news as it was rather painful to build nightly rust for librashader only!
Maybe ares could replace games-emulation/higan at some point.
Top
NathanZachary
Moderator
Moderator
User avatar
Posts: 2627
Joined: Tue Jan 30, 2007 1:50 am

  • Quote

Post by NathanZachary » Wed Jan 01, 2025 2:47 am

It would be good to get games-emulation/ares into the tree, possibly with librashader as optional (since there's no direct dependency on it). Have you filed a bug with your working ebuild? I did a quick search but didn't see one. I'd be happy to test it out as well.

Cheers,
Nathan Zachary
“Truth, like infinity, is to be forever approached but never reached.” --Jean Ayres (1972)
---avatar cropped from =AimanStudio---
Top
NathanZachary
Moderator
Moderator
User avatar
Posts: 2627
Joined: Tue Jan 30, 2007 1:50 am

  • Quote

Post by NathanZachary » Thu Aug 21, 2025 10:28 pm

I have created a new ebuild based on the current version of Ares (145) and using their new CMake build system.
The following bug has been filed for adding it to the tree:
https://bugs.gentoo.org/961870
“Truth, like infinity, is to be forever approached but never reached.” --Jean Ayres (1972)
---avatar cropped from =AimanStudio---
Top
sdauth
l33t
l33t
User avatar
Posts: 770
Joined: Wed Sep 19, 2018 2:48 am
Location: Ásgarðr

  • Quote

Post by sdauth » Sun Aug 24, 2025 7:38 pm

Thanks NathanZachary! I just read your post. It is much better with cmake.
I was going to mention that saturn core was missing then I read your post here : https://github.com/ares-emulator/ares/i ... 3085075013 :o
Time to try some games 8)
Top
Post Reply

18 posts • Page 1 of 1

Return to “Unsupported Software”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic