uos-20sp1 龍芯系統 編譯51版本火狐瀏覽器,公司有npapi插件 52版本后不支持


2020-04-22 13:48:14

正規的龍芯系統需要以下依賴  做參考

1.從龍芯官網上下載源碼 源碼下載:git clone git://cgit.loongnix.org/browser/mozilla-esr52.git

2.安裝以下編譯依賴庫 yum install zbar-gtk-devel dbus-devel dbug-glib-devel bzip zip hunspell alsa-lib-devel wireless-tools-devel libXt-devel mesa-libGL-devel startup-notification-devel openssl openssl-devel pulseaudio-libs pulseaudio-libs-devel pulseaudio-libs-glib2 pulseaudio libevent-devel libcurl-devel autoconf213 gstreamer-devel gstreamer gstreamer-plugins-base gstreamer-plugins-base-devel

3.編譯 進入Firefox 目錄:autoconf-2.13 ./mach configure; ./mach build

下面命令如果報錯找不到手動打一邊 有可能是編碼的問題。

源碼在uos下編譯有錯誤建議使用好一點的文檔編輯器查看

筆者使用的是qt creator在應用商店里可以安裝 用命令行打開 創建新項目,導入現有項目 就可以當作編輯器查看文件了。

 

 安裝步驟如下:

載火狐瀏覽器源碼

wget  https://ftp.mozilla.org/pub/firefox/releases/51.0/source/firefox-51.0.source.tar.xz
不要用歸檔管理器解壓 uz -d firefox-51.0.source.tar.xz (為什么這個破系統太卡有時會直接卡死) 進入文件夾沒有權限添加權限 
chmod 755  ./

 

 
          
        

編譯命令:

編譯命令 編譯時會有一堆錯誤大多是缺依賴包

make -f client.mk build 

 

不同的系統版本需要的依賴不同,朋友們可以根據報錯安裝下面的依賴,

筆者需要的依賴如下:

apt-get install g++ g++是c++ 編譯器也可以安裝 build-essential (集合編譯包) 下面安裝alsa驅動的時候會提示安裝
apt
-get install libgtk-3-dev libgtk2.0-dev 請謹慎安裝這個東西,有問題會導致沒有界面要從新安裝系統 pkg-config --modversion gtk+-3.0 查看是否安裝成功 apt-get install libgconf2-dev apt-get install libdbus-glib-1-dev apt-get install libncurses-dev

 

autoconf編譯: 
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz
tar -xvzf autoconf-2.13.tar.gz
cd autoconf-2.13/
./configure --program-suffix=2.13         –program-suffix=SUFFIX 指定將被加到所安裝程序的名字上的后綴.
make
make install

 

alsa 的編譯筆者參考 https://zhidao.baidu.com/question/1988026317702934907.html

安裝alsa驅動前必須要先安裝編譯內核必須的工具組件,如下:#/etc/init.d/alsa-utils stop 關閉聲卡

 建議先下載編譯軟件包,缺少依賴再安裝下面包 #apt-get install build-essential ncurses-dev gettext xmlto #apt-get  install linux-headers-`uname -r` libncursesw5-dev apt-get install libpulse-dev apt-get install  libxt-dev 
 wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.2.2.tar.bz2
 #wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.2.2.tar.bz2 不用編譯記錄一下
#wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.25.tar.bz2 不用編譯記錄一下
 tar xjf
alsa-lib-1.2.2.tar.bz2

進入各個文件夾編譯三步曲 ./configure make make install

alsa
-driver-1.0.25.tar.bz2 這個文件編譯可能有問題。

alsa-driver-1.0.25.tar.bz2 筆者最后沒有編譯成功,報錯有內置的驅動。筆者不願意卸載原驅動,從新安裝聲卡可能會有問題。
筆者沒有編譯成功,也成功編譯過了這一步

 

