1414
1515let
1616 branding = self . packages . ${ system } . graphite-branding ;
17- cargoVendorDir = deps . crane . lib . vendorCargoDeps { inherit ( info ) src ; } ;
18- resourcesCommon = {
19- pname = "${ info . pname } -resources" ;
20- inherit ( info ) version src ;
21- inherit cargoVendorDir ;
22- strictDeps = true ;
23- nativeBuildInputs = [
24- pkgs . pkg-config
25- pkgs . lld
26- pkgs . nodejs
27- pkgs . nodePackages . npm
28- pkgs . binaryen
29- pkgs . wasm-bindgen-cli_0_2_100
30- pkgs . wasm-pack
31- pkgs . cargo-about
32- ] ;
33- buildInputs = [ pkgs . openssl ] ;
34- env . CARGO_PROFILE = if dev then "dev" else "release" ;
35- cargoExtraArgs = "--target wasm32-unknown-unknown -p graphite-wasm-wrapper --no-default-features --features native" ;
36- doCheck = false ;
37- } ;
38- resources = deps . crane . lib . buildPackage (
39- resourcesCommon
40- // {
41- cargoArtifacts = deps . crane . lib . buildDepsOnly resourcesCommon ;
42-
43- npmDeps = pkgs . importNpmLock {
44- npmRoot = "${ info . src } /frontend" ;
45- } ;
46-
47- npmRoot = "frontend" ;
48- npmConfigScript = "setup" ;
49- makeCacheWritable = true ;
50-
51- nativeBuildInputs = [
52- pkgs . importNpmLock . npmConfigHook
53- pkgs . removeReferencesTo
54- ]
55- ++ resourcesCommon . nativeBuildInputs ;
56-
57- prePatch = ''
58- mkdir branding
59- cp -r ${ branding } /* branding
60- cp ${ info . src } /.branding branding/.branding
61- '' ;
62-
63- buildPhase = ''
64- export HOME="$TMPDIR"
65-
66- pushd frontend
67- npm run native:build-${ if dev then "dev" else "production" }
68- popd
69- '' ;
70-
71- installPhase = ''
72- mkdir -p $out
73- cp -r frontend/dist/* $out/
74- '' ;
75-
76- postFixup = ''
77- find "$out" -type f -exec remove-references-to -t "${ cargoVendorDir } " '{}' +
78- '' ;
79- }
80- ) ;
8117 libs = [
8218 pkgs . wayland
8319 pkgs . vulkan-loader
8420 pkgs . libGL
8521 pkgs . openssl
8622 pkgs . libraw
87-
8823 # X11 Support
8924 pkgs . libxkbcommon
9025 pkgs . libXcursor
9126 pkgs . libxcb
9227 pkgs . libX11
9328 ] ;
29+
9430 common = {
9531 inherit ( info ) pname version src ;
96- inherit cargoVendorDir ;
97- strictDeps = true ;
32+ cargoVendorDir = deps . crane . lib . vendorCargoDepsFlatten (
33+ deps . crane . lib . vendorMultipleCargoDeps {
34+ inherit ( deps . crane . lib . findCargoFiles ( deps . crane . lib . cleanCargoSource info . src ) ) cargoConfigs ;
35+ cargoLockList = [
36+ "${ info . src } /Cargo.lock"
37+ "${ deps . rustGPU . toolchain . availableComponents . rust-src } /lib/rustlib/src/rust/library/Cargo.lock"
38+ ] ;
39+ }
40+ ) ;
9841 buildInputs = libs ;
99- nativeBuildInputs = [
100- pkgs . pkg-config
101- pkgs . cargo-about
102- pkgs . removeReferencesTo
103- ] ;
104- env = deps . cef . env // {
105- CARGO_PROFILE = if dev then "dev" else "release" ;
106- } ;
107- cargoExtraArgs = "-p graphite-desktop" ;
42+ strictDeps = true ;
10843 doCheck = false ;
10944 } ;
45+
46+ cargoArtifacts = deps . crane . lib . buildDepsOnly (
47+ common
48+ // {
49+ nativeBuildInputs = [
50+ pkgs . pkg-config
51+ pkgs . lld
52+ ] ;
53+ env = deps . cef . env ;
54+ buildPhase =
55+ let
56+ profile = if dev then "dev" else "release" ;
57+ in
58+ ''
59+ cargo check --profile ${ profile } --locked -p graphite-desktop-platform-linux
60+ cargo build --profile ${ profile } --locked -p graphite-desktop-platform-linux
61+
62+ cargo check --profile ${ profile } --target wasm32-unknown-unknown --locked -p graphite-wasm-wrapper --no-default-features --features native
63+ cargo build --profile ${ profile } --target wasm32-unknown-unknown --locked -p graphite-wasm-wrapper --no-default-features --features native
64+ '' ;
65+ }
66+ ) ;
11067in
11168
11269deps . crane . lib . buildPackage (
11370 common
11471 // {
115- cargoArtifacts = deps . crane . lib . buildDepsOnly common ;
72+ inherit cargoArtifacts ;
11673
117- env = common . env // {
118- RASTER_NODES_SHADER_PATH = self . packages . ${ system } . graphite-raster-nodes-shaders ;
119- EMBEDDED_RESOURCES = resources ;
120- GRAPHITE_GIT_COMMIT_HASH = self . rev or "unknown" ;
121- GRAPHITE_GIT_COMMIT_DATE = self . lastModified or "unknown" ;
122- } ;
74+ buildInputs = libs ;
75+ nativeBuildInputs = [
76+ pkgs . pkg-config
77+ pkgs . lld
78+ pkgs . nodejs
79+ pkgs . nodePackages . npm
80+ pkgs . binaryen
81+ pkgs . wasm-bindgen-cli_0_2_100
82+ pkgs . wasm-pack
83+ pkgs . cargo-about
84+ pkgs . removeReferencesTo
85+ pkgs . importNpmLock . npmConfigHook
86+ ] ;
12387
12488 npmDeps = pkgs . importNpmLock {
12589 npmRoot = "${ info . src } /frontend" ;
12690 } ;
12791 npmRoot = "frontend" ;
128- nativeBuildInputs = [
129- pkgs . importNpmLock . npmConfigHook
130- pkgs . nodePackages . npm
131- ]
132- ++ common . nativeBuildInputs ;
92+ npmConfigScript = "setup" ;
93+ makeCacheWritable = true ;
94+
95+ env = deps . cef . env // {
96+ RASTER_NODES_SHADER_PATH = self . packages . ${ system } . graphite-raster-nodes-shaders ;
97+ GRAPHITE_GIT_COMMIT_HASH = self . rev or "unknown" ;
98+ GRAPHITE_GIT_COMMIT_DATE = self . lastModified or "unknown" ;
99+ } ;
100+
101+ postPatch = ''
102+ mkdir branding
103+ cp -r ${ branding } /* branding
104+ cp ${ info . src } /.branding branding/.branding
105+ '' ;
133106
134107 preBuild = ''
135- ${ lib . getExe self . packages . ${ system } . tools . third-party-licenses }
108+ # Prevent `package-installer.js` from trying to update npm dependencies
109+ touch -r frontend/package-lock.json -d '+1 year' frontend/node_modules/.install-timestamp
110+
111+ export HOME="$TMPDIR"
136112 ''
137113 + (
138114 if self ? rev then
@@ -143,6 +119,10 @@ deps.crane.lib.buildPackage (
143119 ""
144120 ) ;
145121
122+ buildPhaseCargoCommand = "cargo run build desktop${ if dev then " debug" else "" } " ;
123+
124+ doNotPostBuildInstallCargoBinaries = true ;
125+
146126 installPhase = ''
147127 mkdir -p $out/bin
148128 cp target/${ if dev then "debug" else "release" } /graphite $out/bin/graphite
@@ -161,12 +141,14 @@ deps.crane.lib.buildPackage (
161141 '' ;
162142
163143 postFixup = ''
164- remove-references-to -t "${ cargoVendorDir } " $out/bin/graphite
144+ remove-references-to -t "${ common . cargoVendorDir } " $out/bin/graphite
165145
166146 patchelf \
167147 --set-rpath "${ pkgs . lib . makeLibraryPath libs } :${ deps . cef . env . CEF_PATH } " \
168148 --add-needed libGL.so \
169149 $out/bin/graphite
170150 '' ;
151+
152+ passthru . deps = cargoArtifacts ;
171153 }
172154)
0 commit comments