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+ cargo check --locked -p third-party-licenses --features desktop
66+ cargo build --locked -p third-party-licenses --features desktop
67+
68+ cargo check --profile ${ profile } --locked -p graphite-desktop-bundle
69+ cargo build --profile ${ profile } --locked -p graphite-desktop-bundle
70+ '' ;
71+ }
72+ ) ;
11073in
11174
11275deps . crane . lib . buildPackage (
11376 common
11477 // {
115- cargoArtifacts = deps . crane . lib . buildDepsOnly common ;
78+ inherit cargoArtifacts ;
11679
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- } ;
80+ buildInputs = libs ;
81+ nativeBuildInputs = [
82+ pkgs . pkg-config
83+ pkgs . lld
84+ pkgs . nodejs
85+ pkgs . nodePackages . npm
86+ pkgs . binaryen
87+ pkgs . wasm-bindgen-cli_0_2_100
88+ pkgs . wasm-pack
89+ pkgs . cargo-about
90+ pkgs . removeReferencesTo
91+ pkgs . importNpmLock . npmConfigHook
92+ ] ;
12393
12494 npmDeps = pkgs . importNpmLock {
12595 npmRoot = "${ info . src } /frontend" ;
12696 } ;
12797 npmRoot = "frontend" ;
128- nativeBuildInputs = [
129- pkgs . importNpmLock . npmConfigHook
130- pkgs . nodePackages . npm
131- ]
132- ++ common . nativeBuildInputs ;
98+ npmConfigScript = "setup" ;
99+ makeCacheWritable = true ;
100+
101+ env = deps . cef . env // {
102+ RASTER_NODES_SHADER_PATH = self . packages . ${ system } . graphite-raster-nodes-shaders ;
103+ GRAPHITE_GIT_COMMIT_HASH = self . rev or "unknown" ;
104+ GRAPHITE_GIT_COMMIT_DATE = self . lastModified or "unknown" ;
105+ } ;
106+
107+ postPatch = ''
108+ mkdir branding
109+ cp -r ${ branding } /* branding
110+ cp ${ info . src } /.branding branding/.branding
111+ '' ;
133112
134113 preBuild = ''
135- ${ lib . getExe self . packages . ${ system } . tools . third-party-licenses }
114+ # Prevent `package-installer.js` from trying to update npm dependencies
115+ touch -r frontend/package-lock.json -d '+1 year' frontend/node_modules/.install-timestamp
116+
117+ export HOME="$TMPDIR"
136118 ''
137119 + (
138120 if self ? rev then
@@ -143,6 +125,10 @@ deps.crane.lib.buildPackage (
143125 ""
144126 ) ;
145127
128+ buildPhaseCargoCommand = "cargo run build desktop${ if dev then " debug" else "" } " ;
129+
130+ doNotPostBuildInstallCargoBinaries = true ;
131+
146132 installPhase = ''
147133 mkdir -p $out/bin
148134 cp target/${ if dev then "debug" else "release" } /graphite $out/bin/graphite
@@ -161,12 +147,14 @@ deps.crane.lib.buildPackage (
161147 '' ;
162148
163149 postFixup = ''
164- remove-references-to -t "${ cargoVendorDir } " $out/bin/graphite
150+ remove-references-to -t "${ common . cargoVendorDir } " $out/bin/graphite
165151
166152 patchelf \
167153 --set-rpath "${ pkgs . lib . makeLibraryPath libs } :${ deps . cef . env . CEF_PATH } " \
168154 --add-needed libGL.so \
169155 $out/bin/graphite
170156 '' ;
157+
158+ passthru . deps = cargoArtifacts ;
171159 }
172160)
0 commit comments