From 54c613acd7a7f051e65d73a1318346cb4f5a234a Mon Sep 17 00:00:00 2001
From: Zixian Cai
Some command line examples:
Create a 32-bit build for Windows with FreeType2 in
-C:\freetype-i586:
-bash configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32
C:\freetype-i586:
+bash configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32
Create a debug build with the server JVM and DTrace
-enabled:
-bash configure --enable-debug --with-jvm-variants=server --enable-dtrace
bash configure --enable-debug --with-jvm-variants=server --enable-dtrace
Here follows some of the most common and important
@@ -1331,14 +1331,12 @@ Package Search and search for the libasound2 and
libasound2-dev packages for your target system.
Download them to /tmp.
Install the libraries into the cross-compilation toolchain. For -instance:
cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc
dpkg-deb -x /tmp/libasound2_1.0.25-4_armhf.deb .
-dpkg-deb -x /tmp/libasound2-dev_1.0.25-4_armhf.deb .
-configure, you can
-point it out by --with-alsa.If alsa is not properly detected by configure, you
+can point it out by --with-alsa.
You will need X11 libraries suitable for your target system. @@ -1372,21 +1370,18 @@ Package Search, search for the following packages for your
Install the libraries into the cross-compilation toolchain. For instance:
- cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc/usr
- mkdir X11R6
- cd X11R6
- for deb in /tmp/target-x11/*.deb ; do dpkg-deb -x $deb . ; done
- mv usr/* .
- cd lib
- cp arm-linux-gnueabihf/* .
- ```
-
-You can ignore the following messages. These libraries are not needed to
-successfully complete a full JDK build.
-cp: cannot stat
-arm-linux-gnueabihf/libICE.so': No such file or directory cp: cannot statarm-linux-gnueabihf/libSM.so':
-No such file or directory cp: cannot stat
-`arm-linux-gnueabihf/libXt.so': No such file or directory ```
cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc/usr
+mkdir X11R6
+cd X11R6
+for deb in /tmp/target-x11/*.deb ; do dpkg-deb -x $deb . ; done
+mv usr/* .
+cd lib
+cp arm-linux-gnueabihf/* .
+You can ignore the following messages. These libraries are not needed +to successfully complete a full JDK build.
+cp: cannot stat `arm-linux-gnueabihf/libICE.so': No such file or directory
+cp: cannot stat `arm-linux-gnueabihf/libSM.so': No such file or directory
+cp: cannot stat `arm-linux-gnueabihf/libXt.so': No such file or directory
If the X11 libraries are not properly detected by
configure, you can point them out by
--with-x.
For example, cross-compiling to AArch64 from x86_64 could be done like this:
Install cross-compiler on the build system:
-apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
Install cross-compiler on the build system:
+apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnuCreate chroot on the build system, configuring it for
-target system:
-sudo debootstrap \ --arch=arm64 \ --verbose \ --include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev,libffi-dev \ --resolve-deps \ buster \ ~/sysroot-arm64 \ http://httpredir.debian.org/debian/ # If the target architecture is `riscv64`, # the path should be `debian-ports` instead of `debian`.
sudo debootstrap \
+ --arch=arm64 \
+ --verbose \
+ --include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev,libffi-dev \
+ --resolve-deps \
+ buster \
+ ~/sysroot-arm64 \
+ http://httpredir.debian.org/debian/
+# If the target architecture is `riscv64`,
+# the path should be `debian-ports` instead of `debian`.
Make sure the symlinks inside the newly created chroot point to
-proper locations:
-sudo chroot ~/sysroot-arm64 symlinks -cr .
sudo chroot ~/sysroot-arm64 symlinks -cr .
Configure and build with newly created chroot as
-sysroot/toolchain-path:
-sh ./configure \ --openjdk-target=aarch64-linux-gnu \ --with-sysroot=~/sysroot-arm64 make images ls build/linux-aarch64-server-release/
sh ./configure \
+ --openjdk-target=aarch64-linux-gnu \
+ --with-sysroot=~/sysroot-arm64
+make images
+ls build/linux-aarch64-server-release/
The build does not create new files in that chroot, so it can be reused for multiple builds without additional cleanup.
@@ -1566,12 +1574,27 @@ libraries required by OpenJDK complicate the building process. The placeholder<toolchain-installed-path> shown below is
the path where you want to install the toolchain.
Install the RISC-V GNU compiler toolchain:
-git clone --recursive https://github.com/riscv-collab/riscv-gnu-toolchain cd riscv-gnu-toolchain ./configure --prefix=<toolchain-installed-path> make linux export PATH=<toolchain-installed-path>/bin:$PATH
Cross-compile all the required libraries:
-# An example for libffi git clone https://github.com/libffi/libffi cd libffi ./configure --host=riscv64-unknown-linux-gnu --prefix=<toolchain-installed-path>/sysroot/usr make make install
Configure and build OpenJDK:
-bash configure \ --with-boot-jdk=$BOOT_JDK \ --openjdk-target=riscv64-linux-gnu \ --with-sysroot=<toolchain-installed-path>/sysroot \ --with-toolchain-path=<toolchain-installed-path>/bin \ --with-extra-path=<toolchain-installed-path>/bin make images
Install the RISC-V GNU compiler toolchain:
+git clone --recursive https://github.com/riscv-collab/riscv-gnu-toolchain
+cd riscv-gnu-toolchain
+./configure --prefix=<toolchain-installed-path>
+make linux
+export PATH=<toolchain-installed-path>/bin:$PATHCross-compile all the required libraries:
+# An example for libffi
+git clone https://github.com/libffi/libffi
+cd libffi
+./configure --host=riscv64-unknown-linux-gnu --prefix=<toolchain-installed-path>/sysroot/usr
+make
+make installConfigure and build OpenJDK:
+bash configure \
+ --with-boot-jdk=$BOOT_JDK \
+ --openjdk-target=riscv64-linux-gnu \
+ --with-sysroot=<toolchain-installed-path>/sysroot \
+ --with-toolchain-path=<toolchain-installed-path>/bin \
+ --with-extra-path=<toolchain-installed-path>/bin
+make imagesJust like it's possible to cross-compile for a different CPU, it's
diff --git a/doc/building.md b/doc/building.md
index 415454cf6c36..ac79cb314b6b 100644
--- a/doc/building.md
+++ b/doc/building.md
@@ -626,11 +626,13 @@ automatically, it will exit and inform you about the problem.
Some command line examples:
* Create a 32-bit build for Windows with FreeType2 in `C:\freetype-i586`:
+
```
bash configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32
```
* Create a debug build with the `server` JVM and DTrace enabled:
+
```
bash configure --enable-debug --with-jvm-variants=server --enable-dtrace
```
@@ -1100,11 +1102,12 @@ Note that alsa is needed even if you only want to build a headless JDK.
system. Download them to /tmp.
* Install the libraries into the cross-compilation toolchain. For instance:
-```
-cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc
-dpkg-deb -x /tmp/libasound2_1.0.25-4_armhf.deb .
-dpkg-deb -x /tmp/libasound2-dev_1.0.25-4_armhf.deb .
-```
+
+ ```
+ cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc
+ dpkg-deb -x /tmp/libasound2_1.0.25-4_armhf.deb .
+ dpkg-deb -x /tmp/libasound2-dev_1.0.25-4_armhf.deb .
+ ```
* If alsa is not properly detected by `configure`, you can point it out by
`--with-alsa`.
@@ -1140,6 +1143,7 @@ Note that X11 is needed even if you only want to build a headless JDK.
* libxext-dev
* Install the libraries into the cross-compilation toolchain. For instance:
+
```
cd /tools/gcc-linaro-arm-linux-gnueabihf-raspbian-2012.09-20120921_linux/arm-linux-gnueabihf/libc/usr
mkdir X11R6
@@ -1173,11 +1177,13 @@ for foreign architectures with native compilation speed.
For example, cross-compiling to AArch64 from x86_64 could be done like this:
* Install cross-compiler on the *build* system:
+
```
apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
```
* Create chroot on the *build* system, configuring it for *target* system:
+
```
sudo debootstrap \
--arch=arm64 \
@@ -1192,11 +1198,13 @@ For example, cross-compiling to AArch64 from x86_64 could be done like this:
```
* Make sure the symlinks inside the newly created chroot point to proper locations:
+
```
sudo chroot ~/sysroot-arm64 symlinks -cr .
```
* Configure and build with newly created chroot as sysroot/toolchain-path:
+
```
sh ./configure \
--openjdk-target=aarch64-linux-gnu \
@@ -1255,6 +1263,7 @@ complicate the building process. The placeholder `