「Chromium」の版間の差分
(GN) |
|||
36行目: | 36行目: | ||
== GN == | == GN == | ||
情報源: [https://gn.googlesource.com/gn/+/main/docs/language.md GN Language and Operation] | 情報源: | ||
* [https://gn.googlesource.com/gn/+/main main - gn - Git at Google] | |||
* [https://gn.googlesource.com/gn/+/main/docs/language.md GN Language and Operation] | |||
GNはChromiumで採用されているBUILD.gnのビルド設定記述言語。 | GNはChromiumで採用されているBUILD.gnのビルド設定記述言語。 | ||
64行目: | 67行目: | ||
* create_bundle | * create_bundle | ||
* executable | * executable | ||
* group | * group: targetのグループ。 | ||
* shared_library | * shared_library | ||
* loadable_module | * loadable_module | ||
* source_set: 軽量仮想静的ライブラリー。 | * source_set: 軽量仮想静的ライブラリー。 | ||
* static_library | * static_library: .lib/.aファイル (source_setを使ったほうがいい)。 | ||
templateを使うことでカスタムtargetタイプを作れる。Chromeでは以下のtemplateを使っている。 | templateを使うことでカスタムtargetタイプを作れる。Chromeでは以下のtemplateを使っている。 | ||
74行目: | 77行目: | ||
* component: ビルドタイプに応じたsource_setかshred_library。 | * component: ビルドタイプに応じたsource_setかshred_library。 | ||
=== Configs === | === Variable === | ||
==== Configs ==== | |||
[configs] は名前付きオブジェクト。ディレクトリーやdefineを含むフラグの集合を指定する。[target] に適用され、依存targetに押し込まれる。 | [configs] は名前付きオブジェクト。ディレクトリーやdefineを含むフラグの集合を指定する。[target] に適用され、依存targetに押し込まれる。 | ||
88行目: | 93行目: | ||
一般的に、configs += “:myconfig” でデフォルトのリストに追記する。 | 一般的に、configs += “:myconfig” でデフォルトのリストに追記する。 | ||
=== Public configs === | ==== deps ==== | ||
targetにリンクされる依存関係。 | |||
==== Public configs ==== | |||
targetは依存している他のtargetに設定を適用できる。もっとも一般的な例はサードパーティーtargetだ。適切なコンパイルのためのヘッダーのためのdefineやディレクトリーincludeを必要とする。サードパーティーライブラリーと同様に、そのサードパーティーライブラリーを使用するtargetもコンパイルのために、設定を適用したいでしょう。 | |||
このために、適用したい設定のconfigを以下のように書く。 | このために、適用したい設定のconfigを以下のように書く。 | ||
102行目: | 110行目: | ||
public_configs = [ ":my_external_library_config" ] | public_configs = [ ":my_external_library_config" ] | ||
} | } | ||
依存targetは、public_depsとしてあなたのtargetに追加することで、他の依存ツリーレベルを前倒しできる。 | |||
static_library("intermediate_library") { | static_library("intermediate_library") { | ||
... | ... | ||
118行目: | 126行目: | ||
public_configsがconfig同士なのに対し、public_depsはtarget同士になる。基本はpublic_configsだろうか。 | public_configsがconfig同士なのに対し、public_depsはtarget同士になる。基本はpublic_configsだろうか。 | ||
==== sources ==== | |||
target用のソースファイルのリスト。 |
2023年12月6日 (水) 15:21時点における版
About
ChromiumはOSSのWebブラウザー。Google Chromeのベースコードになっている。
Debug
Logging
ChromiumはLOG/DLOGとVLOG/DVLOGの2系統のログ出力マクロが用意されている。それぞれ対応するオプションが異なる。VLOG/DVLOGが新しくて推奨されている。
情報源
- Chromium Docs - Tips for debugging on Linux
- How to enable logging
- base/logging.h - chromium/src - Git at Google
DLOG/DVLOGはis_debug=trueのときのみ有効になる。
- --log-level=0: LOG/DLOGの出力ログの制御。
- --v=0: VLOG/DVLOGの出力ログの制御。
- --enable-logging: is_debug=falseでもログ出力する?
Stacktrace
以下のようなコードでスタックトレースを出力できる (ChromiumOS Docs - How to get a stack trace at runtime for debugging purposes)。
#include "base/logging.h" #include "base/debug/stack_trace.h" LOG(ERROR) << base::debug::StackTrace(); base::debug::StackTrace().Print(); // stderr
CHECK/DCHECK
assert用のマクロがある (Chromium C++ style guide)。
DCHECKはDCHECK_IS_ONがtrueの場合にコンパイルされる。基本はこれを使う。
Option
起動オプションは [content/public/common/content_switches.cc - chromium/src - Git at Google] のソースコードにある。
GN
情報源:
GNはChromiumで採用されているBUILD.gnのビルド設定記述言語。
GN build configuration
情報源: Chromium - GN build configuration。
Chromiumのargs.gnのビルド設定で使用できる設定がいくつかある。
- is_debug=false
- dcheck_always_on=true
- is_component_build
- symol_level
- enable_nacl
- remove_webcore_debug_symbols
- target_cpu
- use_goma
- is_official_build
- is_chrome_branded
Targets
[target] というのがあって、これがビルドグラフのノードになる。一般的には、生成物のバイナリー、ライブラリーを指す。targetは別のtargetに依存する。組み込みのtargetは以下となる。gn help <targettype> で細かい情報を確認できる。
- action
- action_foreach
- bundle_data
- create_bundle
- executable
- group: targetのグループ。
- shared_library
- loadable_module
- source_set: 軽量仮想静的ライブラリー。
- static_library: .lib/.aファイル (source_setを使ったほうがいい)。
templateを使うことでカスタムtargetタイプを作れる。Chromeでは以下のtemplateを使っている。
- component: ビルドタイプに応じたsource_setかshred_library。
Variable
Configs
[configs] は名前付きオブジェクト。ディレクトリーやdefineを含むフラグの集合を指定する。[target] に適用され、依存targetに押し込まれる。
以下のように定義する。
config("myconfig") { includes = [ "src/include" ] defines = [ "ENABLE_DOOM_MELON" ] }
targetへのconfigの適用には以下のようにする。
executable("doom_melon") { configs = [ ":myconfig" ] }
一般的に、configs += “:myconfig” でデフォルトのリストに追記する。
deps
targetにリンクされる依存関係。
Public configs
targetは依存している他のtargetに設定を適用できる。もっとも一般的な例はサードパーティーtargetだ。適切なコンパイルのためのヘッダーのためのdefineやディレクトリーincludeを必要とする。サードパーティーライブラリーと同様に、そのサードパーティーライブラリーを使用するtargetもコンパイルのために、設定を適用したいでしょう。
このために、適用したい設定のconfigを以下のように書く。
config("my_external_library_config") { includes = "." defines = [ "DISABLE_JANK" ] }
それから、以下の記述でこのconfigはpublic configとしてtargetに追加される。これは依存しているtargetと同様にtargetにも両方に適用する。
shared_library("my_external_library") { ... # Targets that depend on this get this config applied. public_configs = [ ":my_external_library_config" ] }
依存targetは、public_depsとしてあなたのtargetに追加することで、他の依存ツリーレベルを前倒しできる。
static_library("intermediate_library") { ... # Targets that depend on this one also get the configs from "my external library". public_deps = [ ":my_external_library" ] }
targetは全依存物にconfigを進められる。all_dependent_configとしての設定のリンク境界に達するまで。これは推奨しない。代わりに、フラグの適用場所の制御にはpublic_depsを使う。
Chromeには、build/buildflag_header.gniのビルドフラグヘッダーシステムがある。コンパイラーdefineのdefineのために。
わかりにくいので整理する。
- public_configs: targetと依存targetの両方に指定したconfigが適用される。
- public_deps: targetと依存targetの両方に指定したtargetのconfigが適用される。
public_configsがconfig同士なのに対し、public_depsはtarget同士になる。基本はpublic_configsだろうか。
sources
target用のソースファイルのリスト。