-
-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
19 changed files
with
1,809 additions
and
263 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
# cargo-tauri.hook {#tauri-hook} | ||
|
||
[Tauri](https://tauri.app/) is a framework for building smaller, faster, and | ||
more secure desktop applications with a web frontend. | ||
|
||
In Nixpkgs, `cargo-tauri.hook` overrides the default build and install phases. | ||
|
||
## Example code snippet {#tauri-hook-example-code-snippet} | ||
|
||
```nix | ||
{ | ||
lib, | ||
stdenv, | ||
rustPlatform, | ||
fetchNpmDeps, | ||
cargo-tauri, | ||
darwin, | ||
glib-networking, | ||
libsoup, | ||
nodejs, | ||
npmHooks, | ||
openssl, | ||
pkg-config, | ||
webkitgtk, | ||
wrapGAppsHook3, | ||
}: | ||
rustPlatform.buildRustPackage rec { | ||
# . . . | ||
cargoHash = "..."; | ||
# Assuming our app's frontend uses `npm` as a package manager | ||
npmDeps = fetchNpmDeps { | ||
name = "${pname}-npm-deps-${version}"; | ||
inherit src; | ||
hash = "..."; | ||
}; | ||
nativeBuildInputs = [ | ||
# Pull in our main hook | ||
cargo-tauri.hook | ||
# Setup npm | ||
nodejs | ||
npmHooks.npmConfigHook | ||
# Make sure we can find our libraries | ||
pkg-config | ||
wrapGAppsHook3 | ||
]; | ||
buildInputs = | ||
[ openssl ] | ||
++ lib.optionals stdenv.isLinux [ | ||
glib-networking # Most Tauri apps need networking | ||
libsoup | ||
webkitgtk | ||
] | ||
++ lib.optionals stdenv.isDarwin ( | ||
with darwin.apple_sdk.frameworks; | ||
[ | ||
AppKit | ||
CoreServices | ||
Security | ||
WebKit | ||
] | ||
); | ||
# Set our Tauri source directory | ||
cargoRoot = "src-tauri"; | ||
# And make sure we build there too | ||
buildAndTestSubdir = cargoRoot; | ||
# . . . | ||
} | ||
``` | ||
|
||
## Variables controlling cargo-tauri {#tauri-hook-variables-controlling} | ||
|
||
### Tauri Exclusive Variables {#tauri-hook-exclusive-variables} | ||
|
||
#### `tauriBuildFlags` {#tauri-build-flags} | ||
|
||
Controls the flags passed to `cargo tauri build`. | ||
|
||
#### `tauriBundleType` {#tauri-bundle-type} | ||
|
||
The [bundle type](https://tauri.app/v1/guides/building/) to build. | ||
|
||
#### `dontTauriBuild` {#dont-tauri-build} | ||
|
||
Disables using `tauriBuildHook`. | ||
|
||
#### `dontTauriInstall` {#dont-tauri-install} | ||
|
||
Disables using `tauriInstallPostBuildHook` and `tauriInstallHook`. | ||
|
||
### Honored Variables {#tauri-hook-honored-variables} | ||
|
||
Along with those found in [](#compiling-rust-applications-with-cargo), the | ||
following variables used by `cargoBuildHook` and `cargoInstallHook` are honored | ||
by the cargo-tauri setup hook. | ||
|
||
- `buildAndTestSubdir` | ||
- `cargoBuildType` | ||
- `cargoBuildNoDefaultFeatures` | ||
- `cargoBuildFeatures` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
{ | ||
lib, | ||
stdenv, | ||
makeSetupHook, | ||
cargo, | ||
cargo-tauri, | ||
rust, | ||
# The subdirectory of `target/` from which to copy the build artifacts | ||
targetSubdirectory ? stdenv.hostPlatform.rust.cargoShortTarget, | ||
}: | ||
|
||
let | ||
kernelName = stdenv.hostPlatform.parsed.kernel.name; | ||
in | ||
makeSetupHook { | ||
name = "tauri-hook"; | ||
|
||
propagatedBuildInputs = [ | ||
cargo | ||
cargo-tauri | ||
]; | ||
|
||
substitutions = { | ||
inherit targetSubdirectory; | ||
inherit (rust.envVars) rustHostPlatformSpec setEnv; | ||
|
||
# A map of the bundles used for Tauri's different supported platforms | ||
# https://github.com/tauri-apps/tauri/blob/23a912bb84d7c6088301e1ffc59adfa8a799beab/README.md#platforms | ||
defaultTauriBundleType = | ||
{ | ||
darwin = "app"; | ||
linux = "deb"; | ||
} | ||
.${kernelName} or (throw "${kernelName} is not supported by cargo-tauri.hook"); | ||
|
||
# $targetDir is the path to the build artifacts (i.e., `./target/release`) | ||
installScript = | ||
{ | ||
darwin = '' | ||
mkdir $out | ||
mv "$targetDir"/bundle/macos $out/Applications | ||
''; | ||
|
||
linux = '' | ||
mv "$targetDir"/bundle/deb/*/data/usr $out | ||
''; | ||
} | ||
.${kernelName} or (throw "${kernelName} is not supported by cargo-tauri.hook"); | ||
}; | ||
|
||
meta = { | ||
inherit (cargo-tauri.meta) maintainers broken; | ||
# Platforms that Tauri supports bundles for | ||
platforms = lib.platforms.darwin ++ lib.platforms.linux; | ||
}; | ||
} ./hook.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
# shellcheck shell=bash disable=SC2034,SC2154,SC2164 | ||
|
||
# We replace these | ||
export dontCargoBuild=true | ||
export dontCargoInstall=true | ||
|
||
tauriBuildHook() { | ||
echo "Executing tauriBuildHook" | ||
|
||
runHook preBuild | ||
|
||
## The following is lifted from rustPlatform.cargoBuildHook | ||
## As we're replacing it, we should also be respecting its options. | ||
|
||
# Account for running outside of mkRustPackage where this may not be set | ||
cargoBuildType="${cargoBuildType:-release}" | ||
|
||
# Let stdenv handle stripping, for consistency and to not break | ||
# separateDebugInfo. | ||
export "CARGO_PROFILE_${cargoBuildType@U}_STRIP"=false | ||
|
||
if [ -n "${buildAndTestSubdir-}" ]; then | ||
# ensure the output doesn't end up in the subdirectory | ||
CARGO_TARGET_DIR="$(pwd)/target" | ||
export CARGO_TARGET_DIR | ||
|
||
# Tauri doesn't respect $CARGO_TARGET_DIR, but does respect the cargo | ||
# argument...but that doesn't respect `--target`, so we have to use the | ||
# config file | ||
# https://github.com/tauri-apps/tauri/issues/10190 | ||
printf '\nbuild.target-dir = "%s"' "$CARGO_TARGET_DIR" >>config.toml | ||
|
||
pushd "${buildAndTestSubdir}" | ||
fi | ||
|
||
local cargoFlagsArray=( | ||
"-j" "$NIX_BUILD_CORES" | ||
"--target" "@rustHostPlatformSpec@" | ||
"--offline" | ||
) | ||
local tauriFlagsArray=( | ||
"--bundles" "${tauriBundleType:-@defaultTauriBundleType@}" | ||
"--target" "@rustHostPlatformSpec@" | ||
) | ||
|
||
if [ "${cargoBuildType}" != "debug" ]; then | ||
cargoFlagsArray+=("--profile" "${cargoBuildType}") | ||
fi | ||
|
||
if [ -n "${cargoBuildNoDefaultFeatures-}" ]; then | ||
cargoFlagsArray+=("--no-default-features") | ||
fi | ||
|
||
if [ -n "${cargoBuildFeatures-}" ]; then | ||
cargoFlagsArray+=("--features=$(concatStringsSep "," cargoBuildFeatures)") | ||
fi | ||
|
||
concatTo cargoFlagsArray cargoBuildFlags | ||
|
||
if [ "${cargoBuildType:-}" == "debug" ]; then | ||
tauriFlagsArray+=("--debug") | ||
fi | ||
|
||
concatTo tauriFlagsArray tauriBuildFlags | ||
|
||
echoCmd 'cargo-tauri.hook cargoFlags' "${cargoFlagsArray[@]}" | ||
echoCmd 'cargo-tauri.hook tauriFlags' "${tauriFlagsArray[@]}" | ||
|
||
@setEnv@ cargo tauri build "${tauriFlagsArray[@]}" -- "${cargoFlagsArray[@]}" | ||
|
||
if [ -n "${buildAndTestSubdir-}" ]; then | ||
popd | ||
fi | ||
|
||
runHook postBuild | ||
|
||
echo "Finished tauriBuildHook" | ||
} | ||
|
||
tauriInstallHook() { | ||
echo "Executing tauriInstallHook" | ||
|
||
runHook preInstall | ||
|
||
# Use a nice variable for our target directory in the following script | ||
targetDir=target/@targetSubdirectory@/$cargoBuildType | ||
|
||
@installScript@ | ||
|
||
runHook postInstall | ||
|
||
echo "Finished tauriInstallHook" | ||
} | ||
|
||
if [ -z "${dontTauriBuild:-}" ] && [ -z "${buildPhase:-}" ]; then | ||
buildPhase=tauriBuildHook | ||
fi | ||
|
||
if [ -z "${dontTauriInstall:-}" ] && [ -z "${installPhase:-}" ]; then | ||
installPhase=tauriInstallHook | ||
fi |
Oops, something went wrong.