2010年10月2日土曜日

Build Instructions (Windows)

Windowsの開発環境はVS2005以降ということで、ここではVS2008を使用。

VS2008には
SP1KB967631KB960075KB957912KB971092
が必要。
ChromeではダウンロードできずIEで取得。

SP1はすでに入っているので、
KB967631KB960075KB957912KB971092
をインストールすると

『このソフトウェア更新の対象製品はこのコンピュータにインストールされていません。[キャンセル] をクリックして、セットアップを終了してください。』

と表示される。

KB971092をインストール時に回避方法が
http://support.microsoft.com/kb/982062/
にあると出てくるが、意味不明。
ここでは、パッチは当てない。


次に、Windows 7 SDKをインストール。30分ほどかかる。
Windows SDK Configuration Toolを実施したが適用されないので、手動で実施。



公式ドキュメントにはまだ記載がないようだが、Chromiu-devに記載があるように、DirectXを使っているためDirectX SDKのインストールが必要。

----------
You're right, d3dx9.h isn't in the Platform SDK. Installing the
DirectX SDK is the correct solution. I'll update the prerequisite
instructions.
----------

ちなみに、DirectX SDKを入れないでビルドすると<d3dx9.h>が見つからないという下記のようなエラーがでる。

chrome\Debug\obj\libGLESv2\BuildLog.htm(86): e:\chromiumtrunk_LKGR\src\third_party\angle\src\libGLESv2/Program.h(13) : fatal error C1083: include ファイルを開けません。'd3dx9.h': No such file or directory

DirectXここから取得。



chrome/chrome.slnをダブルクリックしてVS2008起動。ソリューションエクスプローラで(chrome)ディレクトリにあるchromeプロジェクトを右クリックしてDebug版でビルド実施。

chrome/Debug/chrome.exeが生成されているので実行。
Debug版だがそこそこ遅くない。




あと、よく見かけるgclient runhooks -fやgclient runhooks --forceはgclient runhooks --helpの最後に記載があるようにDeprecatedのよう。
-----
E:\chromiumtrunk_LKGR>gclient runhooks --help
Usage: gclient.py runhooks [options]

Runs hooks for files that have been modified in the local working copy.

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -j JOBS, --jobs=JOBS  Specify how many SCM commands can run in parallel;
                        default=1
  -v, --verbose         Produces additional output for diagnostics. Can be
                        used up to three times for more logging info.
  --gclientfile=CONFIG_FILENAME
                        Specify an alternate .gclient file
  --deps=OS_LIST        override deps for the specified (comma-separated)
                        platform(s); 'all' will process all deps_os references
  -f, --force           Deprecated. No effect.
-----

2010年10月1日金曜日

Getting the Code

直接SVNから取得するとめちゃくちゃ時間がかかるとのことで、tarballを取得。

スペースのないパスに置く必要があるようで、解凍して
E:\chromiumtrunk
に配置。

1.6GBとか記載があるが、実際には830MBのchromium.r59911.tgz.tarを解凍して、2.67GB。解凍時間は約1時間。

解凍したディレクトリの中身を壊したときに、また1時間かかって解凍するのはつらいので、
E:\chromiumtrunk.r59911
として解凍済みのデータをコピーしておく。

depot toolsはスクリプトのパッケージで、SVNから取得するか、zipかtar.gzを取得でき、ここではzipで取得。
E:\depot_tools
に解凍。
ここに環境変数PATHを設定。

Check out the sources
gclient config を最初の一回だけやればワーキングディレクトリのセットアップは完了。.glientファイルがワーキングディレクトリに作成される。最初にtarballを取得していればgclient configは不要。この後は、ワーキングディレクトリのどこからでもgclient syncを実行すれば更新ができる。


最新のコードを取得
まず、Chromium Buildbot waterfallで、OPENならOK。CLOSED ならコンパイルかテストに失敗。なので、OPENかを確認してから、gclient syncを実行。

ここでは、Windowsで作業するので、Windowsの項目をみると
gclient config http://src.chromium.org/svn/trunk/src
を実行と記載があるが、最初にtarballを取得しているので、これは不要。

ちなみにgclientがある状態でgclient configを実施すると下記エラーがでる。

Error: .gclient file already exists in the current directory


CLOSEDの際に、OPENになるのを待たなくてもよいように回避方法が用意されている。
下記(1)と(2)のようにgclient syncの第二URLを指定することで、「ほとんど最新の緑」のリビジョンが取得できる。

(1)ユニットテスト(デバッグモード)が通った最新のリビジョンを取得する場合(プラットフォーム固有のレイアウトテストの完了は未確認)
gclient config http://src.chromium.org/svn/trunk/src http://chromium-status.appspot.com/lkgr

