2009年6月27日 星期六

[轉貼]自行編譯Firefox

編譯方法其實MDC(Mozilla Develop Center)就寫的很清楚
看完下面這篇可以編出一般版的FX
https://developer.mozilla.org/En/Build_Documentation

  1. For the impatient
  2. 2. Getting started
    1. 2.1. Build prerequisites
    2. 2.2. Get the source
    3. 2.3. Configuring build options
    4. 2.4. Build and install
  3. 3. Random FAQs and Developer Documentation
  4. 4. Hacking the Build System
但要編PGO版的 需要再看這篇


https://developer.mozilla.org/en/Building_with_Profile-Guided_Optimization#Introduction
整個看完要編自己PGO的FX 不會有太大問題
考慮到也許有人沒時間看,那就簡略大部分的說明直接進速成班
1.建立編譯環境
ubuntu的情形:
sudo apt-get build-dep firefox
2.下載FX 的source code 解壓縮到 『~/』下面
3.新增設定、執行文件
(因為wordpress會把 雙減號 改成單減號,正確的內容請下載回去看)
在『~/』下面新增 run-firefox.sh
#!/bin/sh make -f client.mk profiledbuild
export NO_EM_RESTART=1
mkdir $OBJDIR/_profileprofile
$OBJDIR/dist/bin/firefox -no-remote -profile $OBJDIR/_profileprofile
在『~/』下面新增 .mozconfig (注意下載回來的檔案要加上 .)
. $topsrcdir/browser/config/mozconfig
CC=gcc-4.3
CXX=g++-4.3
CPP=cpp-4.3

#mk_add_options MOZ_MAKE_FLAGS=-j4
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-@CONFIG_GUESS@
ac_add_options –disable-tests –disable-crashreporter –disable-debug –disable-tests –disable-javaxpcom –disable-updater
ac_add_options –enable-application=browser –enable-libxul –enable-jemalloc
ac_add_options –enable-optimize=”-O3 -fforce-addr -march=native -mtune=native -pipe -fomit-frame-pointer”
ac_add_options –enable-profile-guided-optimization
mk_add_options PROFILE_GEN_SCRIPT=”sh /home/orange/run-firefox.sh”
#make -f client.mk profiledbuild
藍色指定要用哪個gcc版本進行編譯,如果不需要特別指定就
CC=gcc
CXX=g++
CPP=cpp

草綠色 是多核心CPU加速編譯使用的,如果是單核心CPU可以不用管
如果是四核心CPU 把前面的#去掉就好,雙核心除了去掉#還要 -j4 改成 -j2
紫色則是gcc 最佳化的程度,-O3 在大部分的使用情形下不會當掉
(如果要更穩定那可以改成 -O2)
橘色則是依據編譯系統的CPU進行最佳化,如果要指定編譯成其他CPU的把native改掉
譬如改成對athlon64最佳化,-march=athlon64 -mtune=athlon64
編譯上若有設定march(譬如athlon64) 卻把編譯出來的用在不同的cpu上(譬如P4)
有可能會出現程式錯誤
避免這個情形 可以只用mtune 而不用march這個參數 (不過最佳化程度會降低一些)
4.下指令進行編譯
.mozconfig 最後一行那個跟run-mozilla.sh 第1行 只是要提醒編譯該下的指令是什麼
切換到FX source code 的目錄,並下指令
cd ~/mozilla-1.9.1
make -f client.mk profiledbuild
接下來就是漫長的等待時間,在第一次編譯完之前能不用FX就不要用
因為第一次編譯完後需要進行調校,如果有舊版FX在執行就會出現問題
第一次編譯完後系統會自動跳出一個FX視窗,這個就是調校用的
要做的就是 到處逛網頁 如此而已,要PGO程度好 可以多逛逛技術性較多的網頁
建議逛的是
各javascirpt benchmark 網頁+平常測試速度的網頁+常去網頁+負載重的網頁…
逛完後關閉FX,這時候會自動開始第二次編譯
5.第二次編譯完後,切換到編譯完的目錄 把編完的東西壓縮起來
以我的.mozconfig的設定是
cd ~/mozilla-1.9.1/obj-i686-pc-linux-gnu
make package
這個過程不能省略是因為dist裡的東西多是用 link 連結
make package是為了去掉這個情形,等壓縮完後在 obj目錄下的dist就會出現
firefox-3.1b3.en-US.linux-i686.tar.bz2 這就是完整 PGO 最佳化的FX
把這個copy出來後,別忘了要清理編完的東西 要不然下次編譯會出現難以預知的問題
cd ~/mozilla-1.9.1/obj-i686-pc-linux-gnu
make distclean
編譯部份大概就這樣 看起來雖然落落長,但只要run-firefox.sh、.mozconfig 搞定後
之後只要下一次指令 所以PGO編譯起來老實說沒什麼難度

附註:CFLAGS參數不要用 -mfpmath 這個參數會讓FX當掉
轉載至:the way to build PGO FX

沒有留言:

張貼留言