gcc, rpm i cross-compilacja

Jacek Konieczny jajcus w pld.org.pl
Sob, 20 Gru 2003, 12:33:37 CET


Od razu zaznaczam, że nie mam na myśli pełnej kross-kompilacji - np.
kompilowanie pakietów na ppc na i386 - ale taką prostrzą -
kompilowanie pakietów i386 na i686, albo athlon na amd64.

W tej chwili na systemie PLD i686 praktycznie nie da się zbudować
działającego pakietu i386, chyba że zamieni się kompilator (może coś
jeszcze?) na ten z i386. Ale wtedy przy kompilacji i686 na tym samym
systemie straci się część optymalizacji.

Czemu by więc nie pozwolić na instalowanie wielu wersji kompilatora 
(np. i386 i i686) i pozwolić RPMowi użyć właściwego? Teraz ja to robię
ręcznie (czywiście jest to brzydki hack) - kopiując na system i686
z pakietów gcc-*.i386.rpm /usr/bin/i386-* i /usr/lib/gcc-lib/i386-*.
A pakiety kompiluję: 
        rpmbuild pakiet.spec --target=i386 --define="_cc i386-pld-linux-gcc"

Ale po co się tak męczyć, jak można to załatwić w dysrybucji.

Pierwsza rzecz, trzeba umożliwić zainstalowanie gcc z różnych
architektur. Właściwie to jego wymagane części. Dlatego trzebaby
wydzielić pliki występujące na wszystkich arch do inneog pakietu 
i zrobić pakiety różne na różnych arch.

Czyli byłoby:
        gcc zawierające:
                /lib/libgcc_s.so
                /usr/bin/cc
                /usr/bin/gcc
                /usr/bin/gccbug
                /usr/bin/gcov
                /usr/share/man/*
oraz gcc-%{arch} zawierające:
        /usr/bin/%{_host}-*
        /usr/lib/gcc-lib/%{_host}-*

Podobnie dla pozostałych pakietów z kompilatorami.

Druga sprawa to przekonanie rpma do użycia właściwych kompilatorów. Tu
wystarczy tylko przedefiniować makra %{_cc} i podobne.

Cały ten trik pozwoliłby też na budowanie pakietów x86 na AMD64, bez
zabawy w multilib.

Co wy na to?

Pozdrowienia,
        Jacek



Więcej informacji o liście dyskusyjnej pld-devel-pl