OpenJDK İnşa(Building) Part7

Kerim Fırat
3 min readJan 11, 2021

Bu makalede OpenJDK inşa(build) serisinin 7.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

“Make” Komutunu Çalıştırmak

Eğer uygun bir konfigürasyona sahip isek,yani “configure” süreci sorunsuz tamamlandıysa,JDK’yı build etmek için tek yapmamız gereken şey “make” komutunu çalıştırmaktır.

NOT: GNU Make ile ilgili uyarıları incelemek için OpenJDK İnşa(Building) Part5 ‘de “GNU Make” kısmını inceleyebilirsiniz.

Şayet “make” komutuna herhangi bir parametre belirtmeden kullanırsanız,
bu durumda “make”’in default hali çalıştırılacaktır. Dolayısıyla “make” komutu tek başına kullanıldığında,”make default” veya “make jdk” komutu ile eşdeğer şeklinde çalışacaktır.
Make komutunun default hali,bir geliştiricinin(developer) en temel düzeyde build sürecini başlatabilmesi için yeterlidir.

Make süreci hatasız olarak tamamlandığında,JDK derlenmiş çıktı(output) dosyası “$BUILD/jdk”’da yer alacaktır.
Yeni oluşturulan JDK’yı şu şekilde test edebilirsiniz:

$BUILD/jdk/bin/java -version

“Make” Ortak Hedefler:
Yukarıda “make” komutunun default halini işledik. Make’in default hali her çalıştırıldığında,kaynak kod üzerinde değişen kısımlar derlenir ve JDK çıktısı buna göre tekrar üretilir.
Ancak “make”’in default hali dışında farklı hedeflere yönelik komutları mevcut. Bu komutlar aşağıda yer almaktadır.

Tüm hotspot’u build etmek:

hotspot

Yalnızca belirtilen JVM varyantını oluşturmak:

hotspot-<variant>

JDK imajı build etmek:

images

Veya

product-images

Dökümantasyon imajı oluşturmak:

docs

Veya

docs-image

Test imajı oluşturmak:

test-image

Tüm imajları(ürün,dökümantasyon,test) oluşturmak:

all

Veya

all-images

İmajları iki defa oluşturmak için:

bootcycle-images

Make komutu tarafından oluşturulan tüm dosyaları temizlemek-silmek için:

clean

clean komutu tüm make build sürecini yeni baştan almak için kullanılır.Bu komut kullanıldığında,”configure” komutu ile oluşturulan dosyalar hariç diğer tüm oluşturulmuş dosyalar temizlenir.Böylelikle sadece kaynak kod üzerinde değişen kısımlar değil,tüm derleme işlemi baştan alınır ve tüm yapıyı kapsayacak şekilde ilerler. Dolayısıyla “make” sürecini yeni baştan almak için kullanabilirsiniz.

Tüm dosyaları(configure sürecinde oluşan dosyalar da dahil) temizlemek-silmek için:

dist-clean

Bu komutla birlikte “configure” ve “make” sürecinde oluşturulan dosyalar temizlenir.Dolayısıyla tüm build sürecini yeni baştan almak için kullanabilirsiniz.

NOT:Bazı durumlarda make sürecinde kaynak kod vb. ile ilgili yaşanan problemler düzeltilse bile,make süreci hata vermeye devam edebilir ve dolayısıyla make süreci yarıda kesilir. Eğer yaptığınız düzeltmelerden eminseniz ve halen hata alıyorsanız,bu durumda “clean” komutunu çalıştırmanız önerilir.
Bu durum “configure” süreci için de geçerlidir.
Dolayısıyla “clean” ve “dist-clean” komutları sıklıkla kullandığımız komtular arasında yer almaktadır.

Make ve make komutları ile ilgili yardım listesi almak için:

make help

Ayrıca “make” komutu ile tek bir modül,faz(aşama),veya tek bir modülün tek bir faz’ı(aşaması) gibi bölümler oluşturmak ve build etmek mümkündür. Bu şekilde belli hedeflere yönelik çalışmak için aşağıdaki modelleri inceleyebilirsiniz.

Bir faz(aşama) şunlar olabilir: gensrc,gendata,copy,java,launchers,libs.
Modül,faz(aşama),modül ve faz kullanımları ile ilgili argümanlar aşağıdaki gibidir.

Belirtilen faz(aşama) ve buna bağlı her şeyi build etmek için:

<phase>

Belirtilen modül ve buna bağlı her şeyi build etmek için:

<module>

Belirtilen modül için belirtilen faz’ı(aşamayı) ve bağllı olduğu her şeyi derlemek için:

<module>-<phase>

Benzer şekilde,aşağıda verilen kalıplara göre hedefler oluşturarak yapının sadece bir bölümünü temizlemek mümkündür. Dolayısıyla tüm yapı üzerinde “clean” komutunu çalıştırmak yerine,belli bölüm veya bölümlere yönelik “clean” çalıştırılabilir.

JDK çıktı(output) dosyasının bulunduğu çıktı dizini altında yer alan dizini ismini belirterek silmek:

clean-<outputdir>

Belirli bir derleme aşama(faz) ile ilgili tüm derleme sonuçlarını temizlemek için:

clean-<phase>

Belirli bir modülle ile ilgili tüm derleme sonuçlarını temizlemek için:

clean-<module>

Belirli bir modül ve aşama(faz) ile ilgili tüm derleme sonuçlarını temizlemek için:

clean-<module>-<phase>

“Make” Kontrol Değişkenleri

make” değişkenlerinin değerini komut satırında veya ortamıda geçersiz kılarak “make” davranışını-işleyişini kontrol etmek mümkündür. Genel olarak bu önerilmez. Çünkü yanlış kullanılması durumunda bozuk bir inşa’ya neden olabilir. Şayet build süreçleriyle ilgili iyi bir bilgi ve deneyime sahip değilseniz,bu değişkenleri doğru şekilde kullanmak zordur.
Bu nedenle,”Make” bu durumu göz önünde bulundurur ve herhangi bir kullanım hatası algılandığında buna bağlı olarak bir uyarı mesajı yazdırır.

Ancak kontrol değişkenleri olarak bilinen ve komut satırında geçersiz kılınması gereken birkaç “make” değişkeni vardır. Bu komutlara aşağıda belli başlıklarla yer verilmiştir.

Genel “Make” Kontrol Değişkenleri:
Build süreci için görev-iş sayısını belirtmek için(ileriki bölümlerde “performans” konusu detaylıca işlenecektir):

JOBS

Log düzeyini ve işlevselliğini belirtmek için(ileriki bölümlerde “Log” konusu detaylıca işlenecektir):

LOG

Kulanılacak konfigürasyon ve konfigürasyonları seçmek(ileriki bölümlerde “Çoklu Konfigürasyon” konusu detaylıca işlenecektir):

CONF ve CONF_NAME

Test “Make” Kontrol Değişkenleri:
Bu kontrol değişkenleri yalnızca testleri çalıştırırken kullanılır.
Test ile ilgili tüm konular ve detaylar “JDK’yı Test Etme” adlı yazılarımda detaylıca işlenecektir. Kontrol değişkenleri:

 TEST
TEST_JOBS
JTREG
GTEST

Gelişmiş(ileri düzey) “Make” Kontrol Değişkenleri:
Bu kontrol değişkenleri potansiyel olarak güvenli olmayabilir.
Bu konuyla ilgili detaylı bilgiye ileriki yazılarımda yer vereceğim.
Kontrol değişkenleri:

 SPEC
CONF_CHECK
COMPARE_BUILD
JDK_FILTER
SPEC_FILTER

-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