gaia-assembler 0.1.1

Universal assembler framework for Gaia project
Documentation
//! SPIR-V (Standard Portable Intermediate Representation - V) backend compiler

use std::collections::HashMap;

use crate::{config::GaiaConfig, program::GaiaModule, Backend, GeneratedFiles};
use gaia_types::{
    helpers::{AbiCompatible, ApiCompatible, Architecture, ArtifactType, CompilationTarget},
    Result,
};

/// SPIR-V Backend implementation
#[derive(Default)]
pub struct SpirvBackend {}

impl Backend for SpirvBackend {
    fn name(&self) -> &'static str {
        "SPIR-V"
    }

    fn primary_target(&self) -> CompilationTarget {
        CompilationTarget { build: Architecture::Unknown, host: AbiCompatible::SPIRV, target: ApiCompatible::Unknown }
    }

    fn artifact_type(&self) -> ArtifactType {
        ArtifactType::Binary
    }

    fn match_score(&self, target: &CompilationTarget) -> f32 {
        if target.host == AbiCompatible::SPIRV {
            return 95.0;
        }
        0.0
    }

    fn generate(&self, _program: &GaiaModule, config: &GaiaConfig) -> Result<GeneratedFiles> {
        #[cfg(feature = "spirv-assembler")]
        {
            Ok(GeneratedFiles { artifact_type: ArtifactType::Binary, files: HashMap::new(), custom: None, diagnostics: vec![] })
        }
        #[cfg(not(feature = "spirv-assembler"))]
        {
            Err(gaia_types::GaiaError::custom_error("SPIR-V feature is not enabled"))
        }
    }
}