or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

architecture.mdasync-tasks.mddata-processing.mdfile-system.mdindex.mdlogging.mdprocess-execution.md
tile.json

architecture.mddocs/

Architecture Handling

Cross-platform architecture detection, conversion, and naming utilities for handling different CPU architectures and platform-specific requirements. Essential for building applications that target multiple architectures.

Capabilities

Architecture Enumeration

Core architecture types supported by electron-builder.

enum Arch {
  ia32,
  x64,
  armv7l,
  arm64,
  universal
}

type ArchType = "x64" | "ia32" | "armv7l" | "arm64" | "universal";

Usage Examples:

import { Arch } from "builder-util";

// Use architecture enum values
const targetArch = Arch.x64;
const armArch = Arch.arm64;
const universalArch = Arch.universal;

// Architecture comparison
if (targetArch === Arch.x64) {
  console.log("Building for 64-bit x86");
}

Architecture Conversion

Convert between different architecture representations and naming conventions.

/**
 * Convert string to architecture enum
 * @param name - Architecture name string
 * @returns Corresponding Arch enum value
 */
function archFromString(name: string): Arch;

/**
 * Get default architecture from string, defaulting to x64
 * @param name - Optional architecture name
 * @returns Arch enum value, defaults to x64 if not specified
 */
function defaultArchFromString(name?: string): Arch;

/**
 * Convert architecture to Linux-specific architecture string
 * @param arch - Architecture enum value
 * @param targetName - Target platform name for context
 * @returns Linux architecture string
 */
function toLinuxArchString(arch: Arch, targetName: string): string;

Usage Examples:

import { archFromString, defaultArchFromString, toLinuxArchString, Arch } from "builder-util";

// Convert string to architecture
const arch1 = archFromString("x64");        // Arch.x64
const arch2 = archFromString("arm64");      // Arch.arm64
const arch3 = archFromString("ia32");       // Arch.ia32

// Get default architecture
const defaultArch = defaultArchFromString();           // Arch.x64
const specifiedArch = defaultArchFromString("arm64");  // Arch.arm64

// Convert to Linux architecture strings
const linuxX64 = toLinuxArchString(Arch.x64, "linux");       // "x86_64"
const linuxArm = toLinuxArchString(Arch.arm64, "linux");     // "aarch64"
const linuxIa32 = toLinuxArchString(Arch.ia32, "linux");     // "i386"

Architecture Naming

Generate architecture-specific names and suffixes for files and CLI operations.

/**
 * Get CLI names for all supported architectures
 * @returns Array of architecture names for CLI usage
 */
function getArchCliNames(): Array<string>;

/**
 * Get architecture suffix for filenames
 * @param arch - Architecture enum value
 * @param defaultArch - Optional default architecture for comparison
 * @returns Architecture suffix string, empty if matches default
 */
function getArchSuffix(arch: Arch, defaultArch?: string): string;

/**
 * Get architecture name for specific file extensions
 * @param arch - Architecture enum value  
 * @param ext - File extension for context
 * @returns Architecture name string for artifacts
 */
function getArtifactArchName(arch: Arch, ext: string): string;

Usage Examples:

import { getArchCliNames, getArchSuffix, getArtifactArchName, Arch } from "builder-util";

// Get all CLI architecture names
const cliNames = getArchCliNames();
// Result: ["ia32", "x64", "armv7l", "arm64", "universal"]

// Generate architecture suffixes for filenames
const x64Suffix = getArchSuffix(Arch.x64);              // "-x64"
const armSuffix = getArchSuffix(Arch.arm64);            // "-arm64"
const defaultSuffix = getArchSuffix(Arch.x64, "x64");   // "" (matches default)

// Get artifact names for different file types
const exeName = getArtifactArchName(Arch.x64, ".exe");      // "x64"
const dmgName = getArtifactArchName(Arch.arm64, ".dmg");    // "arm64"
const appxName = getArtifactArchName(Arch.ia32, ".appx");   // "ia32"

Usage Patterns

Multi-Architecture Building

import { Arch, getArchSuffix, toLinuxArchString } from "builder-util";

// Build for multiple architectures
const targetArchs = [Arch.x64, Arch.arm64, Arch.ia32];

for (const arch of targetArchs) {
  const suffix = getArchSuffix(arch);
  const outputName = `myapp${suffix}`;
  
  console.log(`Building ${outputName} for ${arch}`);
  
  if (process.platform === "linux") {
    const linuxArch = toLinuxArchString(arch, "linux");
    console.log(`Linux architecture: ${linuxArch}`);
  }
}

Dynamic Architecture Detection

import { archFromString, defaultArchFromString } from "builder-util";

// Detect architecture from environment or command line
const envArch = process.env.TARGET_ARCH;
const buildArch = envArch ? archFromString(envArch) : defaultArchFromString();

console.log(`Building for architecture: ${buildArch}`);

// Validate architecture
const validArchs = ["ia32", "x64", "armv7l", "arm64", "universal"];
if (envArch && !validArchs.includes(envArch)) {
  throw new Error(`Invalid architecture: ${envArch}`);
}

Platform-Specific Architecture Handling

import { Arch, toLinuxArchString, getArtifactArchName } from "builder-util";

function getPlatformSpecificName(arch: Arch, platform: string, ext: string): string {
  const artifactName = getArtifactArchName(arch, ext);
  
  switch (platform) {
    case "linux":
      const linuxArch = toLinuxArchString(arch, "linux");
      return `app-${linuxArch}${ext}`;
    
    case "win32":
      return `app-${artifactName}${ext}`;
    
    case "darwin":
      if (arch === Arch.universal) {
        return `app-universal${ext}`;
      }
      return `app-${artifactName}${ext}`;
    
    default:
      return `app-${artifactName}${ext}`;
  }
}

// Usage
const windowsName = getPlatformSpecificName(Arch.x64, "win32", ".exe");
const linuxName = getPlatformSpecificName(Arch.arm64, "linux", ".AppImage");
const macName = getPlatformSpecificName(Arch.universal, "darwin", ".dmg");

Architecture Validation

import { archFromString, getArchCliNames } from "builder-util";

function validateArchitecture(archString: string): boolean {
  const validArchs = getArchCliNames();
  return validArchs.includes(archString);
}

function parseArchitectures(input: Array<string>): Array<Arch> {
  return input
    .filter(validateArchitecture)
    .map(archFromString);
}

// Usage
const userInput = ["x64", "arm64", "invalid-arch"];
const validArchs = parseArchitectures(userInput);
// Result: [Arch.x64, Arch.arm64]