Skip to content

Building JNode

Build Script

The main entry point is build.sh in the repository root:

sh build.sh <target> [options]

Main Targets

Target Description
assemble Compile Java, build native, create bootimage (no ISO)
cd-x86-lite Bootable x86 CD image (kernel, shell, core subsystems)
cd-x86_64-lite Bootable x86_64 CD image (experimental)
cd-x86 Same as cd-x86-lite, plus source tarball included on the CD
tests Run all JUnit + regression tests
clean Remove all build artifacts

Common Options

# Build with custom properties
sh build.sh -Dbuild.properties.file=my.props cd-x86-lite

# Verbose output
sh build.sh -verbose cd-x86-lite

# Skip tests during build
sh build.sh -Dskip.tests=true cd-x86-lite

Architecture-Specific Builds

x86 (32-bit) — Default

sh build.sh cd-x86-lite
# Output: all/build/cdroms/jnode-x86-lite.iso

x86_64 (64-bit) — Experimental

sh build.sh cd-x86_64-lite
# Output: all/build/cdroms/jnode-x86_64-lite.iso

Requires 64-bit capable CPU and QEMU -cpu qemu64 or similar.

Build Properties

Key properties in jnode.properties or via -D:

Property Default Description
jnode.bits 32 Target architecture: 32 or 64
jnode.memmgr.plugin.id org.jnode.vm.memmgr.def Memory manager; alternatives: org.jnode.vm.memmgr.mmtk.nogc (beta), org.jnode.vm.memmgr.mmtk.genrc (alpha), org.jnode.vm.memmgr.mmtk.ms
jnode.compiler default JIT compiler: L1A, L1B, or default
jnode.enable.jnasm true Use JNasm assembler
target.plugin.list default Plugin set for the jar packager: default or full

The bootimage itself always uses all/conf/system-plugin-list.xml.

Build Output Structure

all/build/
├── cdroms/
│   ├── jnode-x86-lite.iso
│   └── jnode-x86-lite.iso.vm-version    # Build identifier
├── upload/                              # Packaged for release
│   ├── jnode-x86-<ver>.iso.gz
│   └── jnode-x86-<ver>.iso.gz.vm-version
├── native/                              # Compiled .o / .so files
└── boot/                                # Bootimage, GRUB config

Build Identifier

Since commit c7f8352, each build gets a unique jnode-vm-ver property:

0.2.9-dev+gabc1234-dirty-20260811-143022

This appears in: - VmImpl (via java.vm.version) - Boot banner - vminfo command - Sidecar .vm-version file next to each ISO

See Build System Wiki for deep dive.