Skip to main content
Miele-LXIV Easy uses a well-organized directory structure to separate source code, build artifacts, and installed libraries. Understanding this structure is essential for managing builds and troubleshooting issues.

Directory Hierarchy Overview

The build system uses four main directory locations:

EASY_HOME

The project root containing build scripts and configuration files

SRC

Source code downloads for all third-party libraries

BLD

Temporary build directory for compilation artifacts

BIN

Final installation directory for compiled libraries

EASY_HOME

EASY_HOME is the root directory of the Miele-LXIV Easy build system. This is where you cloned the repository.

Structure

EASY_HOME/
├── build.sh              # Main build script
├── reconfigure.sh        # Configuration menu launcher
├── seed.sh               # Initial configuration setup
├── Kconfig-miele         # Configuration options definition
├── seed.conf             # Generated: stores user configuration
├── steps.conf            # Generated: stores enabled build steps
├── version-set-*.conf    # Version set configurations
├── patch/                # Patches for DCMTK, OpenJPEG, etc.
├── log/                  # Build output logs
└── README.md             # Documentation

Key Files

  • Kconfig-miele - Defines all available configuration options (see Kconfig-miele:1)
  • seed.conf - Created on first run, stores directory paths and version set selection
  • steps.conf - Generated by reconfigure.sh, contains enabled build steps
  • version-set-*.conf - Predefined library version configurations
  • build.sh - Main orchestrator that downloads, configures, builds, and installs (see build.sh:1)
  • reconfigure.sh - Launches the Kconfig menu interface
  • seed.sh - Creates initial seed.conf with default settings
Contains patch files applied to specific libraries:
  • dcmtk-*_miele-easy.patch - DCMTK modifications
  • openjpeg-*_miele-easy.patch - OpenJPEG modifications
Applied during the download phase when patching is enabled (see build.sh:533-538 and build.sh:643-651).

Environment Variable

The build script sets EASY_HOME automatically:
build.sh
EASY_HOME=$(pwd)
This allows scripts to reference the project root regardless of working directory (see build.sh:120).

SRC - Source Directory

The SRC directory stores downloaded source code for all third-party libraries.

Configuration

The source directory location is configured in seed.conf:
CONFIG_SRC_DIR=~/src
CONFIG_SHARED_SOURCES=y

Shared vs. Timestamped Sources

The build system supports two source directory modes:

Directory Resolution Logic

From build.sh:58-63:
if [ $CONFIG_SHARED_SOURCES ] ; then
    eval SRC=$CONFIG_SRC_DIR
else
    eval SRC=$CONFIG_SRC_DIR/$TIMESTAMP
fi
eval SRC_P=$CONFIG_SRC_DIR/$TIMESTAMP  # Patched packages

Source Subdirectories

Each library gets its own subdirectory (see build.sh:65-79):
SRC_DCMTK=$SRC_P/dcmtk-3.6.5      # Patched
SRC_VTK=$SRC/VTK-9.0.1
SRC_ITK=$SRC/InsightToolkit-5.1.1
SRC_JPEG=$SRC/jpeg-9d
SRC_PNG=$SRC/libpng-1.6.37
SRC_TIFF=$SRC/tiff-4.0.10
SRC_OPENJPG=$SRC_P/openjpeg-2.3.1  # Patched
SRC_APP=$SRC_P/miele-lxiv-8.4.62   # Patched
# ... etc

BLD - Build Directory

The BLD directory contains temporary build artifacts created during compilation. This directory can be safely deleted after successful builds to reclaim disk space.

Configuration

seed.conf
CONFIG_BLD_DIR=~/bld

Structure

Builds are always timestamped to allow parallel builds:
~/bld/
└── miele-easy-20260304_1425/
    ├── VTK-9.0.1/
    │   ├── CMakeCache.txt
    │   ├── CMakeFiles/
    │   ├── Makefile
    │   └── ...
    ├── InsightToolkit-5.1.1/
    │   └── ...
    ├── dcmtk-3.6.5/
    │   └── ...
    └── libjpeg-9d/
        └── ...

