Skip to content

Commit f8850ce

Browse files
committed
Rename some structs, move shader_crate field into cargo-gpu CLI
1 parent 8670d74 commit f8850ce

File tree

6 files changed

+251
-195
lines changed

6 files changed

+251
-195
lines changed

crates/cargo-gpu-build/src/build.rs

Lines changed: 59 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ use crate::{
77
lockfile::{LockfileMismatchError, LockfileMismatchHandler},
88
spirv_builder::{CompileResult, SpirvBuilder, SpirvBuilderError},
99
spirv_cache::{
10-
backend::{Install, InstallError, InstallParams, InstallRunParams, InstalledBackend},
10+
backend::{
11+
SpirvCodegenBackend, SpirvCodegenBackendInstallError, SpirvCodegenBackendInstallParams,
12+
SpirvCodegenBackendInstaller,
13+
},
1114
command::CommandExecError,
1215
toolchain::{
1316
HaltToolchainInstallation, InheritStderr, InheritStdout, NoopOnComponentsInstall,
@@ -20,14 +23,14 @@ use crate::{
2023
#[cfg(feature = "watch")]
2124
use crate::spirv_builder::SpirvWatcher;
2225

23-
/// Parameters for [`ShaderCrateBuilder::new()`].
26+
/// Parameters for [`CargoGpuBuilder::new()`].
2427
#[derive(Debug, Clone)]
2528
#[non_exhaustive]
26-
pub struct ShaderCrateBuilderParams<W, T, C, O, E> {
29+
pub struct CargoGpuBuilderParams<W, T, C, O, E> {
2730
/// Parameters of the shader crate build.
2831
pub build: SpirvBuilder,
2932
/// Parameters of the codegen backend installation for the shader crate.
30-
pub install: InstallParams,
33+
pub install: SpirvCodegenBackendInstaller,
3134
/// There is a tricky situation where a shader crate that depends on workspace config can have
3235
/// a different `Cargo.lock` lockfile version from the the workspace's `Cargo.lock`. This can
3336
/// prevent builds when an old Rust toolchain doesn't recognise the newer lockfile version.
@@ -58,7 +61,7 @@ pub struct ShaderCrateBuilderParams<W, T, C, O, E> {
5861
pub stdio_cfg: StdioCfg<O, E>,
5962
}
6063

61-
impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
64+
impl<W, T, C, O, E> CargoGpuBuilderParams<W, T, C, O, E> {
6265
/// Replaces build parameters of the shader crate.
6366
#[inline]
6467
#[must_use]
@@ -69,7 +72,7 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
6972
/// Replaces codegen backend installation parameters of the shader crate.
7073
#[inline]
7174
#[must_use]
72-
pub fn install(self, install: InstallParams) -> Self {
75+
pub fn install(self, install: SpirvCodegenBackendInstaller) -> Self {
7376
Self { install, ..self }
7477
}
7578

@@ -89,8 +92,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
8992
/// Replaces the writer of user output.
9093
#[inline]
9194
#[must_use]
92-
pub fn writer<NW>(self, writer: NW) -> ShaderCrateBuilderParams<NW, T, C, O, E> {
93-
ShaderCrateBuilderParams {
95+
pub fn writer<NW>(self, writer: NW) -> CargoGpuBuilderParams<NW, T, C, O, E> {
96+
CargoGpuBuilderParams {
9497
build: self.build,
9598
install: self.install,
9699
force_overwrite_lockfiles_v4_to_v3: self.force_overwrite_lockfiles_v4_to_v3,
@@ -106,8 +109,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
106109
pub fn halt<NT, NC>(
107110
self,
108111
halt: HaltToolchainInstallation<NT, NC>,
109-
) -> ShaderCrateBuilderParams<W, NT, NC, O, E> {
110-
ShaderCrateBuilderParams {
112+
) -> CargoGpuBuilderParams<W, NT, NC, O, E> {
113+
CargoGpuBuilderParams {
111114
build: self.build,
112115
install: self.install,
113116
force_overwrite_lockfiles_v4_to_v3: self.force_overwrite_lockfiles_v4_to_v3,
@@ -123,8 +126,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
123126
pub fn stdio_cfg<NO, NE>(
124127
self,
125128
stdio_cfg: StdioCfg<NO, NE>,
126-
) -> ShaderCrateBuilderParams<W, T, C, NO, NE> {
127-
ShaderCrateBuilderParams {
129+
) -> CargoGpuBuilderParams<W, T, C, NO, NE> {
130+
CargoGpuBuilderParams {
128131
build: self.build,
129132
install: self.install,
130133
force_overwrite_lockfiles_v4_to_v3: self.force_overwrite_lockfiles_v4_to_v3,
@@ -135,16 +138,16 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
135138
}
136139
}
137140

138-
/// [`Default`] parameters for [`ShaderCrateBuilder::new()`].
139-
pub type DefaultShaderCrateBuilderParams = ShaderCrateBuilderParams<
141+
/// [`Default`] parameters for [`CargoGpuBuilder::new()`].
142+
pub type DefaultCargoGpuBuilderParams = CargoGpuBuilderParams<
140143
io::Stdout,
141144
NoopOnToolchainInstall,
142145
NoopOnComponentsInstall,
143146
InheritStdout,
144147
InheritStderr,
145148
>;
146149

147-
impl From<SpirvBuilder> for DefaultShaderCrateBuilderParams {
150+
impl From<SpirvBuilder> for DefaultCargoGpuBuilderParams {
148151
#[inline]
149152
fn from(build: SpirvBuilder) -> Self {
150153
Self {
@@ -154,12 +157,12 @@ impl From<SpirvBuilder> for DefaultShaderCrateBuilderParams {
154157
}
155158
}
156159

157-
impl Default for DefaultShaderCrateBuilderParams {
160+
impl Default for DefaultCargoGpuBuilderParams {
158161
#[inline]
159162
fn default() -> Self {
160163
Self {
161164
build: SpirvBuilder::default(),
162-
install: InstallParams::default(),
165+
install: SpirvCodegenBackendInstaller::default(),
163166
force_overwrite_lockfiles_v4_to_v3: false,
164167
writer: io::stdout(),
165168
halt: HaltToolchainInstallation::noop(),
@@ -171,20 +174,20 @@ impl Default for DefaultShaderCrateBuilderParams {
171174
/// A builder for compiling a `rust-gpu` shader crate.
172175
#[derive(Debug, Clone)]
173176
#[non_exhaustive]
174-
pub struct ShaderCrateBuilder<W = io::Stdout> {
177+
pub struct CargoGpuBuilder<W = io::Stdout> {
175178
/// The underlying builder for compiling the shader crate.
176179
pub builder: SpirvBuilder,
177-
/// The arguments used to install the backend.
178-
pub installed_backend_args: Install,
179-
/// The installed backend.
180-
pub installed_backend: InstalledBackend,
180+
/// The underlying codegen backend installer for the shader crate.
181+
pub installer: SpirvCodegenBackendInstaller,
182+
/// The installed codegen backend.
183+
pub codegen_backend: SpirvCodegenBackend,
181184
/// The lockfile mismatch handler.
182185
pub lockfile_mismatch_handler: LockfileMismatchHandler,
183186
/// Writer of user output.
184187
pub writer: W,
185188
}
186189

187-
impl<W> ShaderCrateBuilder<W>
190+
impl<W> CargoGpuBuilder<W>
188191
where
189192
W: io::Write,
190193
{
@@ -199,16 +202,16 @@ where
199202
/// * the backend installation fails,
200203
/// * there is a lockfile version mismatch that cannot be resolved automatically.
201204
#[inline]
202-
pub fn new<I, R, T, C, O, E>(params: I) -> Result<Self, NewShaderCrateBuilderError<R>>
205+
pub fn new<I, R, T, C, O, E>(params: I) -> Result<Self, NewCargoGpuBuilderError<R>>
203206
where
204-
I: Into<ShaderCrateBuilderParams<W, T, C, O, E>>,
207+
I: Into<CargoGpuBuilderParams<W, T, C, O, E>>,
205208
R: From<CommandExecError>,
206209
T: FnOnce(&str) -> Result<(), R>,
207210
C: FnOnce(&str) -> Result<(), R>,
208211
O: FnMut() -> Stdio,
209212
E: FnMut() -> Stdio,
210213
{
211-
let ShaderCrateBuilderParams {
214+
let CargoGpuBuilderParams {
212215
mut build,
213216
install,
214217
force_overwrite_lockfiles_v4_to_v3,
@@ -218,16 +221,16 @@ where
218221
} = params.into();
219222

220223
if build.target.is_none() {
221-
return Err(NewShaderCrateBuilderError::MissingTarget);
224+
return Err(NewCargoGpuBuilderError::MissingTarget);
222225
}
223226
let path_to_crate = build
224227
.path_to_crate
225228
.as_ref()
226-
.ok_or(NewShaderCrateBuilderError::MissingCratePath)?;
229+
.ok_or(NewCargoGpuBuilderError::MissingCratePath)?;
227230
let shader_crate = dunce::canonicalize(path_to_crate)?;
231+
build.path_to_crate = Some(shader_crate.clone());
228232

229-
let backend_to_install = Install::new(shader_crate, install);
230-
let backend_install_params = InstallRunParams::default()
233+
let backend_install_params = SpirvCodegenBackendInstallParams::from(&shader_crate)
231234
.writer(&mut writer)
232235
.halt(HaltToolchainInstallation {
233236
on_toolchain_install: |channel: &str| (halt.on_toolchain_install)(channel),
@@ -237,23 +240,23 @@ where
237240
stdout: || (stdio_cfg.stdout)(),
238241
stderr: || (stdio_cfg.stderr)(),
239242
});
240-
let backend = backend_to_install.run(backend_install_params)?;
243+
let codegen_backend = install.install(backend_install_params)?;
241244

242245
let lockfile_mismatch_handler = LockfileMismatchHandler::new(
243-
&backend_to_install.shader_crate,
244-
&backend.toolchain_channel,
246+
&shader_crate,
247+
&codegen_backend.toolchain_channel,
245248
force_overwrite_lockfiles_v4_to_v3,
246249
)?;
247250

248-
#[expect(clippy::unreachable, reason = "target was already set")]
249-
backend
251+
#[expect(clippy::unreachable, reason = "target was set")]
252+
codegen_backend
250253
.configure_spirv_builder(&mut build)
251-
.unwrap_or_else(|_| unreachable!("target was checked before calling this function"));
254+
.unwrap_or_else(|_| unreachable!("target was set before calling this function"));
252255

253256
Ok(Self {
254257
builder: build,
255-
installed_backend_args: backend_to_install,
256-
installed_backend: backend,
258+
installer: install,
259+
codegen_backend,
257260
lockfile_mismatch_handler,
258261
writer,
259262
})
@@ -265,8 +268,13 @@ where
265268
///
266269
/// Returns an error if building the shader crate failed.
267270
#[inline]
268-
pub fn build(&mut self) -> Result<CompileResult, ShaderCrateBuildError> {
269-
let shader_crate = self.installed_backend_args.shader_crate.display();
271+
pub fn build(&mut self) -> Result<CompileResult, CargoGpuBuildError> {
272+
let shader_crate = self
273+
.builder
274+
.path_to_crate
275+
.as_ref()
276+
.ok_or(SpirvBuilderError::MissingCratePath)?
277+
.display();
270278
user_output!(&mut self.writer, "Compiling shaders at {shader_crate}...\n")?;
271279

272280
let result = self.builder.build()?;
@@ -280,8 +288,13 @@ where
280288
/// Returns an error if watching shader crate for changes failed.
281289
#[cfg(feature = "watch")]
282290
#[inline]
283-
pub fn watch(&mut self) -> Result<SpirvWatcher, ShaderCrateBuildError> {
284-
let shader_crate = self.installed_backend_args.shader_crate.display();
291+
pub fn watch(&mut self) -> Result<SpirvWatcher, CargoGpuBuildError> {
292+
let shader_crate = self
293+
.builder
294+
.path_to_crate
295+
.as_ref()
296+
.ok_or(SpirvBuilderError::MissingCratePath)?
297+
.display();
285298
user_output!(
286299
&mut self.writer,
287300
"Watching shaders for changes at {shader_crate}...\n"
@@ -292,10 +305,10 @@ where
292305
}
293306
}
294307

295-
/// An error indicating what went wrong when creating a [`ShaderCrateBuilder`].
308+
/// An error indicating what went wrong when creating a [`CargoGpuBuilder`].
296309
#[derive(Debug, thiserror::Error)]
297310
#[non_exhaustive]
298-
pub enum NewShaderCrateBuilderError<E = CommandExecError> {
311+
pub enum NewCargoGpuBuilderError<E = CommandExecError> {
299312
/// Shader crate target is missing from parameters of the build.
300313
#[error("shader crate target must be set, for example `spirv-unknown-vulkan1.2`")]
301314
MissingTarget,
@@ -307,7 +320,7 @@ pub enum NewShaderCrateBuilderError<E = CommandExecError> {
307320
InvalidCratePath(#[from] io::Error),
308321
/// The backend installation failed.
309322
#[error("could not install backend: {0}")]
310-
Install(#[from] InstallError<E>),
323+
Install(#[from] SpirvCodegenBackendInstallError<E>),
311324
/// There is a lockfile version mismatch that cannot be resolved automatically.
312325
#[error(transparent)]
313326
LockfileMismatch(#[from] LockfileMismatchError),
@@ -316,7 +329,7 @@ pub enum NewShaderCrateBuilderError<E = CommandExecError> {
316329
/// An error indicating what went wrong when building the shader crate.
317330
#[derive(Debug, thiserror::Error)]
318331
#[non_exhaustive]
319-
pub enum ShaderCrateBuildError {
332+
pub enum CargoGpuBuildError {
320333
/// Failed to write user output.
321334
#[error("failed to write user output: {0}")]
322335
IoWrite(#[from] io::Error),

crates/cargo-gpu-build/src/lockfile.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl LockfileMismatchHandler {
6868
})
6969
}
7070

71-
/// See docs for [`force_overwrite_lockfiles_v4_to_v3`](field@crate::build::ShaderCrateBuilderParams::force_overwrite_lockfiles_v4_to_v3)
71+
/// See docs for [`force_overwrite_lockfiles_v4_to_v3`](field@crate::build::CargoGpuBuilderParams::force_overwrite_lockfiles_v4_to_v3)
7272
/// flag for why we do this.
7373
fn ensure_workspace_rust_version_does_not_conflict_with_shader(
7474
shader_crate_path: &Path,
@@ -96,7 +96,7 @@ impl LockfileMismatchHandler {
9696
}
9797
}
9898

99-
/// See docs for [`force_overwrite_lockfiles_v4_to_v3`](field@crate::build::ShaderCrateBuilderParams::force_overwrite_lockfiles_v4_to_v3)
99+
/// See docs for [`force_overwrite_lockfiles_v4_to_v3`](field@crate::build::CargoGpuBuilderParams::force_overwrite_lockfiles_v4_to_v3)
100100
/// flag for why we do this.
101101
fn ensure_shader_rust_version_does_not_conflict_with_any_cargo_locks(
102102
shader_crate_path: &Path,
@@ -334,7 +334,7 @@ pub enum LockfileMismatchError {
334334
/// Conflicting lockfile manifest versions detected, with advice on how to resolve them
335335
/// by setting the [`force_overwrite_lockfiles_v4_to_v3`] flag.
336336
///
337-
/// [`force_overwrite_lockfiles_v4_to_v3`]: field@crate::build::ShaderCrateBuilderParams::force_overwrite_lockfiles_v4_to_v3
337+
/// [`force_overwrite_lockfiles_v4_to_v3`]: field@crate::build::CargoGpuBuilderParams::force_overwrite_lockfiles_v4_to_v3
338338
#[error(
339339
r#"conflicting `Cargo.lock` versions detected ⚠️
340340

0 commit comments

Comments
 (0)