OpenJDK İnşa(Building) Part7
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