(2)ユニットテスト、および各プラットフォーム固有のレイアウトテストが通った、最新のリビジョンを取得(レイアウトテストは時間がかかるため1時間かそれ以上古いリビジョンになる)
上記の例の第二URLを下記に変える
http://build.chromium.org/buildbot/continuous/linux/LATEST/REVISION
http://build.chromium.org/buildbot/continuous/mac/LATEST/REVISION
http://build.chromium.org/buildbot/continuous/win/LATEST/REVISION


この設定を上書きしたい場合は
コマンドライン上で、下記を実施。

gclient sync --head



現在(2010/09/26 20:09)は赤(Tree is closed)。ここでは、ユニットテスト版のみ通ったものを取得。
.glientファイルを下記

solutions = [
  { "name" : "src",
    "url"  : "http://src.chromium.org/svn/trunk/src",
    "safesync_url" : "http://chromium-status.appspot.com/lkgr"
  },
]

のようにしても同様とのことで、既存の.glientファイルのurlの行の直下に、下記
"safesync_url" : "http://chromium-status.appspot.com/lkgr",

を追加して

cd e:\chromiumtrunk_LKGR
gclient sync

を実施。30分ほどで完了。

最後に

gclient runhooks
でVisualStudioのslnファイルやプロジェクトファイルを更新。


なお、最初にtarballを取得しないですべてのファイルを直接取得する場合は、
gclient config
で.gclientファイルを生成してから
gclient sync

このとき、アンチウイルスソフト(実際にはAviraを使用)が誤検出したため取得に失敗。取得先のフォルダを検出の対象外に設定すれば問題なく取得できた。

tarballを使わないで職説取得するとslnファイル等ないため、
gclient runhooks
でslnファイル等を自動生成


現在(2010/10/01)のバージョンである"6.0.472.63"を取得する場合は

E:\chromiumtrunk_v6.0.472.63>gclient config http://src.chromium.org/svn/releases/6.0.472.63
すると.gclientファイルが生成される


solutions = [
  { "name"        : "6.0.472.63",
    "url"         : "http://src.chromium.org/svn/releases/6.0.472.63",
    "custom_deps" : {
    },
    "safesync_url": "",
  },
]

その後、
gclient sync
および
gclient runhooks
でOK。

2010年9月22日水曜日

Using depot_tools

Using depot_tools
depot toolsはソースコードリポジトリと開発プロセスとを関連付けるツールで、下記を含む。(訳間違いあるかも)
glient: repo tool(http://www.google.co.jp/search?q=repo+git&qscrl=1)みたいなもので、コードレビューの機能はないが、Win,Mac,Linuxでも使えるSubversionとGitのラッパーみたいなもの。
gcl: コードレビューツールであるrietveldのSubversion用。これが、Presubmit Scriptsを実行する。で、このPresubmitScriptsというのがPythonで書かれててアップロード(レビュー前?)やコミット前に、自動で静的テストやコーディング規約のチェックをしてくれる。APIが定義されていろいろ自動チェックがカスタマイズできるっぽい。
git-cl: gclのGit用。
hammer: ChromeをビルドするためのSConsのラッパーで、もう使われてない。
svn:いわゆるsvnがWindows版に限ってはdepot toolsに含まれているから別にインストールする必要はない。
drover: svnのコミットを瞬く間に元に戻す。
cpplint.py: C++コーディングスタイルのチェック。
presubmit_support.py: プレサブミットチェック(PRESUBMIT.py)を実行する。

repo:repo toolどこが本家かわからんです。
trychange.py: ?(Try server tool. It is wrapped by gcl try and git-try.)
git-try: GitユーザのためのTry change tool。
wtf: chromium osのブランチを表示。
weekly: 特定の日以降の特定の開発者のGitチェックインを表示。
git-gs: git grepのラッパー。
zsh-goodies: zshユーザ向け。

Disable auto update
depot toolsを自動でアップデートしない方法が記載されてるが、その後に、Chromeユーザはアップデートされることを期待しているとか記載あるため、自動アップデートのまま。

.glientファイルはマスターファイル

DEPSファイルは依存関係を管理するファイル

ユニットテストにはgoogletestを使用。

Try Serverはコミット前のパッチをマルチプラットフォームで自動テストしてくれる仕組みを提供。

2010年9月21日火曜日

内容(予定)

  • コア技術の探索
    • マルチプロセスとマルチスレッド
      • プロセス間通信
    • マルチプラットフォーム
      • スワップ処理
      • プロセス/スレッド
      • GUIフレームワーク
    • オムニボックス
    • 国際化
    • サンドボックス

  • 開発環境、スタイル
    • Win/Mac/Linuxのコードの管理
    • svn/git
    • CI/テスト
    • コーディングルール
    • ツールやTIPS