[Gelistirici] 64bit için değişiklik talepleri

Mehmet Emre ATASEVER memre at pardus.org.tr
10 Şub 2010 Çar 11:50:19 EET


Saturday 06 February 2010 günü (saat 16:18:53) Necdet Yücel şunları yazmıştı:
> 
> ARM portuyla ilgili çalışan arkadaş da bu paketlerde neler yaptığını
> yazarsa yararlı olur diye umuyorum.
> 

ARM için oluşturulan inşa dosyaları için yapılacak Pisi değişiklikleri oldukça farklı ve native-compiling mantığı ile çalışan Pisi'de gereksiz olabilir. Şöyle uzun bir açıklama yapayım.

Paketleri derlerken cross-compile yapmak zorunda kalıyorum, çünkü ARM üzerinde derleme yapmak için pek uygun bir platform değil (deneyip yanıldım bu konuda :) ). x86 veya x86_64 Pardus sistemlerinde, bütün inşa bağımlılıkları host üzerinde bulunuyor, yani bütün inşa bağımlılıkları oluşacak executable dosyalarla aynı platform üzerinde çalışacak şekilde. Ancak cross-compile yaptığınızda inşa bağımlılıklarını 2'ye ayırmamız gerekiyor: build sistem üzerinde çalışacak olanlar ve hedef host (target) üzerinde çalışacak olanlar. Build sistem üzerindeki inşa bağımlılıkları, derlemenin yapıldığı mimaride çalışacak olan bağımlılıklar (örneğin paketler derlenirken çalıştırılan bir uygulama), hedef host sistemdeki çalışacak olan bağımlılııklar da genel itibariyle kütüphaneler, linkage aşamasında ihtiyaç duyuluyor buna.

Pisi'de ihityacım olan build, host, target değişkenlerinin eklenmesi; get.py'de get.rootDIR(), get.toolchainDIR() gibi eklentilerdi, Faik'in tavsiyesi üzerine sistem olgunlaşana kadar bunları actions.py'ye yazdım [1].

Pisi tasarım olarak cross-compile mantığıyla çalışmak üzere çalışmadığından örneğin bir get.toolchainDIR() gibi birşeyin eklenmesi belki de gereksiz veya native-compiling'detek platform üzerinde tek derleyici kullanıldığından  build, host, target değişkenleri aynı ve bu değişkenlerin Pisi'de kullanılması gereksiz. Bu nedenle çalışır bir rootfs oluşturduktan sonra pisi-cross gibi bir araç geliştirilip, cross-compile ile oluşturulacak sistemlerin inşa betikleri ile native-compile ile oluşturulacak sistemlerin inşa betikleri birbirlerinden ayrılabilir. Emdebian ekibi dpkg-cross kullanıyor cross-compiling için mesela [2].

Veya tek bir build sistem üzerinden bütün platformlar için inşa işlemleri yapılması için pisi tamamen cross-compile mantığıyla ile çalışmak üzere yeniden düzenlenir, her platform için bir toolchain oluşturulur ve tek bir depodan ARM,x86,x86_64, ve diğer birçok platform için ikili depolar oluşturulabilir. Andak bu cross-compile yaparken en büyük problem, linkage esnasında kütüphaneleri buldu-bulamadı, yanlış buldu vs. olayları. Bunun için her platforma ait ayrı ayrı patch ler yapılması gerekebilir, her uygulama geliştirici doğru düzgün oluşturmuyor configure.in-configure.ac betiklerini, veya bug olabiliyor, veya inşa anında derlediği bir şeyi çalıştırmak istiyor inşa patlıyor [3], bunun için HOSTCC ile bazı kısımları derlemek gerekiyor... 

> system/base/perl
> multimedia/graphics/imagemagick
> programming/language/perl/perl-Digest-HMAC
> programming/language/perl/perl-Digest-Base
> programming/language/perl/perl-Carp-Clan
> programming/language/perl/perl-Convert-ASN1
> programming/language/perl/perl-Crypt-Simple
> programming/language/perl/perl-Crypt-PasswdMD5
> programming/language/perl/perl-Crypt-SmbHash
> programming/language/perl/perl-Date-Manip
> programming/language/perl/perl-Date-Calc
> programming/language/perl/perl-Email-Abstract
> programming/language/perl/perl-Email-Address
> programming/language/perl/perl-Email-Date-Format
> programming/language/perl/perl-Email-Date
> programming/language/perl/perl-Email-MessageID
> programming/language/perl/perl-Test-Simple
> programming/language/perl/perlconsole
> programming/vcs/git
> programming/vcs/subversion
> programming/language/python/pygame
> hardware/library/obexftp
> hardware/printer/foomatic-db-engine
> 

Bu paketler içerisinden bir tek perl i derledim. Onu da bulduğum bir araçla binbir takla ile halledebildim [4]. Sonuç olarak ortaya çıkan perl paketi standart perl paketinden oldukça farklı [5]. Perl'e uygun bir zamanda tekrar bakmayı düşünüyorum [6].

Diğer paketleri henüz derlemedim.

[1] Şu anda ilk hedef çalışır bir Pardus-ARM çıkarmak
[2] http://linux.about.com/cs/linux101/g/dpkgcross.htm
[3] ARM için derlenmiş bir executable x86da çalışmıyor haliyle, veya x86_64'de çalışan x86da çalışmaz.
[4] http://www.rootshell.be/~axs/perl/
[5] http://svn.pardus.org.tr/pardus/playground/memre/arm/repos/cortex-a8/system/base/perl/
[6] Pardus-ARM'ı oluştururken, standart Pardus sistemine olabildiğinde çok benzetmeye çalışıyorum, ancak kimi zaman bu pek mümkün olmuyor.

-- 
saygılarımla/regards,
Mehmet Emre ATASEVER
memre ~ pardus.org.tr



Gelistirici mesaj listesiyle ilgili daha fazla bilgi