Build Directory Variables

From build.sh:81-95:
eval BLD=$CONFIG_BLD_DIR/$TIMESTAMP

BLD_DCMTK=$BLD/dcmtk-3.6.5
BLD_VTK=$BLD/VTK-9.0.1
BLD_ITK=$BLD/InsightToolkit-5.1.1
BLD_JPEG=$BLD/jpeg-9d
# ... etc
Build directories are created automatically by the build script when needed using mkdir -p $BLD_{LIBRARY}.

Reclaiming Disk Space

After successful installation, you can delete the build directory:
rm -rf ~/bld/miele-easy-20260304_1425
This is mentioned in the README (see README.md:134).

BIN - Installation Directory

The BIN directory contains the final compiled libraries, headers, and other installed files referenced by the Miele-LXIV Xcode project.

Configuration

seed.conf
CONFIG_BIN_DIR=~/bin

Structure

Installations are timestamped to match the build:
~/bin/
└── miele-easy-20260304_1425/
    ├── VTK-9.0.1/
    │   ├── include/
    │   │   └── vtk-9.0/
    │   ├── lib/
    │   │   ├── libvtkCommonCore-9.0.a
    │   │   ├── libvtkRenderingCore-9.0.a
    │   │   ├── libVTK.a              # Collapsed library
    │   │   └── cmake/
    │   └── share/
    ├── InsightToolkit-5.1.1/
    │   ├── include/
    │   │   └── ITK-5.1/
    │   ├── lib/
    │   │   ├── libITKCommon-5.1.a
    │   │   ├── libITK.a              # Collapsed library
    │   │   └── cmake/
    │   └── share/
    ├── dcmtk-3.6.5/
    │   ├── include/
    │   │   └── dcmtk/
    │   ├── lib/
    │   │   ├── libdcmdata.a
    │   │   ├── libdcmnet.a
    │   │   ├── libDCMTK.a            # Collapsed library
    │   │   └── cmake/
    │   └── bin/
    ├── libjpeg-9d/
    │   ├── include/
    │   └── lib/
    └── ...

Installation Directory Variables

From build.sh:97-111:
eval BIN=$CONFIG_BIN_DIR/$TIMESTAMP

BIN_DCMTK=$BIN/dcmtk-3.6.5
BIN_VTK=$BIN/VTK-9.0.1
BIN_ITK=$BIN/InsightToolkit-5.1.1
BIN_JPEG=$BIN/jpeg-9d
# ... etc

Collapsed Libraries

Some toolkits produce many individual static libraries. The build system can combine them into single libraries for easier linking:
  • VTK: libVTK.a (see build.sh:449-459)
  • ITK: libITK.a (see build.sh:510-520)
  • DCMTK: libDCMTK.a (see build.sh:620-630)
This is controlled by the COLLAPSE_* configuration options.
The Miele-LXIV Xcode project expects libraries in a Binaries/ directory within the app source. Instead of copying, symbolic links connect the BIN directory to the app.

Location

$SRC_APP/Binaries/
├── VTK -> ~/bin/miele-easy-20260304_1425/VTK-9.0.1
├── ITK -> ~/bin/miele-easy-20260304_1425/InsightToolkit-5.1.1
├── DCMTK -> ~/bin/miele-easy-20260304_1425/dcmtk-3.6.5
├── libjpeg -> ~/bin/miele-easy-20260304_1425/libjpeg-9d
├── libpng -> ~/bin/miele-easy-20260304_1425/libpng-1.6.37
├── libtiff -> ~/bin/miele-easy-20260304_1425/tiff-4.0.10
└── ...
From build.sh:883-899:
if [ $STEP_CREATE_SYMLINKS ] ; then
    echo "=== Create symbolic links in $BINARIES"
    if [ $STEP_CREATE_SYMLINKS_VTK ] ;  then ln -s $BIN_VTK    $BINARIES/VTK ; fi
    if [ $STEP_CREATE_SYMLINKS_ITK ] ;  then ln -s $BIN_ITK    $BINARIES/ITK ; fi
    if [ $STEP_CREATE_SYMLINKS_DCMTK ]; then ln -s $BIN_DCMTK  $BINARIES/DCMTK ; fi
    # ... etc