解決錯誤:

 error: ‘CarrySet’ is not a member of ‘js::jit::Assembler’
             masm.branchAdd32(Assembler::CarrySet,     ......  

CarrySet’是一個枚舉 值為11     定義在js/src/jit/none/MacroAssembler-none.h 里  
刪除這個函數。 masm.branchAdd32(Assembler::CarrySet, ......    我是沒有辦法解決了只能刪除。有朋友解決了可以給我評論謝謝。

 

沒有 MAsmJSLoadHeap、MAsmJSStoreHeap類  mir->barrierAfter() mir->barrierBefore()  mir->isAtomicAccess()  mir->needsBoundsCheck()  函數錯誤   js/src/jit/MIR.h  替換下面2個類    參考 MWasmMemoryAccess 類改寫

class MAsmJSLoadHeap
  : public MUnaryInstruction,
    public MAsmJSMemoryAccess,
    public NoTypePolicy::Data
{
    MAsmJSLoadHeap(MDefinition* base, Scalar::Type accessType, MemoryBarrierBits barrierBefore = MembarNobits,
                   MemoryBarrierBits barrierAfter = MembarNobits)
      : MUnaryInstruction(base),
        MAsmJSMemoryAccess(accessType),
      barrierBefore_(barrierBefore),
      barrierAfter_(barrierAfter)
  //MAsmJSLoadHeap(MDefinition* base, Scalar::Type accessType) //todo yuanban
    //: MUnaryInstruction(base),
     //MAsmJSMemoryAccess(accessType)
    {
        setResultType(ScalarTypeToMIRType(accessType));
    }

  public:

    INSTRUCTION_HEADER(AsmJSLoadHeap)
    TRIVIAL_NEW_WRAPPERS

    MDefinition* base() const { return getOperand(0); }
    void replaceBase(MDefinition* newBase) { replaceOperand(0, newBase); }

    bool congruentTo(const MDefinition* ins) const override;
    AliasSet getAliasSet() const override {
        return AliasSet::Load(AliasSet::AsmJSHeap);
    }
    AliasType mightAlias(const MDefinition* def) const override;
    //  todo
    MemoryBarrierBits barrierBefore_;
    MemoryBarrierBits barrierAfter_;
    MemoryBarrierBits barrierBefore() const { return barrierBefore_; }
    MemoryBarrierBits barrierAfter() const { return barrierAfter_; }
    bool isAtomicAccess() const { return (barrierBefore_ | barrierAfter_) != MembarNobits; }
};

class MAsmJSStoreHeap
  : public MBinaryInstruction,
    public MAsmJSMemoryAccess,
    public NoTypePolicy::Data
{
    MAsmJSStoreHeap(MDefinition* base, Scalar::Type accessType, MDefinition* v, MemoryBarrierBits barrierBefore = MembarNobits,
                    MemoryBarrierBits barrierAfter = MembarNobits)
      : MBinaryInstruction(base, v),
        MAsmJSMemoryAccess(accessType),
        barrierBefore_(barrierBefore),
        barrierAfter_(barrierAfter)
    {}

  public:
    INSTRUCTION_HEADER(AsmJSStoreHeap)
    TRIVIAL_NEW_WRAPPERS

    MDefinition* base() const { return getOperand(0); }
    void replaceBase(MDefinition* newBase) { replaceOperand(0, newBase); }
    MDefinition* value() const { return getOperand(1); }

    AliasSet getAliasSet() const override {
        return AliasSet::Store(AliasSet::AsmJSHeap);
    }
    //  todo
    MemoryBarrierBits barrierBefore_;
    MemoryBarrierBits barrierAfter_;
    MemoryBarrierBits barrierBefore() const { return barrierBefore_; }
    MemoryBarrierBits barrierAfter() const { return barrierAfter_; }
    bool isAtomicAccess() const { return (barrierBefore_ | barrierAfter_) != MembarNobits; }
};

 

錯誤 error: ‘class js::jit::MAsmJSAtomicBinopHeap’ has no member named ‘needsBoundsCheck’; did you mean ‘isBoundsCheck’?      if (mir->needsBoundsCheck()) {               isBoundsCheck 
啥也不用說了 編譯器讓咋改就咋改。needsBoundsCheck()替換為isBoundsCheck()

 大功告成        firefox在     obj-mips64el-unknown-linux-gnu/dist/bin里  。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM