PDA

View Full Version : Βοήθεια για compilation του Firefox


WAntilles
22-05-2006, 17:14
Προσπαθώ να φτιάξω ένα statically-linked tgz για Linux - σαν αυτό που δίνουν στο mozilla.org - αλλά για amd64. Συγκεκριμένα για τη release build του 1.5.0.3.

Ακολουθώ τις παρακάτω οδηγίες:

http://developer.mozilla.org/en/docs/Linux_Build_Prerequisites

http://developer.mozilla.org/en/docs/Configuring_Build_Options

Φτιάχνω το .mozconfig και δίνοντας:

make -f client.mk build

Παίρνω ύστερ' από λίγο:

/usr/bin/ld: nsCOMPtr.o: relocation R_X86_64_PC32 against `nsGetServiceByCID::operator()(nsID const&, void**) const' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[4]: *** [libxpcom_core.so] Error 1
make[4]: Leaving directory `/home/bla-bla/working/mozilla/ff-opt-static/xpcom/build'
make[3]: *** [libs] Error 2
make[3]: Leaving directory `/home/bla-bla/working/mozilla/ff-opt-static/xpcom'
make[2]: *** [tier_2] Error 2
make[2]: Leaving directory `/home/bla-bla/working/mozilla/ff-opt-static'
make[1]: *** [default] Error 2
make[1]: Leaving directory `/home/bla-bla/working/mozilla/ff-opt-static'
make: *** [build] Error 2

Μερικά στοιχεία που ίσως σας βοηθήσουν:

- το .mozconfig:

. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-opt-static
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --enable-default-toolkit=gtk2
ac_add_options --enable-xft
ac_add_options --enable-crypto
ac_add_options --disable-tests
ac_add_options --enable-official-branding
mk_add_options MOZ_CO_PROJECT=browser

- από gcc είναι εγκατεστημένοι καί ο 3.4 καί ο 4.0. Δεν ξέρω όμως ποιός χρησιμοποιείται

- το output της uname -a (από Ubuntu Dapper amd64):

Linux 2.6.15-23-amd64-k8 #1 SMP PREEMPT x86_64 GNU/Linux



Σημ.: Από C/C++ πρακτικά δεν ξέρω τίποτα.

Σημ.: Μετά από αυτό θέλω να κάνω το ίδιο καί για τον Thunderbird 1.5.0.2.

DarthMoul
23-05-2006, 00:35
Wantilles τώρα το είδα. Αγνόησε τις οδηγίες και δούλεψε με το configure.

Πριν από το configure θα κάνεις export τις μεταβλητές:
CFLAGS="-O2 -fPIC" και
CXXFLAGS=$CFLAGS.

και μετά θα τρέξεις το configure:

configure --prefix=/opt/firefox --disable-debug --enable-static --disable-shared --enable-default-toolkit=gtk2 --enable-xft --enable-crypto --disable-tests --enable-application=browser

Το --enable-official-branding έχουν δικαίωμα να το χρησιμοποιούν μόνο οι developers του mozilla.org και η χρήση του από τρίτους παραβιάζει την άδεια χρήσης. Το --enable-optimize δεν σου χρειάζεται.

Μακριά από GCC 4.x προς το παρόν. Μετά από την έκδοση 4.2 θα ασχοληθείς μαζί του.

Για να δεις ποιά είναι η default έκδοση που χρησιμοποιεί το σύστημα σου θα δώσεις:

gcc -v

Μετά το configure θα δώσεις απλά:
make -j2
και αν όλα πάνε καλά με το make θα δώσεις:

make install.

Το make install θα εγκαταστήσει το firefox στο directory /opt/firefox οπότε πρόσεχε μήπως προϋπάρχει κάτι εκεί μέσα και το καταστρέψεις.

Μετά κάνεις tar και gzip στο /opt/firefox και έχεις έτοιμο πακετάκι προς διανομή κατάλληλο για όλες τις διανομές. Ίσως να είναι καλύτερα να μην χρησιμοποιήσεις το /opt/firefox αλλά κάποιο άλλο directory της επιλογής σου γιατί συχνά στο /opt/firefox εγκαθιστούν το firefox οι διανομείς.

Με 64 bit firefox:
1. Ξεχνάς flashplayers
2. Παίζεις μόνο με java 1.5 αφού όλες οι προηγούμενες εκδόσεις είναι μόνο 32 bit.

Καλό κουράγιο.

Hemispasm
23-05-2006, 00:54
Με 64 bit firefox:
1. Ξεχνάς flashplayers
2. Παίζεις μόνο με java 1.5 αφού όλες οι προηγούμενες εκδόσεις είναι μόνο 32 bit.lol και ελεγα οτι μονο σε μενα δε δουλευαν αυτα :)

DarthMoul
23-05-2006, 00:57
lol και ελεγα οτι μονο σε μενα δε δουλευαν αυτα :) H μόνη αρχιτεκτονική που χρησιμοποιώ prebuild firefox 32 bits είναι η x86-64 για τους παραπάνω λόγους.

Σε Solaris amd64 έχω και τα δύο 64μπιτα. Και σε HPUX με PA-RISC 64 bit CPU.

Hemispasm
23-05-2006, 01:41
WAntilles σορρυ για το προσωρινο hijacking ... :p

Δεν υπαρχει καμια λυση για τους flashplayers? To deer park με εχει ταλαιπωρησει πολυ ..

WAntilles
23-05-2006, 01:46
Ευχαριστώ Darth Moul. Θα τα δοκιμάσω.

Μακριά από GCC 4.x προς το παρόν. Μετά από την έκδοση 4.2 θα ασχοληθείς μαζί του.

Για να δεις ποιά είναι η default έκδοση που χρησιμοποιεί το σύστημα σου θα δώσεις:

gcc -v

Και πώς αλλάζω gcc ώστε να χρησιμοποιηθεί ο 3.4x διότι default είναι default ο 4.0x;

gcc -v

gcc version 4.0.3

Μετά κάνεις tar και gzip στο /opt/firefox και έχεις έτοιμο πακετάκι προς διανομή κατάλληλο για όλες τις διανομές. Ίσως να είναι καλύτερα να μην χρησιμοποιήσεις το /opt/firefox αλλά κάποιο άλλο directory της επιλογής σου γιατί συχνά στο /opt/firefox εγκαθιστούν το firefox οι διανομείς.

Μπα δεν έχει τίποτα εκεί το Ubuntu.

Με 64 bit firefox:
1. Ξεχνάς flashplayers
2. Παίζεις μόνο με java 1.5 αφού όλες οι προηγούμενες εκδόσεις είναι μόνο 32 bit.

Καλό κουράγιο.

Ναι τα έχω υπόψη μου αυτά.

Λογικά, αυτά που είπες θα ισχύουν καί για Thunderbird, απλά εκεί αντί για:

--enable-application=browser

θα θέλει λογικά:

--enable-application=mail

WAntilles
23-05-2006, 02:24
Μπα το ίδιο λάθος βγάζει και πάλι.

Βέβαια χρησιμοποιείται ο GCC 4.0 γιατί δεν ξέρω πώς να τον αναγκάσω να χρησιμοποιήσει τον GCC 3.4x.

Να βγάλω τελείως τον 4.0 δεν γίνεται γιατί είναι τέτοια η σχέση των dependencies που είναι απαραίτητος.

DarthMoul
23-05-2006, 08:02
Wantilles το downgrade του compiler δεν το έχω κάνει ποτέ και δεν ξέρω πόσο σοφό θα ήταν να το κάνεις.

Δώσε μου 1-2 μέρες να το δοκιμάσω και εγώ με gcc 3.4 ώστε να ξέρουμε σίγουρα αν όντως φταίει ο compiler ή είναι κάτι άλλο.

PS. Σε καμμιά περίπτωση μην ξηλώσεις τον gcc 4 από το σύστημα σου γιατί οτιδήποτε dynamic έχεις κάνει compile με αυτόν θα σταματήσει να δουλεύει.

DarthMoul
23-05-2006, 08:07
WAntilles σορρυ για το προσωρινο hijacking ... :p

Δεν υπαρχει καμια λυση για τους flashplayers? To deer park με εχει ταλαιπωρησει πολυ .. Ναι υπάρχει. Να πείσεις την macromedia να βγάλει 64 bit player :p Την έχουμε πήξει στα mail και κάτι έχει πει για την επόμενη έκδοση. Ο 32μπιτος δουλεύει πάντως. Υπάρχουν και free/open source αλλά κυκλοφόρησαν σχετικά πρόσφατα και είναι πολύ beta ακόμα.

nivas
23-05-2006, 09:04
Και πώς αλλάζω gcc ώστε να χρησιμοποιηθεί ο 3.4x διότι default είναι default ο 4.0x;



Οι περισοτερες διανομές έρχονται και με μια combatibility gcc. Ψαξε λίγο με τον software manager και εγκατέστησέ την. Και να μην την έχει μπορεί να στήσεις μία ή να πάρεις τα bin της. Αν αυτή έχει στηθεί σωστά αρκεί μόνο να καλέσεις το εκτελέσιμο που αντιστοιχή στην έκδοση που θέλεις και όλα θα γίνουν σωστά.

WAntilles
23-05-2006, 15:10
Wantilles το downgrade του compiler δεν το έχω κάνει ποτέ και δεν ξέρω πόσο σοφό θα ήταν να το κάνεις.

Δεν είχα σκοπό να το κάνω.

Δώσε μου 1-2 μέρες να το δοκιμάσω και εγώ με gcc 3.4 ώστε να ξέρουμε σίγουρα αν όντως φταίει ο compiler ή είναι κάτι άλλο.

Ευχαριστώ Darth Moul. Αναμένω.

Οι περισοτερες διανομές έρχονται και με μια combatibility gcc. Ψαξε λίγο με τον software manager και εγκατέστησέ την. Και να μην την έχει μπορεί να στήσεις μία ή να πάρεις τα bin της. Αν αυτή έχει στηθεί σωστά αρκεί μόνο να καλέσεις το εκτελέσιμο που αντιστοιχή στην έκδοση που θέλεις και όλα θα γίνουν σωστά.

Εγκατεστημένος είναι καί ο 3.4.

Απλά θέλω προσωρινά να εξαναγκάσω το σύστημα να χρησιμοποιήσει αυτόν και όχι τον 4.0.

Δυστυχώς στο Ubuntu δεν υπάρχει το gcc-info του Gentoo, που έκανε πολύ εύκολα την αλλαγή.

RootX
23-05-2006, 15:15
export CC=gcc-3.4
βρήκα σε διάφορα fora για να κάνεις force την χρήση 3.4.

DarthMoul
23-05-2006, 17:07
export CC=gcc-3.4
βρήκα σε διάφορα fora για να κάνεις force την χρήση 3.4.
Αυτό είναι distro specific σε κάποιες διανομές. Σε gentoo δεν θα δουλέψει παρά μόνο αν φτιάξεις μόνος σου το symbolic link. Για το Ubuntu δεν ξέρω.

RootX
23-05-2006, 17:12
Δίκιο, σε ubuntu αναφερόμουν.

DarthMoul
23-05-2006, 22:29
Τα αποτελέσματα της δοκιμής με gcc-3.4.5:

Κάνεις unpack τα sources του 1.5.0.3. Στο directory mozilla φορτώνεις σε έναν editor το configure.

1. Πηγαίνεις στην γραμμή 7631. Θα πρέπει να είναι κενή. Εκεί γράφεις:
ac_cv_visibility_hidden=no

2. Πηγαίνεις στην γραμμή 7660. Θα πρέπει να είναι κενή. Εκεί γράφεις:
ac_cv_visibility_pragma=no

Σώζεις και βγαίνεις. Κάνεις export τις μεταβλητές CFLAGS και CXXFLAGS όπως σου είπα παραπάνω. Μετά κάνεις export την μεταβλητή LDFLAGS όπως παρακάτω:
export LDFLAGS="-lXft"

Τρέχεις το configure όπως σου έδειξα πιο πάνω και μετά make -j2 και στο τέλος make install.

Το έχω έτοιμο αν το θέλεις. Μπορώ να το πακετάρω και να στο στείλω. Να ξέρεις πάντως ότι δεν είναι statically linked όπως δεν είναι και αυτά που μοιράζει το mozilla. Απλά είναι πιο χαλαρό σε σχέση με τα dependencies τα οποία αν δεν βρει θα βγάλει ένα warning αλλά θα συνεχίσει να δουλεύει.

ΥΓ. Αν θέλεις java καλύτερα να χρησιμοποιήσεις την blackdown-jre-1.4.2.03 της IBM. Είναι πιο ελαφριά από της SUN και παιζει καλύτερα με το 64μπιτο firefox. Η SUN δίνει 64μπιτη μόνο την 1.5 η οποία είναι πολύ πιο βαριά από την 1.4.2 και δεν έχει να σου προσφέρει κάτι παραπάνω προς το παρόν.

WAntilles
24-05-2006, 01:56
Το έχω έτοιμο αν το θέλεις. Μπορώ να το πακετάρω και να στο στείλω.

Αν έχω πρόβλημα, θα σου πω. Ευχαριστώ.

Προς το παρόν θα το δοκιμάσω μόνος μου, για εκπαιδευτικούς λόγους.

Να ξέρεις πάντως ότι δεν είναι statically linked όπως δεν είναι και αυτά που μοιράζει το mozilla.

Δεν μ' απασχολεί αυτό, και ούτε ήξερα ότι του mozilla.org δεν είναι statically linked. Φανταζόμουν ότι θα ήταν.

ΥΓ: Οι παραπάνω οδηγίες ισχύουν καί για το Thunderbird 1.5.0.2;

Προφανώς θα πρέπει να βρω τις αντίστοιχες γραμμές στο configure.

DarthMoul
24-05-2006, 07:45
Για το thunderbird δεν έχω δοκιμάσει. Κοίταξε το firefox και αν πάνε όλα καλά, το thunderbird θα είναι piece of cake. To ίδιο source tree και τα ίδια config files μοιράζονται.