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