OpenJDK İnşa(Building) Part10
Bu makalede OpenJDK inşa(build) serisinin 10.bölümü işlenecektir.
OpenJDK serisinin 1.bölümü için Link
OpenJDK serisinin 2.bölümü için Link
OpenJDK serisinin 3.bölümü için Link
OpenJDK serisinin 4.bölümü için Link
OpenJDK serisinin 5.bölümü için Link
OpenJDK serisinin 6.bölümü için Link
OpenJDK serisinin 7.bölümü için Link
OpenJDK serisinin 8.bölümü için Link
OpenJDK serisinin 9.bölümü için Link
Native Kütüphaneler
Build sırasında sisteminizde,hedef sistem için harici native kütüphanelerin kopyalarına ihtiyacınız olacak.Bu kütüphaneleri ayarlarken,kütüphanelerin derleme sisteminin sürümünü yanlışlıkla değiştirmemeye dikkat edin.Çünkü bu hata derleme makinasını kullanılmaz hale getirebilir.
İşaret ettiğiniz/gösterdiğiniz kütüphanelerin(ALSA,X11,vb.) build yapılan platform için değil,hedef platform için olduğundan emin olun.
NOT: Native kütüphaneler konusuna bir önceki(9.bölüm) bölümde giriş yaptık. Bu bölümde kaldığımız yerden devam edeceğiz.
Qemu-deboostrap ile Sysroots Oluşturma ve Kullanma
İşletim sisteminiz tarafından sağlanan araçlarla(tools) yabancı mimariler için “sysroots(sistem kökleri)” oluşturabilirsiniz. Debian/Ubuntu sistemlerinde,hedef sisteme özgü native kitaplıklara sahip olan hedef sistem “chroot”’unu oluşturmak için “qemu-deboostrap” kullanabilirsiniz.
Bu aşamadan sonra,derleme bağımlılıklarını doğru bir şekilde elde etmek için chroot’u işaret ederek,derleme sisteminde cross-commpiler kullanabilirsiniz.
Örneğin x86_64'ten AArch64'e çapraz derleme şu şekilde yapılabilir:
- Derleme sistemine cross-compiler yükleyin:
apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
- Derleme sisteminde “chroot” oluşturun ve onu hedef sistem için yapılandırın:
sudo qemu-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 \
--resolve-deps \
buster \
~/sysroot-arm64 \
http://httpredir.debian.org/debian/
- Yeni oluşturulan “chroot” içindeki “symlinks”’in doğru konumları gösterdiğinden emin olun:
sudo chroot ~/sysroot-arm64 symlinks -cr
- Yeni oluşturulan “chroot” ile “sysroot/toolchain-path” olarak yapılandırın ve oluşturun:
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ sh ./configure \
--openjdk-target=aarch64-linux-gnu \
--with-sysroot=~/sysroot-arm64 \
--with-toolchain-path=~/sysroot-arm64 \
--with-freetype-lib=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/ \
--with-freetype-include=~/sysroot-arm64/usr/include/freetype2/ \
--x-libraries=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/
make images
ls build/linux-aarch64-server-release/
Derleme bu “chroot” içinde yeni dosyalar oluşturmaz,bu nedenle ek temizleme olmadan birden çok derleme için yeniden kullanılabilir.
Başarıyla cross-compile yaptığı bilinen mimariler şunlardır:
Ek mimariler Debian/Ubuntu tarafından desteklenebilir.
ARM/aarch64 İçin Derleme
Cross-compiler’da ilk akla gelen ARM’dır. Dolayısıyla bilinen çapraz derleme hedefi ARM CPU’dur.ARM için derlerken,ABI profilini ayarlamak faydalı olacaktır.Bir dizi önceden tanımlanmış ABI profili mevcuttur.
Bunlar: arm-vfp-sflt, arm-vfp-hflt, arm-sflt, armv5-vfp-sflt, armv6-vfp-hflt.
Bu profilleri aşağıda verilen komutla kullanabilirsiniz.
--with-abi-profile
Ancak “soft-float” ABI’lerin artık JDK tarafından düzgün şekilde desteklenmediğini unutmayın.
musl İçin İnşa
Farklı bir CPU için cross-compile’ın mümkün olduğu gibi,glibc tabanlı bir derleme sisteminde “musl libc” için cross-compile yapmak da mümkündür. Oldukça fazla hedef CPU mimarisine uygun bir “devkit” musl.cc sitesinden elde edilebilir. Gerekli paketleri sysroot’a kurduktan sonra,” — openjdk-target” ile inşa’yı konfigüre edin.
Örnek kullanım:
sh ./configure --with-jvm-variants=server \
--with-boot-jdk=$BOOT_JDK \
--with-build-jdk=$BUILD_JDK \
--openjdk-target=x86_64-unknown-linux-musl \
--with-devkit=$DEVKIT \
--with-sysroot=$SYSROOT
Daha sonra “make” komutunu çalıştırın.
Build’i Doğrulayın
Build,”build/linux-arm-normal-server-release” gibi bir dizinde son erecektir. Bu çıktı dizininin içinde,”images/jdk” hedef sisteminiz için yeni oluşturulmuş JDK’yı içerecektir. Yani derlenen JDK’yı bu dizin içinde bulacaksınız.
Bu dizinleri/klasörleri hedef sisteminize kopyalayın.
Ardından “images/jdk/bin/java -version” komutu ile yeni JDK versiyonunu kontrol edebilirsiniz.
-end of