IncrediBuild分布式編譯的使用

2021-05-26 02:29:49 字數 2705 閱讀 8749

聯合編譯的意義在於充分利用網格中的閒置電腦資源提高我們的編譯效率。它主要由agents和coordinator server組成。agents主要作為工作機,分配出來的計算工作在這些電腦上完成。coordinator server負責分配工作,協調網路中的各個電腦的效能均衡。

聯合編譯的功能引入分為下面幾個要素:

1.  使能或禁止聯合編譯功能;

2.  檢查xgc是否存在;

3.  定義可用的程序數;

4.  中間編譯檔案;

5.  編譯命令;

1.1. 使能或禁止聯合編譯的引數設定

對於mtk平台,可以通過命令列方式引數「-disable_ib」,「-no_ib」或「-bm」。我們可以通過檢視指令碼make2.pl確認。

} elsif ($argv[0] =~ /-disable_ib/i) elsif ($argv[0] =~ /-no_ib/i) elsif ($argv[0] =~ /-bm/i)

1.2. 確認聯合編譯環境

接著系統開始檢查聯合編譯器以及系統是否支援聯合編譯,請看下面指令碼的檢查。首先,指令碼執行命令「$exec_xgc_result  = `xgconsole /nologo /silent /nowait tools//xgc_test.xml  2>&1`;」,確認是否存在聯合編譯器。

my $no_of_proc=1;

my $exec_xgc_result=999;

# $exec_xgc_result  = system("xgconsole /nologo /silent tools//xgc_test.xml /n");

$exec_xgc_result  = `xgconsole /nologo /silent /nowait tools//xgc_test.xml  2>&1`;

if  ("$exec_xgc_result" ne "")

else

" eq "") && ("$env" eq "domain_mtk"))

if ($disable_ib==0)

else

}其中,xgc_test.xml是比較簡單的。然後,通過環境變數確認os是否支援聯合編譯。

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

下面的指令碼是用來確認對vc++的聯合編譯特性的支援的。

my $exec_buildconsole=999;

#$exec_buildconsole  = system("buildconsole /n");

$exec_buildconsole  = `buildconsole  2>&1`;

if ($exec_buildconsole  =~ /incredibuild/)

" eq "" )

if ($disable_ib==0)

else

} else

if ( $exec_buildconsole==0 ) # support buildconsole

else  # not support buildconsole

1.3. 定義程序數

根據cpu個數設定編譯可建立的程序數,一般雙核cpu的程序數設為4各基本均衡了。

if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||

($action eq "c,r") || ($action eq "c,u") || ($action eq "scan")) > 1) *2;

if ($fullopts eq "") else

} else ";

} else ";}}

}}mtk還提供了通過「-o|-op|opt」來設定程序數。

if ($fullopts ne "")

else

}# end

$fullopts =~ s/"///"/g;

$fullopts = "/"$fullopts/"";

$fullopts =~ s/,/ /g;

$makecmd .= " " . join(" ", @mopts) . " $fullopts ";

}1.4. 中間編譯檔案

中間編譯檔案intermed.mak包括了需要編譯各個模組的依賴關係和編譯方法。

1.5. 編譯命令

(if /i $(bm_new) equ true /

(xgconsole /command="tools/make.exe  -fmake/intermed.mak -k -r -r $(strip $(cmd_argu))  " /nologo /profile="tools/xgconsole.xml" )  /

else /

(xgconsole /command="tools/make.exe  -fmake/intermed.mak -r -r $(strip $(cmd_argu))   " /nologo /profile="tools/xgconsole.xml" )  /

) /其中,xgconsole.xml規定了各種編譯工具的是否支援遠端工作和是否允許分段處理的特性。

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

按照xoreax incredibuild的說明我們可以在用gnumake等語言的編譯器使用聯合編譯。

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...