mirror of
https://gitlab.freedesktop.org/pipewire/helvum.git
synced 2025-12-20 04:10:02 +01:00
buildsystem: Move to meson for building the project
Meson will allow us to: - Verify the used rust compiler is recent enough - Install ressources such as a .desktop files, icons, etc.
This commit is contained in:
parent
7ef8677c4c
commit
a8bfd8383e
6 changed files with 115 additions and 16 deletions
17
README.md
17
README.md
|
|
@ -24,28 +24,33 @@ $ flatpak install org.gnome.{Platform,Sdk}//40 org.freedesktop.Sdk.Extension.rus
|
||||||
|
|
||||||
To compile and install as a flatpak, run
|
To compile and install as a flatpak, run
|
||||||
```shell
|
```shell
|
||||||
$ flatpak-builder --install flatpak-build/ org.freedesktop.ryuukyu.Helvum.json
|
$ flatpak-builder --install flatpak-build/ build-aux/org.freedesktop.ryuukyu.Helvum.json
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then run the app via
|
You can then run the app via
|
||||||
```shell
|
```shell
|
||||||
flatpak run org.freedesktop.ryuukyu.Helvum
|
$ flatpak run org.freedesktop.ryuukyu.Helvum
|
||||||
```
|
```
|
||||||
|
|
||||||
## Manually
|
## Manually
|
||||||
For compilation, you will need:
|
For compilation, you will need:
|
||||||
|
|
||||||
|
- Meson
|
||||||
- An up-to-date rust toolchain
|
- An up-to-date rust toolchain
|
||||||
- `libclang-3.7` or higher
|
- `libclang-3.7` or higher
|
||||||
- `gtk-4.0` and `pipewire-0.3` development headers
|
- `gtk-4.0` and `pipewire-0.3` development headers
|
||||||
|
|
||||||
To compile, run
|
To compile and install, run
|
||||||
|
|
||||||
$ cargo build --release
|
```shell
|
||||||
|
$ meson setup build && cd build
|
||||||
|
$ meson compile
|
||||||
|
$ meson install
|
||||||
|
```
|
||||||
|
|
||||||
in the repository root.
|
in the repository root.
|
||||||
The resulting binary will be at `target/release/helvum`.
|
This will install the compiled project files into `/usr/local`.
|
||||||
|
|
||||||
# License
|
# License
|
||||||
Helvum is distributed under the terms of the GPL3 license.
|
Helvum is distributed under the terms of the GPL3 license.
|
||||||
See LICENSE for more information.
|
See LICENSE for more information.
|
||||||
|
|
|
||||||
20
build-aux/cargo.sh
Normal file
20
build-aux/cargo.sh
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
export MESON_BUILD_ROOT="$1"
|
||||||
|
export MESON_SOURCE_ROOT="$2"
|
||||||
|
export CARGO_TARGET_DIR="$MESON_BUILD_ROOT"/target
|
||||||
|
export CARGO_HOME="$MESON_BUILD_ROOT"/cargo-home
|
||||||
|
|
||||||
|
if [[ $4 = "development" ]]
|
||||||
|
then
|
||||||
|
echo "DEBUG MODE"
|
||||||
|
cargo build --manifest-path \
|
||||||
|
"$MESON_SOURCE_ROOT"/Cargo.toml && \
|
||||||
|
cp "$CARGO_TARGET_DIR"/debug/$5 $3
|
||||||
|
else
|
||||||
|
echo "RELEASE MODE"
|
||||||
|
cargo build --manifest-path \
|
||||||
|
"$MESON_SOURCE_ROOT"/Cargo.toml --release && \
|
||||||
|
cp "$CARGO_TARGET_DIR"/release/$5 $3
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
@ -3,33 +3,35 @@
|
||||||
"runtime": "org.gnome.Platform",
|
"runtime": "org.gnome.Platform",
|
||||||
"runtime-version": "40",
|
"runtime-version": "40",
|
||||||
"sdk": "org.gnome.Sdk",
|
"sdk": "org.gnome.Sdk",
|
||||||
"sdk-extensions": ["org.freedesktop.Sdk.Extension.rust-stable"],
|
"sdk-extensions": [
|
||||||
|
"org.freedesktop.Sdk.Extension.rust-stable"
|
||||||
|
],
|
||||||
"command": "helvum",
|
"command": "helvum",
|
||||||
"finish-args" : [
|
"finish-args": [
|
||||||
"--socket=fallback-x11",
|
"--socket=fallback-x11",
|
||||||
"--socket=wayland",
|
"--socket=wayland",
|
||||||
"--device=dri",
|
"--device=dri",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--filesystem=xdg-run/pipewire-0"
|
"--filesystem=xdg-run/pipewire-0"
|
||||||
],
|
],
|
||||||
"build-options" : {
|
"build-options": {
|
||||||
"append-path" : "/usr/lib/sdk/rust-stable/bin",
|
"append-path": "/usr/lib/sdk/rust-stable/bin",
|
||||||
"build-args" : [
|
"build-args": [
|
||||||
"--share=network"
|
"--share=network"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"modules": [
|
"modules": [
|
||||||
{
|
{
|
||||||
"name": "Helvum",
|
"name": "Helvum",
|
||||||
"buildsystem": "simple",
|
"buildsystem": "meson",
|
||||||
"build-commands": [
|
|
||||||
"cargo install --path . --root /app --no-track"
|
|
||||||
],
|
|
||||||
"sources": [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type": "dir",
|
"type": "dir",
|
||||||
"path": "./"
|
"path": "../"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"config-opts": [
|
||||||
|
"-Dprofile=development"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
30
meson.build
Normal file
30
meson.build
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
project(
|
||||||
|
'helvum',
|
||||||
|
'rust',
|
||||||
|
version: '0.3.0',
|
||||||
|
license: 'GPL-3.0',
|
||||||
|
meson_version: '>=0.50.0'
|
||||||
|
)
|
||||||
|
|
||||||
|
dependency('glib-2.0', version: '>= 2.48')
|
||||||
|
dependency('gtk4', version: '>= 4.0.0')
|
||||||
|
dependency('libpipewire-0.3')
|
||||||
|
|
||||||
|
rust_version = meson.get_compiler('rust').version()
|
||||||
|
min_rust_version = '1.54.0'
|
||||||
|
if rust_version < min_rust_version
|
||||||
|
error('Rust version too old: Required version is ' + min_rust_version + ' but actual version is ' + rust_version)
|
||||||
|
endif
|
||||||
|
|
||||||
|
cargo = find_program('cargo', required: true)
|
||||||
|
cargo_script = find_program('build-aux/cargo.sh')
|
||||||
|
|
||||||
|
prefix = get_option('prefix')
|
||||||
|
bindir = prefix / get_option('bindir')
|
||||||
|
|
||||||
|
cargo_sources = files(
|
||||||
|
'Cargo.toml',
|
||||||
|
'Cargo.lock',
|
||||||
|
)
|
||||||
|
|
||||||
|
subdir('src')
|
||||||
11
meson_options.txt
Normal file
11
meson_options.txt
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
option(
|
||||||
|
'profile',
|
||||||
|
type: 'combo',
|
||||||
|
choices: [
|
||||||
|
'default',
|
||||||
|
'development'
|
||||||
|
],
|
||||||
|
value: 'default',
|
||||||
|
description: 'The build profile for Helvum. One of "default" or "development".'
|
||||||
|
)
|
||||||
|
|
||||||
31
src/meson.build
Normal file
31
src/meson.build
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
rust_sources = files(
|
||||||
|
'application.rs',
|
||||||
|
'main.rs',
|
||||||
|
'pipewire_connection.rs',
|
||||||
|
'pipewire_connection/state.rs',
|
||||||
|
'view/graph_view.rs',
|
||||||
|
'view/mod.rs',
|
||||||
|
'view/node.rs',
|
||||||
|
'view/port.rs',
|
||||||
|
)
|
||||||
|
|
||||||
|
custom_target(
|
||||||
|
'cargo-build',
|
||||||
|
build_by_default: true,
|
||||||
|
input: [
|
||||||
|
cargo_sources,
|
||||||
|
rust_sources
|
||||||
|
],
|
||||||
|
output: meson.project_name(),
|
||||||
|
console: true,
|
||||||
|
install: true,
|
||||||
|
install_dir: bindir,
|
||||||
|
command: [
|
||||||
|
cargo_script,
|
||||||
|
meson.build_root(),
|
||||||
|
meson.source_root(),
|
||||||
|
'@OUTPUT@',
|
||||||
|
get_option('profile'),
|
||||||
|
meson.project_name(),
|
||||||
|
],
|
||||||
|
)
|
||||||
Loading…
Add table
Reference in a new issue