View previous topic :: View next topic |
Author |
Message |
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Tue May 21, 2024 1:19 am Post subject: [SOLVED] games-emulation/ares ebuild need help |
|
|
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 :
Quote: | 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: | # 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 |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22648
|
Posted: Tue May 21, 2024 2:06 am Post subject: |
|
|
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? |
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Tue May 21, 2024 5:09 am Post subject: |
|
|
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: | [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.. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22648
|
Posted: Tue May 21, 2024 2:20 pm Post subject: |
|
|
Does this not work? Code: | src_compile() {
(cd ares/thirdparty/librashader && ./build-librashader.sh)
} | If not, what does it display? |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1699 Location: South America
|
Posted: Tue May 21, 2024 2:58 pm Post subject: |
|
|
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. _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Tue May 21, 2024 3:30 pm Post subject: |
|
|
Hu wrote: | Does this not work? Code: | 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: | >>> 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: | >>> 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"
The cargo stuff is confusing and it is the first time I deal with it... |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1699 Location: South America
|
Posted: Tue May 21, 2024 4:07 pm Post subject: |
|
|
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 _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Tue May 21, 2024 5:55 pm Post subject: |
|
|
I created an ebuild for librashader instead.
Compilation failed, it doesn't seem to like stable channel.
Code: | 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: | 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 maybe some are not needed, the windows stuff etc.. Haven't investigated yet)
Code: | # 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" |
|
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1699 Location: South America
|
Posted: Tue May 21, 2024 8:22 pm Post subject: |
|
|
sdauth wrote: | Code: | 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 [...]) |
Typical of packages written in Rust... _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Wed May 22, 2024 3:14 am Post subject: |
|
|
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: | * 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: | 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: | 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
} |
|
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Thu May 23, 2024 2:35 am Post subject: |
|
|
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: | 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: | 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: | 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: | src_prepare() {
default
myarch=$(get-flag march)
sed -i "s|-march=native|-march=$myarch|g" desktop-ui/GNUmakefile || die
} |
|
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22648
|
Posted: Thu May 23, 2024 11:58 am Post subject: |
|
|
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. |
|
Back to top |
|
|
sdauth l33t
Joined: 19 Sep 2018 Posts: 650 Location: Ásgarðr
|
Posted: Thu May 23, 2024 12:11 pm Post subject: |
|
|
@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: | 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: | src_prepare() {
default
sed -i 's:-march=x86-64-v2::' desktop-ui/GNUmakefile || die
} |
The compilation command was (in the ares log)
Code: | 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..
----
EDIT :
Working ebuild for ares & librashader (requires rust with nightly USE set for now, see: https://github.com/SnowflakePowered/librashader/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 |
|
Back to top |
|
|
|