IncrediBuild联合编译的使用
2009-06-15 17:32
411 查看
联合编译的意义在于充分利用网格中的闲置电脑资源提高我们的编译效率。它主要由Agents和Coordinator Server组成。Agents主要作为工作机,分配出来的计算工作在这些电脑上完成。Coordinator Server负责分配工作,协调网络中的各个电脑的性能均衡。
联合编译的功能引入分为下面几个要素:
1. 使能或禁止联合编译功能;
2. 检查XGC是否存在;
3. 定义可用的进程数;
4. 中间编译文件;
5. 编译命令;
其中,XGC_Test.xml是比较简单的。然后,通过环境变量确认OS是否支持联合编译。
下面的脚本是用来确认对VC++的联合编译特性的支持的。
MTK还提供了通过“-o|-op|opt”来设定进程数。
其中,XGConsole.xml规定了各种编译工具的是否支持远程工作和是否允许分段处理的特性。
按照Xoreax IncrediBuild的说明我们可以在用GNUMAKE等语言的编译器使用联合编译。
联合编译的功能引入分为下面几个要素:
1. 使能或禁止联合编译功能;
2. 检查XGC是否存在;
3. 定义可用的进程数;
4. 中间编译文件;
5. 编译命令;
1.1. 使能或禁止联合编译的参数设定
对于MTK平台,可以通过命令行方式参数“-disable_ib”,“-no_ib”或“-bm”。我们可以通过查看脚本make2.pl确认。} elsif ($ARGV[0] =~ /-disable_ib/i) { $disable_ib = 1; } elsif ($ARGV[0] =~ /-no_ib/i) { $disable_ib = 1; } elsif ($ARGV[0] =~ /-bm/i) { $disable_ib = 1; } |
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 "") { $exec_xgc_result=99; # print "XGConsole not found"; } else { if (("$ENV{/"TERM/"}" eq "") && ("$ENV{/"USERDOMAIN/"}" eq "DOMAIN_MTK")) { $disable_ib = 1; print " WARNING: XGConsole is supported but it's NOT in telnet mode. TERM is not defined! /n"; } if ($disable_ib==0) { $exec_xgc_result=0; # print "XGConsole found"; } else { $exec_xgc_result=99; } } |
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <BuildSet> <Environments> </Environments> </BuildSet> |
my $exec_buildconsole=999; #$exec_buildconsole = system("BuildConsole /n"); $exec_buildconsole = `BuildConsole 2>&1`; if ($exec_buildconsole =~ /IncrediBuild/) { if ( "$ENV{/"TERM/"}" eq "" ) { $disable_ib = 1; print " WARNING: BuildConsole is supported but it's NOT in telnet mode. TERM is not defined! /n"; } if ($disable_ib==0) { $exec_buildconsole=0; #print "/nBuildConsole found"; } else { $exec_buildconsole=99; } } else { $exec_buildconsole=99; #print "/nBuildConsole not found"; } if ( $exec_buildconsole==0 ) # support BuildConsole { system "perl tools//RunMsdev.pl"; $msdev = 'BuildConsole msdev'; } else # not support BuildConsole { $msdev = 'msdev'; } |
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")) { if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) { if ( $exec_xgc_result==0 ) { $no_of_proc = $ENV{"NUMBER_OF_PROCESSORS"}*2; if ($fullOpts eq "") { $fullOpts = "CMD_ARGU=-j$no_of_proc"; } else { $fullOpts .= ",-j$no_of_proc"; } } else { if ($fullOpts eq "") { $fullOpts = "CMD_ARGU=-j$ENV{/"NUMBER_OF_PROCESSORS/"}"; } else { $fullOpts .= ",-j$ENV{/"NUMBER_OF_PROCESSORS/"}"; } } } } |
if ($fullOpts ne "") { # Fix build errors when "parallel jobs processing" fuction enabled by argument "-o|-op|-opt" in command line my @temp = @mOpts; @mOpts = (); foreach (@temp) { if ($_ =~ /^/s*(-j|--jobs)/) { $fullOpts .= ",$_"; } else { push(@mOpts,$_); } } # 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" ) / ) / |
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Profile FormatVersion="1"> <Tools> <Tool Filename="perl" AllowRemote="true" /> <Tool Filename="make" AllowIntercept="true" /> <Tool Filename="tcc" AllowRemote="true" /> <Tool Filename="tcpp" AllowRemote="true" /> <Tool Filename="armasm" AllowRemote="true" /> <Tool Filename="armcc" AllowRemote="true" /> <Tool Filename="armcpp" AllowRemote="true" /> <Tool Filename="strcmpex" AllowRemote="true" /> <Tool Filename="warp" AllowRemote="true" /> <Tool Filename="armar" AllowRemote="false" /> <Tool Filename="fromelf" AllowRemote="false" /> </Tools> </Profile> |
相关文章推荐
- Qt MinGW 使用联合编译IncrediBuild
- Qt MinGW 使用联合编译IncrediBuild
- 解决使用IncrediBuild联合编译出现error C2858的问题
- IncrediBuild联合编译的使用
- Qt MinGW 使用联合编译IncrediBuild
- Qt MinGW 使用联合编译IncrediBuild
- IncrediBuild联合编译的使用
- IncrediBuild联合编译的使用
- Qt MinGW 使用联合编译IncrediBuild
- MTK 编译详解以及IncrediBuild联合编译的使用默认分类
- 使用GCC和NASM在Linux下联合编译
- 推荐个联合编译软件 incredibuild
- 使用GCC和NASM在Linux下联合编译
- 使用预编译头的工程联合编译有C1027问题的解决方法(2012/10/17)
- IncrediBuild 3.10 联合编译器 使用破解工具“再用一个月”仍然无法使用
- IncrediBuild分布式编译的使用
- IncrediBuild 进行联合编译
- IncrediBuild 进行联合编译
- 安装windows补丁导致Incredibuild联合编译失效
- IncrediBuild 进行联合编译