OpenJDK İnşa(Building) Part9
Bu makalede OpenJDK inşa(build) serisinin 9.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
Boot JDK ve Build JDK
Cross-compile(çapraz derleme) yaparken,hedef sistemde değil,derleme yapılan sistemde çalışan bir boot(önyükleme) JDK kullandığınızdan emin olun.
Build JDK,yine mevcut kaynaklardan oluşturulmuş,derleme sistemimizde çalışabilen güncel bir JDK’dır. Build JDK aynı şekilde hedef sistemde değil,derleme yapılan sistemde bulunması ve derlenecek JDK ile aynı sürümde olması gerekir.Yani elimizdeki JDK kaynak kodları derlemek için ihtiyacımız olan ve çalışan JDK’ya “Build JDK” diye adlandırılır. Build JDK aksine,Boot JDK ise mevcut üzerinde çalışılan sürümden daha eski olması gerekir. Örneğin JDK 9 inşa ediyorsak boot JDK için JDK 8 kullanılmalıdır.
Öte yandan build süreci yine build’in bir parçası olarak sizin için minimum bir Build JDK oluşturacaktır.Ancak derleme sürecini hızlandırmak için,önceden oluşturulmuş bir Build JDK’sına işaret edecek şekilde konfigüre etmek için aşağıda verilen komutu kullanabilirsiniz:
--with-build-jdk
Bu süreçte Build JDK mevcut kaynaklarla tam olarak eşleşmezse(örneğin aynı sürüm değilse),bu durumda build sürecinde bozulmalar olabileceğini unutmamamız gerekir. Dolayısıyla Boot ve Build JDK,titizlikle üzerinde durulması gereken bir süreç olduğunu belirtiyoruz.
Hedef Platformun Belirlenmesi
Cross-compile(çapraz derleme) yaparken hedef platform belirtilmelidir. Bunu yapmak aynı zamanda build yapıyı otomatik olarak cross-compile moduna dönüştürecektir.Bunu yapmanın en basit yolu aşağıda verilen komutu kullanmaktır.
--openjdk-target
Yukarıda verilen komut sizden hedef platformu belirten bir argüman vermenizi/belirtmenizi ister. Komutu şu şekilde kullanmamız gerekir:
--openjdk-target=arm-linux-gnueabihf
Veya:
--openjdk-target=aarch64-oe-linux
Şeklinde argüman olarak hedef platform belirlenebilir. Bu “autoconf” için “ — build”,” — host” ve “ — target” seçeneklerini otomatik olarak yarlayacaktır.
Aksi takdirde kafa karıştırıcı olabilir.
Toolchain Hususları
Hedef sistemde ve build sistemde(çalıştığınız makina) çalışabilen çıktılar üretmek için iki adet kopyadan oluşan toolchain’e ihtiyacınız olacak. Çünkü hedef sistem için ayrı bir çıktı,build yapılan sistem için ayrı bir çıktı üretilecek. Fakat Cross-compile’ın şu anda yalnızca GCC için desteklendiğini göz önünde bulundurmalısınız.Bu hususları takip ederseniz,”configure” Toolchain seçimini doğru şekilde ele alacaktır.Gcc ve Cross-compile ile ilgili daha geniş araştırmalar yaparak en etkin hususlar hakkında bilgi edinmek faydalı olacaktır.
Toolchain,normal Cross-compile yapılmayan durumlarda otomatik algılandığı gibi,aynı şekilde Cross-compile yapılan durumlarda da otomatik olarak algılayacaktır. Eğer böyle bir süreç istemiyorsanız veya otomatik algılama başarısız olursa,aşağıda verilen komutlar yardımıyla Toolchain içeren bir devkit belirtebilirsiniz.
--with-build-devkit
Veya “BUILD_CC” ve “BUILD_CXX” argümanları vererek belirtebilirsiniz.
Cross-compile araçları,başlıkları ve kütüphaneleri normal yolun dışında ayrı bir dizinde bulundurmak faydalıdır. Bu şekilde bir yapı oluşturup ilgili dizini “configure”’a işaret edebilirsiniz.Bunu aşağıdaki komutla sysroot’u ayarlayarak yapın:
--with-sysroot
Ve aynı zamanda Toolchain arama yolunu aşağıdaki komutla ekleyin:
--with-toochain-path
Eğer doğru bir yapı oluşturulmuş ise,tek bir dizini göstermek/işaret etmek için aşağıda verilen komutu kullanabilirsiniz:
--with-devkit
Native Kütüphaneler
Makale serisinin önceki bölümlerinde native kütüphaneler hakkında detaylı bilgiye yer verildi.
Dolayısıyla bu başlık altında native kütüphaneleri tek tek açıklamayacağım.
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.
ALSA
Hedef sisteminize uygun ALSA kütüphanelerine ihtiyacınız olacak.
Çoğu durumda Debian’ın pre-built kütüphaneleri iyi çalışacaktır.
Dolayısıyla bunları kullanabilirsiniz.
- Debian Paket Arama sayfasında hedef sisteminiz için “libasound2” ve “libasound2-dev” paketlerini aratın ve “/tmp” dizinine indirin.
-İndirdiğiniz kütüphaneleri Cross-compile toolchain’a yükleyin.
Komut:
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
- Eğer ALSA “configure” tarafından düzgün biçimde algılanmaz ise,aşağıda verilen komut yardımıyla ALSA’yı gösterebilirsiniz.
--with-alsa
X11
Hedef sisteminize uygun X11 kütüphanelerine ihtiyacınız olacak.
Çoğu durumda Debian’ın pre-built kütüphaneleri iyi çalışacaktır.
Dolayısıyla bunları kullanabilirsiniz.
- Debian Paket Arama sayfasında hedef sisteminiz için aşağıda verilen paketleri aratın ve “/tmp/target-x11” dizinine indirin.
libxi
libxi-dev
x11proto-core-dev
x11proto-input-dev
x11proto-kb-dev
x11proto-render-dev
x11proto-xext-dev
libice-dev
libxrender
libxrender-dev
libxrandr-dev
libsm-dev
libxt-dev
libx11
libx11-dev
libxtst
libxtst-dev
libxext
libxext-dev
- Kütüphaneleri Cross-compile toolchain’a yükleyin.
Komut:
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/*
Aşağıdaki mesajları göz ardı edebilirsiniz.Tam bir JDK build’i başarıyla tamamlamak için bu kütüphanelere gerek yoktur.
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
- Eğer X11 kütüphaneleri “configure” tarafından düzgün biçimde algılanmaz ise,aşağıda verilen komut yardımıyla X11'ı gösterebilirsiniz.
--with-x
Native kütüphaneler 10.bölümde devam edecektir.
-end of