Pagine

2012-01-11

Compilare per PowerPc con Xcode 4 - Aggiornato

E continuo con Xcode 4: con questa versione dello strumento di sviluppo, Apple ha deciso di far dismettere lo sviluppo di applicazioni per PowerPc; questo coincide con l'abbandono della piattaforma Rosetta (che permetteva appunto ai software per PowerPc di girare anche sui processori Intel) con l'arrivo di Lion.
Non è stato un abbandono improvviso: la coesistenza di Intel e Rosetta durava dal MacOSX 10.5. Tuttavia sappiamo che i Mac, anche se vecchi, possono ancora avere un loro utilizzo, per cui esiste ancora richiesta per software per PowerPc. Ma chi vuole rilasciare applicazioni Universal (cioè per entrambi i processori) ed contemporaneamente utilizzare le ultime versioni degli strumenti di sviluppo, deve adattarsi ad avere sia la versione 3 che la 4 di Xcode, installati sullo stesso computer (a meno di non dover dedicare un Mac apposta allo sviluppo con Xcode 3.
Ho già spiegato in un post precedente che comunque sono costretto a tenermi anche una versione di Xcode 3, almeno per costruire un nuovo progetto, per alcuni bachi presenti nella versione 4. Tuttavia, avere il 4 e dover usare il 3, non è proprio una cosa soddisfacente.
Dopo aver fatto un po' di ricerche, mi sono imbattuto quasi per caso nella soluzione, che riporto qui di seguito, giusto per avere tutto in un solo posto e per condividere quanto ho ottenuto. I siti che mi hanno suggerito come procedere sono soprattutto due: il primo è un post su Stackoverflow ed il secondo sul blog bdunagan; servono entrambi, in quanto alcune sono condizioni sono cambiate con le diverse versioni di Xcode 4.
Prima di cominciare: si tratta di operazioni da effettuare da terminale, in cui anche gli spazi potrebbero essere significativi, per cui consiglio il procedimento a chi si trova a suo agio nella shell di unix. In caso di errori potreste essere costretti a re-installare Xcode, per cui tenetevi pronto il file di installazione e fate comunque un backup prima di partire. Mi raccomando: non mi prendo responsabilità per eventuali danni!

Requisiti

- ultima versione di Xcode 3 (3.2.6);
- ultima versione di Xcode 4 (4.2.1); vedere in fondo per la 4.3;
- utente amministratore da cui eseguire tutti i comandi;
- Snow Leopard o Lion (io sono su 10.7, ma dovrebbe funzionare anche su 10.6).

Installazione Xcode 3, Xcode 4

I post suggeriscono di disinstallare Xcode (qualunque versione) e di partire installando Xcode 3 in una cartella diversa da quella di default, p.es. scegliendo /Xcode3; non installate i System Tools/Unix development. Fatto questo, installiamo Xcode 4, stavolta nella cartella /Developer, come da default; installate i System Tools: non indispensabili, ma saranno certamente utili in seguito. Personalmente, ho copiato la cartella della versione 3 da un backup di SnowLeopard e poi installando la 4.

Supporto al 10.5 (Leopard)

Potremmo copiare l'SDK del 10.5; ma per modificare solo l'indispensabile (e per risparmiare 300MB di spazio disco) è sufficiente mettere al suo posto un link. Dal terminale, andiamo nella cartella degli SDK della 4 e creiamo un link alla versione 3:
cd /Developer/SDKs
sudo ln -s /Xcode3/SDKs/MacOSX10.5.sdk
Verrà chiesta la password di amministratore (comando sudo). Per verificare che tutto sia a posto, facciamo una lista della cartella, con il comando ls -l ed otterremo:
lrwxr-xr-x  1 root  wheel   33  8 Gen 17:04 MacOSX10.5.sdk -> /Xcode32/SDKs/MacOSX10.5.sdk
drwxr-xr-x  7 root  wheel  238  4 Gen 22:37 MacOSX10.6.sdk
drwxr-xr-x  7 root  wheel  238 22 Set 08:34 MacOSX10.7.sdk
dove la prima riga ci indica il link alla corrispondete cartella di Xcode 3.
Se ora creiamo un nuovo progetto in Xcode 4, vedremo che è disponibile anche la 10.5 come versione base! L'abbiamo ottenuto tramite un link: se l'avessimo copiato, avremmo anche dovuto cambiare i permessi, che invece ora sono quelli giusti.

Supporto PPC per il GCC 4.2

Ora c'è solo più da attivare il supporto per PPC per il compilatore CGG 4.2. Questa parte può essere diversa a seconda della versione di Xcode 4 e dalla presenza o meno di Lion. Nel mio caso (Xcode 4.2.1 su Lion), è necessario impostare un altro link dopo essere passati nella posizione indicata:
cd /Developer/usr/libexec
sudo ln -s /Xcode3/usr/libexec/gcc gcc
Ora è necessario ancora un ultimo passaggio per attivare il default llvm, spostandosi nella cartella:
cd /Developer/usr/llvm-gcc-4.2/bin
sudo ln -s /Xcode3/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin10-llvm-gcc-4.2 powerpc-apple-darwin11-llvm-gcc-4.2
dove abbiamo impostato un nuovo link all'Xcode 3, ma stavolta cambiando il nome in darwin11 ed il link si riferisce questa volta solo ad un file, non ad un'intera cartella.

Nel caso di SnowLeopard, non è necessario il link al gcc (penultimo passaggio), ma occorre invece sostituire (facendo un backup) il file as:
cd /Developer/usr/libexec/gcc/powerpc-apple-darwin10/4.2.1
sudo mv as as.bak
sudo ln -s /Xcode3/usr/bin/as
NOTA: quest'ultima parte è riportata dai siti precedenti e non è stata da me verificata, essendo già su Lion. Se qualcuno ha occasione di verificarla, può lasciare un commento, utile per chi si trova nella stessa condizione.

Ora, potete aprire Xcode 4, preparare un minimo software di prova; se non abbiamo usato funzioni deprecate, possiamo compilare anche per OSX 10.5, impostandolo come SDK di base; per compilare anche per PPC, occorre variare in due punti nei Build Settings dell'applicazione: alla voce Architectures e poi ancora alla voce Valid Architectures, un po' più sotto. In entrambi i casi, è consigliabile inserirlo solo per Release, in quanto come Debug può non essere necessario. Per entrambe le voci, cliccando sul valore si apre un menu, dal quale si sceglie Other...: nella tabella risultante si aggiunge la voce ppc.
Compiliamo il nostro programmino (azione Archive) e una volta estratta l'applicazione, selezioniamola e apriamo le sue proprietà dal Finder (cmd-I): vedremo che alla voce Tipo sarà riportata la scritta "Applicazione (Universal)". Eureka!
E se vogliamo particolari in più, possiamo usare il comando lipo da terminale:
lipo -info ~/Desktop/miaApp.app/Contents/MacOS/miaApp
che risponderà:
Architectures in the fat file: ~/Desktop/miaApp.app/Contents/MacOS/miaApp are: x86_64 i386 ppc7400
cioè: Intel 32/64bit e PowerPc!

Aggiornamento Xcode 4.3

Tutta la procedura indicata, sia supporto al 10.5 che la compilazione per ppc vale anche per la versione 4.3 di Xcode con però un'importante modifica: Xcode 4.3 è ora un'applicazione a tutti gli effetti, per cui tutti gli strumenti, compilatori, ecc... si trovano all'interno del pacchetto dell'applicazione. Quindi tutti i percorsi che prima partivano con /Developer/... ora devono tenere conto della nuova posizione:
/Applications/Xcode.app/Contents/...
Il tutto è complicato dal fatto che la nuova struttura interna di cartella è diversa da quella precedente esterna, per cui bisogna andarsele a cercare! In particolare: per attivare il supporto al 10.5, cioè per inserire il link all'SDK dell'Xcode 3, occorre spostarsi nella cartella:
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
sudo ln -s /Xcode3/SDKs/MacOSX10.5.sdk
L'inserimento del link per attire il gcc avviene invece con i seguenti comandi:
cd /Applications/Xcode.app/Contents/Developer/usr/libexec
sudo ln -s /Xcode3/usr/libexec/gcc gcc
mentre l'attivazione di llvm necessita dei seguenti:
cd /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/bin
sudo ln -s /Xcode3/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin10-llvm-gcc-4.2 powerpc-apple-darwin11-llvm-gcc-4.2
dove notiamo che viene mantenuto darwin11, come per la versione 4.2.1.
Non posso verificare che la stessa cosa avvenga con Snow Leopard (sono su Lion), oltre tutto non sono sicuro che Xcode 4.3 possa esservi installato.

Nota

Sia per Xcode 4.2 che 4.3, in caso di aggiornamento tutte le modifiche sono perse! Quindi la procedura deve essere ripetuta.

Nessun commento:

Posta un commento