Building JNode¶
Build Script¶
The main entry point is build.sh in the repository root:
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¶
x86_64 (64-bit) — Experimental¶
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:
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.