Custom build of OpenJDK providing Java support for ev3dev on the following devices:
- LEGO Mindstorms EV3, featuring a ARM926EJ-S CPU
Builds for older boards should work on newer boards, the performance might just be a bit lower.
OpenJDK version | Platform | VM | Status |
---|---|---|---|
OpenJDK 9 | EV3 | C1 JIT | |
OpenJDK 10 | EV3 | C1 JIT | |
OpenJDK 11 | EV3 | C1 JIT | |
OpenJDK 12 (dev) | EV3 | C1 JIT |
The build process produces these files:
Name | File name | Summary | Where it runs | Who is it for | What is it useful for |
---|---|---|---|---|---|
JRI | jri-ev3.zip |
Minimal runtime | Brick | Java developer | Running Java programs on ev3dev. |
JDK | jdk-ev3.zip |
Full JDK | Brick | ev3dev power user | Compiling Java programs directly on the brick. |
JMODs | jmods-ev3.zip |
Runtime precursor | Developer PC | both | Creating runtime images with more Java modules. |
JRI stands for "Java Runtime Image". The term itself is not specific to this project,
it is equivalent to Modular Run-Time Image.
To see which modules are included in our case, take a look at the jlink commandline in scripts/zip.sh
.
- Clone this repository.
- Install Docker for your operating system.
- Build the base cross-compilation image:
sudo docker build -t ev3dev-lang-java:jdk-stretch -f system/Dockerfile.armel system
- Build the image with OpenJDK cross-compilation scripts:
sudo docker build -t ev3dev-lang-java:jdk-build -f scripts/Dockerfile scripts
Next steps depend on whether you want to navigate the build yourself, or if you want the build to run automatically.
- Run the newly prepared container. You have to mount a host directory to the the
/build
directory in the container, otherwise the build would get discarded. The final build needs at least 6.5 GB of free space (in the build directory).
sudo docker run --rm -it -v $BUILD_DIRECTORY:/build ev3dev-lang-java:jdk-build
Please change the $BUILD_DIRECTORY
to a valid path.
- Select the OpenJDK version and VM you want to cross-compile (select only one for each variable):
export JDKVER=9 # OpenJDK 9
export JDKVER=10 # OpenJDK 10
export JDKVER=11 # OpenJDK 11
export JDKVER=12 # OpenJDK 12
export JDKVM=zero # Use Zero interpreter
export JDKVM=client # Use ARM32 JIT
export JDKPLATFORM=ev3 # Use EV3 build flags
- Before we can start the build process, Boot JDK must be downloaded:
./prepare.sh
- Now we can download the OpenJDK sources:
./fetch.sh
- The OpenJDK source tree should be ready. Now you can start the cross-build itself:
./build.sh
- Create the zipped images:
./zip.sh
- If the build was successful, JDK packages were created in
/build/jri-ev3.tar.gz
,/build/jdk-ev3.tar.gz
and/build/jmods.tar.gz
. If you have mounted/build
, you can access the files from the host.
- Run the newly prepared container. You have to mount a host directory to the the
/build
directory in the container, otherwise the build would get discarded. The final build needs at least 6.5 GB of free space (in the build directory).
sudo docker run --rm -v $BUILD_DIRECTORY:/build -e JDKVER='X' -e JDKVM='Y' -e JDKPLATFORM='Z' -e AUTOBUILD='yes' ev3dev-lang-java:jdk-build
For values of X
, Y
and Z
see above. Please change the $BUILD_DIRECTORY
to a valid path.
- If the build was successful, JDK packages were created in
$BUILD_DIRECTORY/jri-ev3.tar.gz
,$BUILD_DIRECTORY/jdk-ev3.tar.gz
and$BUILD_DIRECTORY/jmods.tar.gz
.
LeJOS is not supported. To create a build, it is needed to build Java dependencies for the old LEGO-provided rootfs. Also, the rootfs build compiler is needed for building OpenJDK itself. linux-devkit + CodeSourcery GCC could be used for the cross-compilation.