-OpenJDK İnşa(Building) Part1-

Kerim Fırat
4 min readNov 30, 2020

OpenJDK serisinde OpenJDK’ı inşaa etme,derleme,algoritma yapısı,kod kotarma ve bug fix,test vb. gibi çalışmaları gerçekleştireceğiz.

OpenJDK serisi makale ve video-canlı yayın olarak devam edecektir.
Bugün bu serinin ilk bölümünü gerçekleştireceğiz ve bu bölümde OpenJDK inşa etme ve derleme süreçlerini inceleyeceğiz.
Bu bölüm ve devamı bölümler için referans kaynak OpenJDK sitesinden alınmıştır. Bu yazı serisinde referans kaynak yanısıra,kendi tecrübelerim yer alacaktır.

NOT: OpenJDK çalışma serisi için Ubuntu ortamı baz alınarak anlatılmıştır.
Aksi belirtmedikçe bu durum geçerlidir. Ancak Windows ortamı için detaylara seri içinde yer verilecektir.

Hızlı başlamak isteyenler için talimatlar:

JDK’yı inşa etmeye hevesliyseniz,bu basit adımlar çoğu zaman işe yarar.
Ancak bu basit adımları uygulayabilmeniz için çalışma ortamınızda bazı araçların kurulu olduğunu varsayıyoruz. Bu araçlardan en önemlisi repo ortamının hazır olmasıdır. OpenJDK bu iş için “Mercurial” kullanır.
Eğer Windows ortamında çalışacaksanız o halde “Cygwin” ortamını hazır hale getirmeniz gerekir.

-Mercurial ve Kurulumu:
Mercurial bir sürüm kontrol sistemidir ve Oracle tarafından OpenJDK projesi için kullanılıyor.
Mercurial Python ile geliştirilmiştir ve bir komut satırı arayüzüne sahiptir.
Ayrıca Eclipse için plug-in sağlamaktadır.
Bu projeyle ilgili detaylı bilgi için aşağıdaki linke başvurabilirsiniz.
Mercurial Link

Ubuntu üzerinde Mercurial kurmak için:

sudo apt-get install mercurial

NOT: Bu makalede Mercurial kullanımından bahsedilmeyecektir.
Ancak Mercurial kullanım detayları için bir yazıya yer verilecektir.
Bu makalede Mercurial için yönlendirme linkleri yer alacaktır.
Türkçe içerik oluşturdukça bu linkler ilgili Türkçe makalelerime yönlendirilecektir.

Aşağıki komutlar hızlı bir başlangıç için yeterlidir.

  1. Kaynak kod çekme-edinme:
hg clone http://hg.openjdk.java.net/jdk/jdk

2.Kaynak kod yapılandırma:

bash configure

Eğer yapılandırma(configure) aşamasında hatalar alırsanız,bu hataların sebebi kaynak kod ile ilgili bağımlılıklar(toolchain,derleme araçları,harici kütüphaneler gibi bağımlılıklar) olacaktır.
Bu hatalar çoğu zaman çözümle ilgili çıktılar üretir.
Hata çıktılarını inceleyerek çözüm geliştirebilirsiniz. Ayrıca makale serimizde bağımlılıklar ve çözümleriyle ilgili başlıklara yer verilecektir.
Bağımlılıklarla ilgili talimatları uyguladıktan sonra tekrar “bash configure” komutunu çalıştırmanız gerekir.
Yani her seferinde bu komut(bash configure) tekrarlanmalıdır.

3. make komutunu çalıştır:

make images

4.Yeni oluşturulmuş JDK’yı doğrulamak için:

