bhc-target

Crates.iobhc-target
lib.rsbhc-target
version0.2.1
created_at2026-01-25 18:26:42.84936+00
updated_at2026-01-25 18:26:42.84936+00
descriptionTarget specifications and platform support for BHC
homepage
repositoryhttps://github.com/raskell-io/bhc
max_upload_size
id2069242
size34,255
Raffael Schneider (raffaelschneider)

documentation

README

bhc-target

Target specifications and platform support for the Basel Haskell Compiler.

Overview

This crate defines target machine specifications including architecture, operating system, ABI, and CPU features. It supports cross-compilation to multiple platforms.

Supported Targets

Target Architecture Notes
x86_64-unknown-linux-gnu x86-64 Linux with glibc
x86_64-unknown-linux-musl x86-64 Linux with musl
x86_64-apple-darwin x86-64 macOS (Intel)
aarch64-apple-darwin AArch64 macOS (Apple Silicon)
aarch64-unknown-linux-gnu AArch64 Linux ARM64
wasm32-unknown-wasi WebAssembly WASI
nvptx64-nvidia-cuda NVIDIA PTX CUDA GPU
amdgcn-amd-amdhsa AMD GCN ROCm GPU

Key Types

Type Description
TargetSpec Complete target specification
Arch Target architecture
Os Target operating system
Abi Target ABI
CpuFeatures CPU feature flags

Usage

Getting Target Information

use bhc_target::{TargetSpec, Arch, Os};

// Get the host target
let host = TargetSpec::host();
println!("Host: {}", host.triple());

// Create a specific target
let target = TargetSpec::parse("aarch64-apple-darwin")?;
assert_eq!(target.arch, Arch::Aarch64);
assert_eq!(target.os, Os::Darwin);

Architecture Properties

use bhc_target::Arch;

let arch = Arch::X86_64;

// Pointer width
assert_eq!(arch.pointer_width(), 64);

// Natural alignment
assert_eq!(arch.natural_alignment(), 8);

// Architecture name
assert_eq!(arch.name(), "x86_64");

Architectures

pub enum Arch {
    X86_64,    // AMD64
    Aarch64,   // 64-bit ARM
    Wasm32,    // 32-bit WebAssembly
    Wasm64,    // 64-bit WebAssembly
    Riscv32,   // 32-bit RISC-V
    Riscv64,   // 64-bit RISC-V
    Nvptx64,   // NVIDIA PTX
    Amdgcn,    // AMD GCN/RDNA
}

Operating Systems

pub enum Os {
    Linux,
    Darwin,    // macOS/iOS
    Windows,
    Wasi,      // WebAssembly System Interface
    None,      // Bare metal
    Cuda,      // NVIDIA CUDA
    Amdhsa,    // AMD HSA
}

CPU Features

use bhc_target::{CpuFeatures, X86Feature};

let mut features = CpuFeatures::default();

// Enable SIMD features
features.enable(X86Feature::Sse2);
features.enable(X86Feature::Avx);
features.enable(X86Feature::Avx2);
features.enable(X86Feature::Fma);

// Check features
if features.has(X86Feature::Avx512f) {
    println!("AVX-512 available");
}

x86-64 Features

Feature Description
Sse SSE (128-bit SIMD)
Sse2 SSE2 (integer SIMD)
Sse3 SSE3 (horizontal ops)
Sse41 SSE4.1
Sse42 SSE4.2
Avx AVX (256-bit SIMD)
Avx2 AVX2 (256-bit integer)
Avx512f AVX-512 Foundation
Fma Fused multiply-add

AArch64 Features

Feature Description
Neon NEON SIMD
Sve Scalable Vector Extension
Sve2 SVE2

Target Triple

Targets are specified using the standard triple format: <arch>-<vendor>-<os>-<abi>

use bhc_target::TargetSpec;

// Parse from string
let target = TargetSpec::parse("x86_64-unknown-linux-gnu")?;

// Access components
println!("Architecture: {}", target.arch);
println!("Vendor: {}", target.vendor);
println!("OS: {}", target.os);
println!("ABI: {}", target.abi);

// Get the triple string
println!("Triple: {}", target.triple());

Data Layout

use bhc_target::TargetSpec;

let target = TargetSpec::parse("x86_64-unknown-linux-gnu")?;

// Get data layout for LLVM
let layout = target.data_layout();
// e.g., "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

Design Notes

  • Target specifications are immutable after creation
  • Host target is detected at compile time
  • GPU targets require specific feature sets
  • WASM targets have special handling for linear memory

Related Crates

  • bhc-codegen - Uses targets for code generation
  • bhc-session - Session holds target configuration
  • bhc-driver - Cross-compilation support
  • bhc-gpu - GPU target specifications

Specification References

  • H26-SPEC Section 12: Target Platforms
  • LLVM Target Triple Documentation
Commit count: 185

cargo fmt