Cross kompilacja

Zaczęty przez sesef, 17 Październik 2010, 14:47

sesef

Ma ktoś doświadczenie w tym? Potrzebuje osoby która skompilowałaby wrapper dla projektu dnetc.net pod procesory CELL BE (PS3). Binarka musi być 32bit (bo z tego co rozumiem na PS3 da się odpalić system 32 i 64bit) i ze statycznie zalinkowanymi bibliotekami

Kod wrappera: http://ctrlv.it/txt/ODYzOA==

Sam trochę próbowałem, jednak moje wiedza na temat linuxa nie jest porażająca, nie mówiąc już o targetowaniu kompilacji na inne architektury.

buninek

#1
Łatwo i szybko to i zawansowany developer nie zrobi. Nigdy nie kompilowałem pod inną architekturę, moje uwagi mogą wprowadzić w błąd. ;)

Całe szczęście, że do debiana jest repo z całym toolchainem pod ppc. To już połowa drogi.
Nie wiem na jakim etapie jesteś, może dużą część już pokonałeś, mogę się powtarzać.

Zacząć należy od dodania tego repozytorium do /etc/apt/sources.list.

# deb http://www.emdebian.org/debian/ unstable main
# deb http://www.emdebian.org/debian/ testing main
deb http://www.emdebian.org/debian/ lenny main

Instalujemy wymagane paczki
apt-get install binutils-powerpc-linux-gnu gcc-4.3-powerpc-linux-gnu libc6-dev-powerpc-cross g++-4.3-powerpc-linux-gnu glibc-2.7-1-powerpc-cross linux-libc-dev-powerpc-cross

[code]export CC="powerpc-linux-gnu-gcc-4.3"
export CXX="powerpc-linux-gnu-g++-4.3"
[/code]
CFLAGS, CXXFLAGS i LDFLAGS, też pewnie warto by jakieś sensowne ustawić?!

Dalej trzeba krok po kroczku budować zlib, openssl, curl i boincowe biblioteki.
Każdą z oddzielna konfigurując i przkazując jej niezbędne informacje, gdzie zanajdują się biblioteki (-L/tmp/openssl/lib), pliki nagłówkowe (-I/tmp/openssl/include). Możliwe, że będzie potrzebne gdzieś w konfiguracji dobitne wskazanie, że to chodzi o ARCH=powerpc-linux-gnu

To trochę tak po partyzancku. Najlepiej by było poszukać jak jest to dokładnie budowane, na przykład w debianie.

zlib
./configure --prefix=/tmp/zlib --static
make
install -m 755 -d /tmp/zlib
install -m 755 -d /tmp/zlib/lib
install zlib.h zconf.h libz.a /tmp/zlib/lib


openssl
I tu już napotykam na niewiedzę. Zdaje się, że musi być budowane z opcją no-asm (u mnie bez były błędy).

./Configure --prefix=/tmp/ssl --openssldir=/tmp/ssl threads no-krb5 zlib no-shared no-asm linux-ppc
make
make INSTALL_PREFIX=/tmp/ssl install

+ LDFLAGS=-L/tmp/zlib/lib i CFLAGS=I/tmp/zlib/lib

Włączyłem no-asm, pomogło, pojawił się nowy problem. Z uwagi na swój powolny sprzęt, moje eksperymenty są mocno wydłużone, a na dodatek odbywa się to pod qemu. W wolnym czasie jeszcze powalczę.

Najwygodniej by było zinstalować debiana (ppc) pod qemu-system-ppc. Zdaje się, że jest to możliwe. Wtedy wystarczyłoby skompilować tylko boinca.

sesef

najprościej chyba będzie qemu zainstalować. Mam nadzieję, że taka kompilacja na PPC jest kompatybilna z PS3 bo trochę wcześniej o tym czytałem to można tam kompilować dwa rodzaje programów ppu i spu.

buninek

Przeszukując sieć spotykałem się z PowerPC/Cell, co sugeruje równoznaczność. Czym się rózni w szczegółach, absolutnie nie wiem.
Przeglądając forum YDL, widziałem nawet linki do repozytoriów PLD (Ac), której używam. Od kilku lat pld porzuciło  budowanie pod powerpc.

Gentoo zaleca flagi pod cella:
CFLAGS="-O2 -pipe -mcpu=970 -mabi=altivec"
w przypadku gcc >= 4.4.0
CFLAGS="-O2 -pipe -mcpu=cell -mabi=altivec"

Nie ma to jak zainstalować jednorodny i całkowicie spójny system.
Ręczne rzeźbienie to tylko w przypadku osób, które mają wystarczającą wiedzę i doświadczenie.
Powinno to się robić wykorzystując (debianowy) system budowania paczek, a już napewno nakładać wymagane patche.

Wczoraj miałem styczność z debianem praktycznie pierwszy raz. Muszę przyznać, że to zacna dystrybucja.

Troll81

PS3 ma procek powerPC do normalnego działania i cell do grafiki jesli dobrze pamiętam. Procki cell to coś jak CUDA :D i da sie PS3 wykorzystywać utylizując oba proce :D

buninek

Wydaje mi się, że taka dystrybucja jak YDL różni się od debianowego wydania powerpc, specjalnym bootloaderem, ker
nelem, pełnym wsparciem pod układ graficzny i innymi "szczegółami".
Binaria zaś, zachowują zgodność pod względem arch.

sesef

Cytat: buninek w 18 Październik 2010, 16:41w przypadku gcc >= 4.4.0
CFLAGS="-O2 -pipe -mcpu=cell -mabi=altivec"

Takie flagi to przy cross kompilacji? Bo jakoś kompilując z PPC nie widzę sensu dodawania -mcpu=cell

buninek

Wrapper wymaga optymalizacji?

http://en.gentoo-wiki.com/wiki/Safe_Cflags/PowerPC
To dotyczy zalecanych ustawień do gentoowego make.conf.

Jaką dystrybucję użytkownicy playstation instalują najczęściej?
YDL
Czy są budowane pod powerpc, czy też pod powerpc64?

sesef

Optymalizacji nie wymaga, byleby się uruchomił i odpalił app liczący nic więcej od niego nie wymagam.

Z tego co się orientowałem instalują YDL albo Ubuntu PowerPC PS3

buninek

#9
Nie chcę już mieszać z uwagi na twoje dużo lepsze rozeznanie i wiedzę, bo faktycznie jeszcze wprowadzę w błąd.

http://www.yellowdoglinux.com/products/ydl/included/package_search.php
Rzeczywiście przeszukując te zasoby, to toolchain jest specjalistyczny, począwszy od binutils.
Jest binutils, ppu-binutils i spu-binutils, gcc, ppu-gcc, spu-gcc. ???

EDIT:
http://munckfish.net/blog/archive/2008/08/16/ubuntu-ps3-kernel-building/
Krótki opis jak zinstalować spatchowany toolchain (PS3 Dev Team's) dla ubuntu do cross kompilacji.

TJM

Przede wszystkim przy kompilacji wrappera nie należy się przejmować takimi rzeczami jak libcurl czy parę innych zależności. Configure --disable-client --disable-manager buduje serwer i biblioteki, odpada od razu 90% rzeczy które trzeba najpierw zbudować dla pełnej kompilacji. Ponadto od jakiegoś czasu pomocnicze aplikacje są chyba wydzielone i być może teraz da się je kompilować bez kompilacji serwera.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

sesef

Ostatecznie wystąpiłem o konto tutaj: http://gcc.gnu.org/wiki/CompileFarm

Przyda się nie tylko do kompilacji wrappera na inne platformy, ale również do sprawdzania optymalizacji na różnych prockach