./build/*/images/jdk/bin/java -version

Doğrulamak için burada verdiğim path,sizin çalışma ortamı için hazırladığınız dizin adı olduğu varsayılmıştır. Gerektiği durumda dizin adını kendi çalışma dizin yapısına göre değiştirmeniz gerekir.
Bu komut sonucunda,üzerinde çalıştığınız java versiyonu çıktısı üretilecektir.

5.Basit testleri çalıştırmak:

make run-test-tier1

Yukarıda verilen hızlı başlama talimatlarının her bir başlığı makale serimizde ayrıca detaylıca anlatılacaktır(talimat başlıklarını makale serisi içinde bulacaksınız). Eğer bu süreçle ilgili hata aldıysanız ve/veya JDK inşa ve derleme ile alakalı geniş kapsamlı bilgi edinmek istiyorsanız lütfen makaleyi ve inşa ile ilgili diğer serileri okumaya devam edin.

OpenJDK Giriş:

JDK oldukça büyük ve buna göre karmaşık bir projedir.
Bu düzeyde bir projeyi inşa etmek belli miktarda teknik uzmanlık gerektir. Ayrıca harici yazılım-paket bağımlılıkları yanı sıra, çalışma ortamı için uygun ölçüde donanıma gereksinim vardır. Eğer sadece JDK’yi kullanmak istiyorsanız ve/veya kendiniz inşa etmek istemiyorsanız bu makale serisine ihtiyacınız olmayacaktır.

NOT: JDK’yı kurmak ve kullanmak isteyenler için link.

-Kaynak Kod çekme-edinme:

Kaynak kod çekmeden önce doğru sürümü belirlediğinize emin olun.
JDK 10'dan önceki sürümler farklı repolarda yer alıyordu. Ancak JDK 10'dan itibaren,kaynak kodlar artık ayrı repolara bölünmediğinden dolayı yalnızca tek bir depoyu kullanacağız.
Mevcut tüm repoların listesini OpenJDK Mercurial server üzerinden görebilirsiniz.
Makalenin başından da belirttiğim gibi OpenJDK projesi Mercurial kullanmaktadır. Bununla ilgili bilgi edinmek için linke başvurabilirsiniz.
Bu noktadan sonra tüm seri boyunca Mercurial bilginiz olduğu varsayılacaktır.

Özel Hususlar:

Sorunsuz bir inşa süreci için,kaynak kodu nerede ve nasıl kontrol edeceğimizle ilgili bazı kurallara aşağıda yer verilmiştir.
Bu kurallar şöyledir:

  • Kaynak kod reponuz ve çalışma ortamınızı boşluk barındıran dizin içinde(path) barındırmayın.
    Örnek dizin yolu: “proje/my openjdk/” yerine “proje/my_openjdk/” şeklinde olması önerilir.
  • Çalışma ortamınız için çok uzun isime sahip ve iç içe geçmiş-yuvalanmış dizinler belirlemeyin. Dizin ismi makul düzeyde olması ve iç içe dizinler minimum düzeyde az olması önerilir.
  • Kaynak kodunu bir ağ paylaşımına değil yerel bir diske koyun.
    Eğer mümkünse bir SSD kullanın.Çünkü inşa süreci disk erişimi üzerinde oldukça etkili olacaktır ve bu da inşa süresini önemli ölçüde düşürecektir.
    Ancak eğer kaynak kod için bir ağ paylaşımına ihtiyaç duyarsanız aşağıda verilen önerilere bakmanız önerilir.
  • Eğer Windows ortamında çalışıyorsanız ve dolayısıyla Cygwin kullanıyorsanız,bu durumda inşa ortamının tutarlı olmasını sağlamak için ekstra özen göstermeniz önerilir. Windows ortamı için aşağıdaki prosedürü izlemeniz önerilir:

1:Cygwin bash kabuğundaki mkdir komutunu kullanarak JDK’nin en üst dizinini içerecek klasörü-dizini oluşturun. Özellikle belirtmeliyim ki Cygwin bash komutunu kullanın. Yani Windows gezginini kullanarak klasör-dizin oluşturmayın. Bash ile oluşturduğunuzda,oluşturduğunuz klasörün Cygwin özelliklerine sahip olmasını sağlayacaktır. Aynı şekilde alt klasörler de bu özelliklere sahip olacaktır. Windows bu,işine akıl sır ermez.

2: JDK kodlarını Cygwin ana dizinin altındaki bir yola koymayın.
Bu,özellikle kullanıcı adınız boşluk ve/veya karışık büyük ve küçük harfler içeriyorsa önemlidir. Yani anlamsız Windows zamazingoları.

3: JDK kaynak kodlarını çekerken “hg” komutunu bu makalede belirtildiği gibi kullanın. Dolayısıyla Mercurial’a bağlı kalmanız önerilir.
Yani farklı Mercurial istemcisi kullanmanyın.
Yukarıda belirtilen prosedurün izlenmemesi durumunda hatalara ve çözülmesi zor yapı sorunlarına neden olabilir.

-İnşa için Donanım Gereksinimleri

JDK devasa bir projedir ve inşa sürecini makul bir sürede tamamlayabilmek ya da minimum olarak bir yapıyı tamamlayabilmek için yine makul düzeyde bilgisayar donanımı gerektirir.
İnşa süreci için bir SSD disk kullanılmasını şiddetle tavsiye ediyoruz.
Çünkü dizk hızı derleme performansı için sınırlayıcı faktörlerden biridir.

X86(32 bit) üzerinde inşa:
Minimum olarak 2–4 çekirdekli bir makine ve 2–4 GB RAM önerilir(Ne kadar çok çekirdek kullanırsanız o kadar çok belleğe ihtiyacınız olur). Disk alanı olarak ise minimum 6GB boş disk alanı gereklidir.
Öte yandan 32 bitlik derlemeler için bile 64 bit derleme makinesi kullanılması ve bunun yerine “ — with-target-bits=32” komutu kullanılarak 32 bitlik bir hedef oluşturulması önerilir.

AArch64 üzerinde inşa:
Minimum olarak 8 çekirdekli bir makine ve 8 GB RAM önerilir(Ne kadar çok çekirdek kullanırsanız o kadar çok belleğe ihtiyacınız olur). Disk alanı olarak ise minimum 6GB boş disk alanı gereklidir.Yeterince güçlü donanımlı bir makinaya sahip değilseniz,çapraz derlemeyi(cross-compiling) kullanmak da mümkündür.

NOT: Çapraz derleme(cross-compiling) ile ilgili detaylara makale serisi içinde yer verilecektir.

32-bit ARM üzerinde inşa:
Bu süreç önerilmiyor. Bunun yerine çapraz derleme(Cross-compiling) ile ilgili bölüme-sürece bakınız.

Makale serisinin devamı PartX olarak gelecek…

-end of

--

--

Kerim Fırat
Kerim Fırat

Written by Kerim Fırat

Senior Android Platform(AOSP,AAOS) Architect,Open Source Contributor | Turkey Java User Group Vice Chairman | Author

No responses yet