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:
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:
When CONFIG_SHARED_SOURCES=y: Sources are stored directly in $CONFIG_SRC_DIR and shared across builds: ~/src/
├── VTK-9.0.1/
├── InsightToolkit-5.1.1/
├── dcmtk-3.6.5/ # Timestamped (patched)
├── openjpeg-2.3.1/ # Timestamped (patched)
├── libiconv-1.15/
├── libpng-1.6.37/
├── jpeg-9d/
├── tiff-4.0.10/
└── ...
Patched packages (DCMTK, OpenJPEG, Miele-LXIV app) are always timestamped to avoid conflicts.
When CONFIG_SHARED_SOURCES=n: All sources are placed in a timestamped subdirectory: ~/src/
└── miele-easy-20260304_1425/
├── VTK-9.0.1/
├── InsightToolkit-5.1.1/
├── dcmtk-3.6.5/
├── openjpeg-2.3.1/
└── ...
This allows multiple independent builds with different version sets.
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
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
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.
Symbolic Links to Binaries
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
└── ...
Creating Symlinks
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
Related Pages