diff --git a/README.md b/README.md index 4fbc78c..ba3f583 100644 --- a/README.md +++ b/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 ```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 ```shell -flatpak run org.freedesktop.ryuukyu.Helvum +$ flatpak run org.freedesktop.ryuukyu.Helvum ``` ## Manually For compilation, you will need: +- Meson - An up-to-date rust toolchain - `libclang-3.7` or higher - `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. -The resulting binary will be at `target/release/helvum`. +This will install the compiled project files into `/usr/local`. # License Helvum is distributed under the terms of the GPL3 license. -See LICENSE for more information. \ No newline at end of file +See LICENSE for more information. diff --git a/build-aux/cargo.sh b/build-aux/cargo.sh new file mode 100644 index 0000000..57662ae --- /dev/null +++ b/build-aux/cargo.sh @@ -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 + diff --git a/org.freedesktop.ryuukyu.Helvum.json b/build-aux/org.freedesktop.ryuukyu.Helvum.json similarity index 61% rename from org.freedesktop.ryuukyu.Helvum.json rename to build-aux/org.freedesktop.ryuukyu.Helvum.json index d24a9d5..17f8082 100644 --- a/org.freedesktop.ryuukyu.Helvum.json +++ b/build-aux/org.freedesktop.ryuukyu.Helvum.json @@ -3,33 +3,35 @@ "runtime": "org.gnome.Platform", "runtime-version": "40", "sdk": "org.gnome.Sdk", - "sdk-extensions": ["org.freedesktop.Sdk.Extension.rust-stable"], + "sdk-extensions": [ + "org.freedesktop.Sdk.Extension.rust-stable" + ], "command": "helvum", - "finish-args" : [ + "finish-args": [ "--socket=fallback-x11", "--socket=wayland", "--device=dri", "--share=ipc", "--filesystem=xdg-run/pipewire-0" ], - "build-options" : { - "append-path" : "/usr/lib/sdk/rust-stable/bin", - "build-args" : [ + "build-options": { + "append-path": "/usr/lib/sdk/rust-stable/bin", + "build-args": [ "--share=network" ] }, "modules": [ { "name": "Helvum", - "buildsystem": "simple", - "build-commands": [ - "cargo install --path . --root /app --no-track" - ], + "buildsystem": "meson", "sources": [ { "type": "dir", - "path": "./" + "path": "../" } + ], + "config-opts": [ + "-Dprofile=development" ] } ] diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..b6419ba --- /dev/null +++ b/meson.build @@ -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') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..7b8c860 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,11 @@ +option( + 'profile', + type: 'combo', + choices: [ + 'default', + 'development' + ], + value: 'default', + description: 'The build profile for Helvum. One of "default" or "development".' +) + diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..f89cfb6 --- /dev/null +++ b/src/meson.build @@ -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(), + ], +)