nushell-plugins/etc/build_targets.toml
Jesús Pérez c5b510b939 feat: modularize justfile and fix collection/packaging scripts
- Modularize justfile system with dedicated modules:
  * alias.just: Command aliases (h, b, c, s)
  * build.just: Build and cross-compilation commands
  * distro.just: Collection and packaging commands
  * help.just: Comprehensive help system with areas
  * qa.just: Testing and quality assurance
  * tools.just: Development tools and utilities
  * upstream.just: Repository tracking and sync

- Fix platform detection in collect script:
  * Use actual platform names (darwin-arm64) instead of generic "host"
  * Support both "host" argument and auto-detection
  * Filter out .d dependency files from distribution

- Fix packaging script issues:
  * Correct uname command syntax (^uname -m)
  * Fix string interpolation and environment parsing
  * Include plugin binaries in archives (was only packaging metadata)
  * Use proper path join instead of string interpolation
  * Add --force flag to avoid interactive prompts

- Fix justfile absolute paths:
  * Replace relative paths with {{justfile_directory()}} function
  * Enable commands to work from any directory

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-20 19:04:08 +01:00

173 lines
4.7 KiB
TOML

# Build Targets Configuration for Nushell Plugins
# Defines supported cross-compilation targets and their requirements
[metadata]
version = "1.0.0"
description = "Cross-compilation targets for nushell plugins"
last_updated = "2024-09-20"
# Default settings applied to all targets unless overridden
[defaults]
docker_image = "nushell-plugins-cross:latest"
strip_binaries = true
optimize_size = true
# Linux AMD64 - Most common Linux target
[targets.linux-amd64]
rust_target = "x86_64-unknown-linux-gnu"
platform_name = "linux-amd64"
archive_format = "tar.gz"
docker_required = false
native_build = true
description = "Linux x86_64 (64-bit Intel/AMD)"
# Linux ARM64 - Growing in popularity with cloud instances
[targets.linux-arm64]
rust_target = "aarch64-unknown-linux-gnu"
platform_name = "linux-arm64"
archive_format = "tar.gz"
docker_required = true
native_build = false
description = "Linux ARM64 (64-bit ARM)"
linker = "aarch64-linux-gnu-gcc"
# macOS AMD64 - Intel Macs
[targets.darwin-amd64]
rust_target = "x86_64-apple-darwin"
platform_name = "darwin-amd64"
archive_format = "tar.gz"
docker_required = false
native_build = true
host_required = "darwin"
description = "macOS x86_64 (Intel Macs)"
# macOS ARM64 - Apple Silicon Macs
[targets.darwin-arm64]
rust_target = "aarch64-apple-darwin"
platform_name = "darwin-arm64"
archive_format = "tar.gz"
docker_required = false
native_build = true
host_required = "darwin"
description = "macOS ARM64 (Apple Silicon)"
# Windows AMD64 - Standard Windows target
[targets.windows-amd64]
rust_target = "x86_64-pc-windows-msvc"
platform_name = "windows-amd64"
archive_format = "zip"
docker_required = true
native_build = false
description = "Windows x86_64 (64-bit)"
binary_extension = ".exe"
# Additional targets that can be enabled
[targets.linux-arm32]
rust_target = "armv7-unknown-linux-gnueabihf"
platform_name = "linux-arm32"
archive_format = "tar.gz"
docker_required = true
native_build = false
enabled = false
description = "Linux ARM32 (32-bit ARM)"
[targets.windows-arm64]
rust_target = "aarch64-pc-windows-msvc"
platform_name = "windows-arm64"
archive_format = "zip"
docker_required = true
native_build = false
enabled = false
description = "Windows ARM64"
binary_extension = ".exe"
# Docker configuration for cross-compilation
[docker]
dockerfile = "Dockerfile.cross"
image_tag = "nushell-plugins-cross:latest"
cache_from = ["nushell-plugins-cross:cache"]
build_args = []
# Platform-specific configurations
[platform_configs.linux]
package_formats = ["tar.gz", "deb", "rpm"]
install_prefix = "/usr/local/bin"
config_dir = "/etc/nushell-plugins"
[platform_configs.darwin]
package_formats = ["tar.gz", "dmg"]
install_prefix = "/usr/local/bin"
config_dir = "/usr/local/etc/nushell-plugins"
[platform_configs.windows]
package_formats = ["zip", "msi"]
install_prefix = "C:\\Program Files\\nushell-plugins"
config_dir = "C:\\ProgramData\\nushell-plugins"
# Build optimization settings
[optimization]
# Enable link-time optimization for release builds
lto = true
# Code generation units for parallel compilation
codegen_units = 1
# Panic strategy (abort for smaller binaries)
panic_strategy = "abort"
# Strip debug symbols
strip = "symbols"
# Environment variables for cross-compilation
[environment]
# Common variables for all builds
RUST_BACKTRACE = "1"
CARGO_INCREMENTAL = "0"
# Target-specific environment variables
[environment.linux-arm64]
CC = "aarch64-linux-gnu-gcc"
CXX = "aarch64-linux-gnu-g++"
AR = "aarch64-linux-gnu-ar"
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER = "aarch64-linux-gnu-gcc"
[environment.windows-amd64]
# Windows-specific environment setup would go here
# Usually handled by the Docker container
# Feature flags for conditional compilation
[features]
# Default features to enable for all builds
default = ["clipboard", "image", "networking"]
# Optional features that can be disabled for smaller binaries
optional = ["crypto", "database", "desktop-notifications"]
# Platform-specific features
[features.linux]
available = ["clipboard", "image", "networking", "desktop-notifications"]
[features.darwin]
available = ["clipboard", "image", "networking", "desktop-notifications"]
[features.windows]
available = ["clipboard", "image", "networking"]
# Validation rules for targets
[validation]
# Minimum required Rust version
min_rust_version = "1.70.0"
# Required tools for native compilation
required_tools = ["cargo", "rustc"]
# Required tools for Docker compilation
docker_tools = ["docker"]
# Testing configuration
[testing]
# Run tests for these targets during CI
ci_targets = ["linux-amd64", "darwin-amd64", "darwin-arm64"]
# Quick test targets for development
dev_targets = ["linux-amd64"]
# Full integration test targets
integration_targets = ["linux-amd64", "darwin-arm64"]