This document explains how to build ECUxPlot installers and packages for different platforms.
For installation instructions, see INSTALL.md.
make help # Show available targets
make installers # Build platform-appropriate installers (recommended)
make all # Build everything for current platform- Java Development Kit (JDK) 17 or later
- make (GNU Make)
- ant (Apache Ant)
- jq (jqlang JSON Query)
- python (Python 3 or later)
- python yaml (Cygwin
python-yaml, debianapt get install python3-yaml, orpip3 install pyyaml) - cygwin (if on Windows)
- Xcode Command Line Tools (for
hdiutil)
- NSIS (Nullsoft Scriptable Install System)
- Launch4j (Cross-platform Java executable wrapper)
- MinGW-w64
| Target | Description | Platforms | Output |
|---|---|---|---|
all |
Build JAR files and core application | All | Platform-specific |
archive |
Create compressed archive | All | build/$(TARGET).tar.gz |
installers |
Build platform-appropriate installer | All | Auto-detects platform |
dmg |
Create macOS DMG installer | macOS only | build/$(TARGET).dmg |
exes |
Create Windows executables | Linux/Cygwin only | build/CYGWIN_NT/*.exe |
ECUxPlot-$(VERSION)-MacOS.zip- ZIP archive (bare app, requires system Java)ECUxPlot-$(VERSION).dmg- DMG installer (bundled app with Java runtime)
ECUxPlot-$(VERSION)-setup.exe- NSIS installerCYGWIN_NT/ECUxPlot.exe- Main executableCYGWIN_NT/mapdump.exe- Map dump utility
ECUxPlot-$(VERSION).tar.gz- Archive package (Unix/Linux/macOS)
For detailed installation instructions, see INSTALL.md.
- Open the DMG file
- Drag ECUxPlot.app to the Applications folder
- Eject the DMG
- Extract the ZIP file
- Drag ECUxPlot.app to Applications folder
- Run the ECUxPlot-$(VERSION)-setup.exe file
- Follow the installation wizard
- Extract the tar.gz file
- Run
./ECUxPlot.sh(Unix/Linux/macOS)
- Downloads JRE automatically during build
- No system Java required
- Uses system JDK (no download needed)
- Requires Java 17+ installed
If you see errors like "DMG creation only supported on macOS", you're trying to run a platform-specific target on the wrong platform. Use make installers instead.
- macOS: Install Xcode Command Line Tools:
xcode-select --install - Linux: Install build tools:
sudo apt-get install build-essential - Windows: Install NSIS and Launch4j
ECUxPlot uses jpackage for macOS app bundle creation, which provides better compatibility. If you encounter issues:
- Ensure Xcode Command Line Tools are installed
- Check available disk space
- Verify Java 17+ is installed and accessible
- JAR Creation: Ant builds the main application JAR files
- Runtime Setup: Windows downloads JRE, macOS/Linux use system JDK
- Package Creation: Platform-specific tools create installers
- Build and Release Workflow: Runs on every push to any branch and latest, builds all platforms using
build-matrix.yml→build-common.ymlwithinstallerstarget - Release Workflow: Runs on tags, creates full installers using
build-matrix.yml→build-common.yml - Build Common: Reusable workflow for single-platform builds + tests
- Build Matrix: Shared multi-platform build orchestration
- Create Release: Shared workflow for consistent release creation across build and release workflows
- Caching: Windows runtime directories cached between runs
The build process creates different artifacts depending on the platform and build type:
Note: GitHub Actions preserves the directory structure when uploading artifacts. Files uploaded with build/ prefix are stored in build/ subdirectories, while files uploaded from root are stored directly in the artifact root. Simple installer names are created in the root level for easy access.
GitHub Actions Artifacts (30-day retention):
├── macos-builds/
│ ├── build/ # Latest files
│ │ ├── ECUxPlot-latest.dmg # Latest DMG installer
│ │ └── ECUxPlot-latest-MacOS.zip # Latest ZIP archive
│ └── ECUxPlot.dmg # Simple DMG installer (root level)
└── linux-windows-builds/
├── build/ # Latest files
│ ├── ECUxPlot-latest.tar.gz # Latest Linux archive
│ └── ECUxPlot-latest-setup.exe # Latest Windows installer
├── ECUxPlot.jar # Simple JAR file
├── mapdump.jar # Map dump utility
└── ECUxPlot-setup.exe # Simple Windows installer (root level)
GitHub Release (latest):
├── ECUxPlot.dmg # Simple macOS installer
├── ECUxPlot-setup.exe # Simple Windows installer
├── ECUxPlot-latest.dmg # Latest macOS installer
├── ECUxPlot-latest.tar.gz # Latest Linux archive
├── ECUxPlot-latest-setup.exe # Latest Windows installer
├── ECUxPlot-latest-MacOS.zip # Latest macOS ZIP
├── ECUxPlot-latest.jar # Latest JAR file
├── ECUxPlot.jar # Simple JAR file
└── mapdump.jar # Map dump utility
GitHub Actions Artifacts (90-day retention):
├── macos-builds/
│ ├── build/ # Versioned files
│ │ ├── ECUxPlot-*.dmg # Versioned DMG installer
│ │ └── ECUxPlot-*-MacOS.zip # Versioned ZIP archive
│ └── ECUxPlot.dmg # Simple DMG installer (root level)
└── linux-windows-builds/
├── build/ # Versioned files
│ ├── ECUxPlot-*.tar.gz # Versioned Linux archive
│ └── ECUxPlot-*-setup.exe # Versioned Windows installer
├── ECUxPlot.jar # Simple JAR file
├── mapdump.jar # Map dump utility
└── ECUxPlot-setup.exe # Simple Windows installer (root level)
GitHub Release (tagged version):
├── ECUxPlot.dmg # Simple macOS installer
├── ECUxPlot-setup.exe # Simple Windows installer
├── ECUxPlot-*.dmg # Versioned macOS installer
├── ECUxPlot-*.tar.gz # Versioned Linux archive
├── ECUxPlot-*-setup.exe # Versioned Windows installer
└── ECUxPlot-*-MacOS.zip # Versioned macOS ZIP
build/
├── Darwin/ # macOS builds
│ ├── ECUxPlot.app/ # Full app bundle (jpackage)
│ ├── ECUxPlot-bare.app/ # Bare app bundle (no runtime)
│ ├── *.zip # ZIP archives
│ └── *.dmg # DMG installers
├── CYGWIN_NT/ # Windows builds
│ ├── ECUxPlot.exe # Main executable
│ └── mapdump.exe # Map dump utility
├── *.tar.gz # Cross-platform archives
└── *.jar # JAR files
make clean # Clean build artifacts
make vars # Show build variables
make tag VER=1.2.3 # Create git tag# On macOS
make dmg # Create DMG only
make archive # Create tar.gz archive
# On Linux
make exes # Create Windows executables
make installers # Create Windows installersFor more detailed information, see the source code and build scripts in the scripts/ directory.