- config, generate heder and defines
- compile
- link
- relocate resource and exe files
- combine all to rom image
首先,這一篇(要用IE 或IE Tab來看,因為裡面的圖用了IE特殊的script )有說明build phase. 出乎意外的是:
- Compile
- Sysgen
- Release Copy
- Make run-time image
文章的圖對於各build tool 之間的關係說得很仔細:
所以blddemo.bat 是最大的batch program,做了所有的事。依據呼叫cebuild.bat, buildrel.bat 和makeimg.exe。
cebuild.bat 作 上面.. 1.Compile 和 2.sysgen 的動作。
所以sysgen 並沒有compile 囉?
blddemo.bat 可以有以下使用法:
blddemo [clean | noclean] [rel | norel] [-q | -qbsp] [Cebuild.bat parameters]clean, noclean - clean 的目標是指%_PROJECTROOT%\Cesysgen 和 %_PLATFORMROOT%\Cesysgen。
當有修改 %_WINCEROOT%\Public\CEBASE\OAK\Misc\Cesysgen.bat 時,才需要clean。
含有environment variable 中,以SYSGEN 和BSP 開頭的變數有變更時,也需要clean。
rel, norel - norel 大概是指要不要自動將 compile完的file copy 到release folder,及之後的動作(makeimg)。
-q - 這是pass給cebuild.bat 的參數, -qbsp 是告訴cebuild 只要build plaform folder以下的source。 -q 是說 ? 有點conflict.. 好像說,所有source 和sysgen 變數都沒有改變。
cebuild.bat parameters - 是任何呼叫cebuild.bat 時傳遞的參數。
在command line 使用blddemo.bat 來build image的話,可以先設定好環境變數:
set BLDDEMO_MI_LOG=1這樣blddemo.bat會在目前目錄下產生
- Makeimg.out : makeimg.bat 的log
- SysgenSettings.out : sysgen 在做完dependency check 後的setting.
Cebuild.bat
- 在%_WINCEROOT%\Public\ 中,所有env var : _DEPTREES 中所包含的 folder name,一一的到該目錄下執行 build.exe 來compile source code。
- 對每一個_DEPTREES 中包含的item XXX,執行 Sysgen.bat -p XXX 。
Sysgen.bat 將會 還會依照cesysgen.bat 產生的module 需求,buid module。
Sysgen.bat 還會build %PROJECTROOT%\Oak\Misc 下的module。 - 到%_PLATFORMROOT%\%_TGTPLAT% 作build.exe,compile hardware platform的module
為此,使用Cebuild.bat時,可以加上 " -q " 叫cebuild.bat不要呼叫build.exe將source code重新compile,直接叫sysgen 重新link就好。
Sysgen.bat
真的是作link的動作...
sysgen.bat 將Cesysgen.bat中指定的所有module,用nmake.exe將各個lib link起來。
- sysgen.bat 到%_PROJECTROOT%\Oak\Misc中參考Cesysgen.bat,設定好適當的envvar。
- 參考 %_WINCEROOT%\Public\Common\Cesysgen 下的makefile,如果有-p option時,則follow -p option 指定的 Project ,參考 %_WINCEROOT%\PBWorkspaces\<Project Name%gt;\Cestsgen 下的makefile。參考這些makefile,作以下..
- Create Target system directory
- 將Cesysgen.bat中指定的 .lib link 起來
- Call Res2res.exe, 將所有resource file 合併起來
- call Cefilter.exe 處理 CE header file 和其他source file,
CE header file 中有些comment 被用來作condition statement : @CESYSGEN。
利用這些condition statement,可以讓Cefilter變更處理的動作。 - Cefilter.exe處理%_COMMONPUBROOT%以下四個folder中的file,並且output到 %PROJECTROOT%\Cesysgen\的對應位置:
- \Sdk\Inc\*.* ==>\Sdk\Inc
- \Oak\Inc\*.* ==>\Oak\Inc
- \Ddk\Inc\*.* ==>\Ddk\Inc
- \Oak\Files\Common\*.* ==> \Oak\Files
- Copy modules 到target directory
- Sysgen.bat會將Error輸出log到%_WINCEROOT%\Build.log中
stsgen [-c] [-p Tree] [NmakeTarget] [NmakeTarget] ...-c : Run Nmake.exe時, 加上clean 參數
-p Tree : 對 Tree 作sysgen,當沒有指定時,對common project 作 (?)
NmakeTarget : 指定build Target module就好,當沒有指定時,sysgen 對所有Cesysgen.bat中列出的module作sysgen。
sysgen -p wceshell這個動作指示sysgen build/link wceshell module,並且copy 到 target folder
Cesysgen.bat
?
簡單的說:
- build.exe 是compile,但是build.exe產生的是lib (也是就ar 起來的一堆obj)
- sysgen 是link,依照cesysgen.bat 的內容將各 lib link成target : exe, dll
- resource arrangement - 略
- makeimge : 依照binary image script (*.bib) 將各exe, dll , res,... 合併成一個image。
沒有留言:
張貼留言