搜尋原始碼
如要查看及搜尋 Fuchsia 原始碼,做法如下:
- 下載 Fuchsia 原始碼: 需要在本機複製 Git 存放區。
- 在程式碼原始碼中查看: 功能豐富的來源檢視器,支援完整導覽和編輯功能。
- 在 Fuchsia Git 存放區中查看: 基本存放區檢視者。
總覽
第一方開放原始碼程式碼大多位於「fuchsia.git」 存放區這段程式碼中的大部分程式碼 存放區採用階層式的「區域」樹狀結構。
區域有一般的內部和依附元件結構。fuchsia.git
存放區本身也遵循區域結構
專屬結構
具體來說,系統可以考慮 fuchsia.git
的 src
頂層目錄
根區域它符合某個區域所需的結構,而且是
幾個地方的子區域不過,您還必須建立區域目錄
出現在 src
旁邊,而非裡面,例如third_party
。您可以輸入
應該考量到全球所有需要依賴的領域這裡還提供了其他地點
src
之外,包含後續頂層區域,例如位置:vendor/*
。
目前開放所有區域使用開放原始碼 third_party
。
無論是開放原始碼或封閉原始碼存放區,一樣遵循慣例
且對應至 fuchsia.git 中 src
的子目錄。目前,
「花瓣」幾乎但我們會「推廣」區域
目前位於 fuchsia.git
存放區中
因為系統會穩定
vendor/*
目錄包含封閉原始碼,並由供應商加以編排
程式碼專區//vendor
以外的任何項目皆無法依附於 //vendor
。
系統支援不同供應商之間的依附元件,vendor/A
可以
依附於 vendor/B
。
products
目錄包含可建構的產品清單。只有部分通知
產品相當小,建構速度也很快 (例如核心
其他產品則較詳細 (例如
workbench_eng 產品)。
sdk
目錄包含構成 Fuchsia API 介面的程式庫。
其中一些程式庫是用戶端程式庫,有些則是 FIDL 程式庫。
這些程式庫並未發行於 Fuchsia SDK 中。所有非測試
FIDL 程式庫應放在 //sdk/fidl
目錄中,並依
FIDL 程式庫名稱,包括只能在
Fuchsia 平台來源樹狀結構。這類程式庫可使用
internal
的 sdk_category
,會導致廣告素材無法發行
或是直接加註 internal
提醒使用者預期的用途
大多數的第三方依附元件會儲存在獨立的存放區中。這些 只有在需要支援 Google Cloud 服務 下列來源樹狀結構設定:
- 啟動。 這個來源樹狀結構設定包含足夠的程式碼,可以建構 總結產品。
- 開放原始碼。這個來源樹狀結構設定包含所有開放原始碼 在《Fuchsia Source Tree》中
- 所有來源。這個來源樹狀結構設定包含所有開啟和關閉的項目 前往 Fuchsia 來源樹狀結構中的原始碼。
請參閱這份指南,瞭解如何撰寫 您在 README.fuchsia 檔案中的第三方程式碼。
領域
大部分程式碼都是以遞迴方式組成的區域樹狀結構。每個部分都有 內部和依附元件結構,協助使用者瞭解程式碼結構 整個專案
目錄結構
每個區域都必須含有 OWNERS 檔案 說明文件和測試區域也可能包括二進位檔、圖書館、驅動程式 和其他原始碼此外,區域可以有子區域, 模式:
OWNERS
- 每個區域或子區域都必須有擁有者清單
BUILD.gn
- 建立檔案,定義網頁的標準目標 區域負責人除了可以加入額外的指定目標之外, 做為標準目標
docs/
- 這個目錄應包含這個區域工作者的文件
- 給最終開發人員 (或福希亞其他地區工作人員) 適用的文件 應位於頂層文件或 SDK 存放區
bundles/
- 這個目錄含有這個區域的套件目標套裝組合。每個區域
至少應包含一個包含該區域單元測試的
tests
組合,但 也可能包含其他套裝組合。
- 這個目錄含有這個區域的套件目標套裝組合。每個區域
至少應包含一個包含該區域單元測試的
bin/
(非必要)lib/
(非必要)drivers/
(非必要)examples/
(非必要)tests/
(非必要)- 這個目錄包含橫跨多個原始碼的整合測試
- 如果不同區域可能有子目錄的檢測,則建議使用 新增 OWNERS 檔案給不同的測試目錄,清楚說明擁有權。
- 最好將包含單一二進位檔或程式庫的單元測試置於適當位置 和測試的程式碼
testing/
(非必要)- 這個目錄包含有助於編寫測試的公用程式和程式庫
- 這個目錄中的目標只能透過測試專用的目標來依附。
third_party/
(非必要)- 大部分的 third_party 依附元件應位於不同的存放區
- 只有在符合下列所有條件時,您才需要在特定區域中加入 third_party 依附元件:
- 根據政策,該程式碼必須存放在第三方目錄中
- 您打算推動上游 (即進行重大變更,且不打算這麼做) 整合上游日後的變更)
- 您為程式碼重新命名 (a) 與上游不相符, (b) 並未在 Fuchsia 來源樹狀結構
- 程式碼為開放原始碼
- 前往以下頁面,進一步瞭解
third_party
來源版面配置: 第三方原始碼管理
tools/
(非必要)- 此目錄包含領域提供的指令列工具。這些 通常可以 (或必須) 為開發主機建構的項目 而不是 Fuchsia。不一定會在 但開發人員也可以使用它們不一定會存在 並未在 SDK 中發布 但確實不是供開發人員直接使用 而不是此處
- 其中應包含一個以每個工具 (或集合) 命名的子目錄
每個相關工具都有各自的自然名稱)
並整合到頂層
tools/BUILD.gn
檔案中。
[subareas]
(非必要)- Subareas 應遵循通用區域範本
- 請勿建立深層的巢狀區域結構 (例如,三條應有的數量)
除了內部機構外,區域也可能使用額外的目錄 列舉的目錄
擁有者
每個區域和子區域都必須包含一個 OWNERS 檔案。目錄可能包含
OWNERS
,但不含範圍,例如:頂層 products
/src/lib
目錄的子目錄或子目錄。缺少
系統將 OWNERS
檔案的擁有者與其上層目錄相同
位於同一個區域
有一個例外狀況是 //src/tests
目錄,用於從不同區域進行測試
涵蓋系統多個層面 (而不只是特定區域)
預計會上線因此,每個區域應該新增 OWNERS 檔案
就存在於這個目錄中的測試
依附元件結構
除了取決於本身因素,區域也只能使用頂層
build
、sdk
和 third_party
目錄,以及 lib
目錄
在樹狀結構中的任何位置:
//build
//sdk
//third_party
//src/**/lib/
在建構系統中標示為僅供測試的區域,
此外,依附於該區域和祖系中的 testing
目錄:
(../)+testing/
(僅限 testonly=true 目標)
標準目標
每個區域和子區域都必須在對應的 頂層 BUILD.gn 檔案:
tests
- 這個區域的所有測試
- 新增子目錄後,請將測試目標新增至 父項目錄的測試目標。
命名慣例
為檔案和目錄命名時,最佳做法通常是使用名稱
確保內容簡短且明確如果名稱包含多個
字詞之間應以底線分隔,例如 long_file_name
。
範例
以下是 fortune
目錄的範例。
import("//build/drivers.gni")
import("//build/components.gni")
group("fortune") {
testonly = true
deps = [
":pkg",
":tests",
]
}
group("tests") {
testonly = true
deps = [
":fortune_tests"
]
}
executable("bin") {
output_name = "fortune"
sources = [
"fortune.cc"
]
}
executable("test") {
testonly = true
output_name = "fortune-test"
sources = [
"test.cc"
]
}
fuchsia_component("component") {
manifest = "meta/fortune.cml"
deps = [ ":bin" ]
}
fuchsia_package("pkg") {
package_name = "fortune"
deps = [ ":component" ]
}
fuchsia_unittest_package("fortune_tests") {
deps = [ ":test" ]
}
存放區版面配置
本節描述 Fuchsia 來源樹狀結構的目錄版面配置。
未加上星號的項目是 fuchsia.git 存放區中的目錄或檔案。
已加星號的 (*
) 項目是對應至以下項目的個別存放區:
使用 jiri
的目錄結構 (預先建構的目錄除外,
CIPD 填入)。
.clang-format
.dir-locals.el
.gitattributes
.gitignore
AUTHORS
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE
OWNERS
PATENTS
README.md
rustfmt.toml
sdk/banjo/fuchsia.hardware.gpio/
sdk/banjo/...
sdk/fidl/fuchsia.media/
sdk/fidl/fuchsia.mediacodec/
sdk/fidl/...
sdk/lib/ddk/
sdk/lib/fit/
sdk/lib/fidl/
sdk/lib/zircon/
sdk/lib/...
.gn
BUILD.gn
build/
bundles/
configs/
infra/
configs/
generated/
integration/
products/
scripts/
docs/
examples/
third_party/
boringssl/
*icu/
*rust_crates/
*...
*
prebuilt/
chromium/
*llvm/
*
tools/
banjo/
fidl/bin/backend/{c,cpp,dart,go,llcpp,rust}
fidl/bin/frontend/
fidl/docs/
fidl/examples/
fidl/tests/
src/
lib/
cobalt/
component/
connectivity/
developer/
experiences/
*graphics/
identity/
media/
storage/
testing/
ui/
scenic/
updater/
virtualization/
zircon/kernel/
zircon/drivers/
zircon/userspace/
vendor/
[closed-source code from various vendors]
*
演化
隨著系統穩定下來,您可以將 fuchsia.git 中的區域升級為另外的 與存放區一般來說,當我們比較多個存放區時 確保區域和系統其餘部分之間的介面 (必須經過頂層 OWNERS 核准)。
新的程式碼可以是:
- 新增至 fuchsia.git 的現有目錄
- 已新增至現有區域的頂層區域或子區域
- 新增至現有存放區
- 已新增至新的存放區 (需要頂層 OWNERS 核准)