fi
This is configured in STEP 4 of the build process using the Create Symbolic links option.

Directory Path Examples

Here’s a complete example showing how directories are organized for a typical build:
# Configuration in seed.conf
CONFIG_SRC_DIR=~/Projects/src
CONFIG_BLD_DIR=~/Projects/bld
CONFIG_BIN_DIR=~/Projects/bin
CONFIG_SHARED_SOURCES=y
TIMESTAMP=miele-easy-20260304_1425

# EASY_HOME
~/Projects/miele-lxiv-easy/
├── build.sh
├── seed.conf
└── ...

# Source directory (shared)
~/Projects/src/
├── VTK-9.0.1/                    # Shared
├── InsightToolkit-5.1.1/         # Shared
├── miele-easy-20260304_1425/     # Timestamped (patched)
│   ├── dcmtk-3.6.5/
│   ├── openjpeg-2.3.1/
│   └── miele-lxiv-8.4.62/
├── libjpeg-9d/                   # Shared
└── ...

# Build directory (timestamped)
~/Projects/bld/miele-easy-20260304_1425/
├── VTK-9.0.1/
├── InsightToolkit-5.1.1/
├── dcmtk-3.6.5/
└── ...

# Installation directory (timestamped)
~/Projects/bin/miele-easy-20260304_1425/
├── VTK-9.0.1/
│   ├── include/
│   └── lib/
├── InsightToolkit-5.1.1/
│   ├── include/
│   └── lib/
└── ...

# Application binaries (symlinked)
~/Projects/src/miele-easy-20260304_1425/miele-lxiv-8.4.62/Binaries/
├── VTK -> ~/Projects/bin/miele-easy-20260304_1425/VTK-9.0.1
├── ITK -> ~/Projects/bin/miele-easy-20260304_1425/InsightToolkit-5.1.1
└── ...

Timestamp Generation

The timestamp is generated once during the initial configuration (see build.sh:25):
if [ ! -f seed.conf ]; then
    ./seed.sh
    
    if [ -f seed.conf ]; then
        echo "TIMESTAMP=$APP-$(date +%Y%m%d_%H%M)" >> seed.conf
    fi
fi
Format: miele-easy-YYYYMMDD_HHMM Example: miele-easy-20260304_1425

Environment Variables Summary

The build script displays the active directories (see build.sh:113-115):
echo "SRC: $SRC"
echo "BLD: $BLD"
echo "BIN: $BIN"
Example output:
SRC: /Users/username/src
BLD: /Users/username/bld/miele-easy-20260304_1425
BIN: /Users/username/bin/miele-easy-20260304_1425

Managing Multiple Builds

The timestamped directory structure allows maintaining multiple independent builds:
~/bin/
├── miele-easy-20260304_1425/  # Version 8.8 build
├── miele-easy-20260305_0920/  # Testing newer libraries
└── miele-easy-20260306_1530/  # Different version set
Each build is completely isolated with its own:
  • Build artifacts in BLD
  • Installed libraries in BIN
  • Timestamped patched sources
Keep successful builds in BIN and delete their BLD directories to save space while preserving working installations.

Directory Cleanup

Safe to Delete

After successful installation, the entire build directory can be deleted:
rm -rf ~/bld/miele-easy-20260304_1425
This reclaims significant disk space (several GB) without affecting the installed libraries.
Previous timestamped installations can be removed once you’ve verified a new build works:
rm -rf ~/bin/miele-easy-20260304_1425
Remember to update symlinks if you delete the active installation.

Do Not Delete

Keep these directories:
  • SRC - Source downloads are reused and save download time
  • EASY_HOME - Contains build scripts and configuration
  • Active BIN - Currently symlinked installation needed by Xcode

Build docs developers (and LLMs) love