Skip to content

v0.3.0

Choose a tag to compare

@10d9e 10d9e released this 02 Dec 04:04
· 28 commits to main since this release
0c6e212

Release Notes - ZEVM v0.3.0

Release Date: December 2, 2025

Static Linking & Cross-Platform Build

ZEVM v0.3.0 is a production-focused release that ensures all binaries are statically linked, provides a comprehensive cross-platform build system, and verifies 100% feature parity with the Rust revm reference implementation. This release makes ZEVM ready for production deployment with fully self-contained binaries.

What's New

Static Linking Support

  • Static Library Linking: All binaries now statically link blst and mcl libraries
  • Self-Contained Binaries: No runtime dependency on dynamic libraries for crypto operations
  • Cross-Platform Static Linking: Proper static linking support for macOS, Linux, and Windows
  • C++ Standard Library Handling: Fixed Linux linking to use libstdc++ instead of libc++ for compatibility with statically linked mcl library

Cross-Platform Build System

  • Comprehensive Makefile: New Makefile with OS detection and automated dependency installation
  • Automated Dependency Management:
    • macOS: Homebrew integration for blst, mcl, secp256k1, and openssl
    • Linux: apt-get/dnf support for Ubuntu/Debian and Fedora/RHEL
    • Windows: vcpkg integration (prepared)
  • Source-Based Installation: Automatic cloning and building of blst and mcl from source if not found in standard locations
  • Dependency Verification: make check-deps target to verify all required dependencies before building
  • Build Targets: make build, make test, make install-deps, make clean for easy workflow

CI/CD Improvements

  • Simplified CI Workflow: CI now uses Makefile for consistent builds across platforms
  • Ubuntu CI Fixes: Resolved static linking issues on Linux CI runners
  • macOS CI Enhancements: Proper handling of dynamic library paths during testing
  • Cross-Platform Testing: Automated testing on both ubuntu-latest and macos-latest

Feature Parity Verification

  • Precompile Coverage: All 18 precompiles verified against Rust implementation
  • Gas Cost Verification: Gas costs match exactly with revm implementation
  • Input/Output Format: All precompiles produce identical output to revm
  • Error Handling: Error conditions and gas calculations verified

Build System Enhancements

  • Improved Library Detection: Better handling of library paths and include directories
  • Static Library Prioritization: Build system prefers static libraries when available
  • Platform-Specific Linking: Proper C++ standard library linking per platform (libc++ on macOS, libstdc++ on Linux)
  • Library Path Configuration: Support for custom library paths via build options

Documentation

  • Updated README: Enhanced build instructions and dependency information
  • Makefile Documentation: Inline comments explaining build targets and OS detection

Breaking Changes

None. This release is backward compatible with v0.2.0.

Migration Guide

Building from Source

The recommended way to build ZEVM is now using the Makefile:

# Install dependencies and build
make install-deps
make build

# Run tests
make test

# Clean build artifacts
make clean

Static Linking

All binaries are now statically linked by default. This means:

  • No need to install libblst.so or libmcl.so at runtime
  • Binaries are self-contained and portable
  • Slightly larger binary sizes due to static linking

Dependency Installation

The Makefile automatically installs dependencies:

macOS:

make install-deps  # Uses Homebrew

Linux (Ubuntu/Debian):

make install-deps  # Uses apt-get

Linux (Fedora/RHEL):

make install-deps  # Uses dnf

Dependencies are automatically built from source if not found in standard locations.

Technical Details

Static Linking Implementation

  • Uses addObjectFile() for static .a libraries on macOS
  • Uses addLibraryPath() and linkSystemLibrary() on Linux to avoid automatic linkLibCpp() calls
  • Explicit libstdc++ linking on Linux to match libmcl.a ABI requirements
  • Proper linker order: C++ standard library linked before static libraries on Linux

Build System Architecture

  • OS detection via uname -s
  • Conditional dependency installation based on detected OS
  • Automatic fallback to source-based installation
  • Library path detection and configuration

Performance

  • Static linking adds minimal overhead (~5-10% larger binaries)
  • Runtime performance unchanged
  • Improved deployment reliability (no missing library errors)

Known Issues

  • Windows static linking requires vcpkg setup (documented in CROSS_PLATFORM.md)
  • Some Linux distributions may require manual installation of build tools

Full Changelog: v0.2.0...v0.3.0