本指南介绍了如何构建 Fuchsia 以添加
Fuchsia 的源 //examples
目录,并在
Fuchsia 目标。
前提条件
在运行示例组件之前,您必须:
探索示例
此示例组件会将 Hello, world!
输出到系统日志中。该示例包含
三个主要元素:
可执行程序
Fuchsia 组件可以执行用任何语言编写的程序,支持 运行时。C++ 和 Rust 程序最常用的运行时是 ELF 运行程序。
C++
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Rust
fn main() {
println!("{}, world!", greeting());
eprintln!("{}, world!", greeting());
}
fn greeting() -> String {
return String::from("Hello");
}
组件清单
答 组件清单 描述 如何以代码的形式运行 Fuchsia 程序 组件 ,了解所有最新动态。 这包括声明程序二进制文件、运行时信息和任何功能 (例如日志记录支持)。
C++
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
{
// Enable system logging capabilities
include: [ "syslog/client.shard.cml" ],
// Information about the program to run
program: {
// Use the built-in ELF runner for the executable
runner: "elf",
binary: "bin/hello_world_cpp",
// Enable stdout logging
forward_stderr_to: "log",
forward_stdout_to: "log",
},
}
Rust
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
{
// Enable system logging capabilities
include: [ "syslog/client.shard.cml" ],
// Information about the program to run
program: {
// Use the built-in ELF runner for the executable
runner: "elf",
binary: "bin/hello_world_rust",
// Enable stdout logging
forward_stderr_to: "log",
forward_stdout_to: "log",
},
}
有关组件清单及其声明语法的更多详情, 请参阅组件清单。
BUILD.gn
Fuchsia 使用 Generate Ninja (GN) 元构建系统生成输入
Ninja:执行实际构建。
BUILD.gn
文件声明了 fuchsia_component()
的构建目标,
fuchsia_package()
。
C++
executable("bin") {
output_name = "hello_world_cpp"
sources = [ "hello_world.cc" ]
}
fuchsia_component("hello-world-cpp-component") {
deps = [ ":bin" ]
# Defines the name given to the manifest when included in a fuchsia package.
# In this case: "hello-world-cpp.cm"
component_name = "hello-world-cpp"
manifest = "meta/hello_world_cpp.cml"
}
fuchsia_package("hello-world-cpp") {
deps = [
# component-url: fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
":hello-world-cpp-component",
]
}
Rust
rustc_binary("bin") {
name = "hello_world_rust"
# Generates the "bin_test" build target
with_unit_tests = true
edition = "2021"
deps = []
test_deps = [ "//src/lib/fuchsia" ]
sources = [ "src/main.rs" ]
}
fuchsia_component("hello-world-rust-component") {
deps = [ ":bin" ]
# Defines the name given to the manifest when included in a fuchsia package.
# In this case: "hello-world-rust.cm"
component_name = "hello-world-rust"
manifest = "meta/hello_world_rust.cml"
}
fuchsia_package("hello-world-rust") {
deps = [
# component-url: fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
":hello-world-rust-component",
]
}
如需详细了解 Fuchsia 如何使用 GN 定义组件和软件包, 请参阅:构建组件。
在 Fuchsia 图片中添加示例软件包
如需在 build 配置中包含示例软件包,请使用 --with
标志
需要注意的是:
fx set product.board --with //examples/hello_world
对于具有最低 build 配置的 Fuchsia 模拟器,命令如下:
fx set core.x64 --with //examples/hello_world
在此示例中,core
是一款具有最少功能集的产品,其中包括
x64
是指 x64 架构。
对于具有最低 build 配置的 Fuchsia 设备,命令如下:
fx set core.x64 --with //examples/hello_world
如需了解更多详情,请参阅配置构建 更多选项。
设置 build 配置后,请使用以下代码构建 Fuchsia 命令:
fx build
现在,您的 build 中已经包含示例软件包, 按需提取和启动。
探索您的产品配置
您可以使用
list-packages
命令。
全部列出:
fx list-packages
可能有很多条目,因此请添加名称以查找您要查找的条目:
fx list-packages hello-world
hello-world
hello-world-cpp-unittests
hello-world-rust-tests
运行示例组件
要运行 Fuchsia 组件,请使用其
Fuchsia 软件包网址
作为参数
添加到 run
命令:
打开一个终端并运行
fx serve
:fx serve
打开另一个终端并运行示例组件:
C++
ffx component run /core/ffx-laboratory:hello-world-cpp fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
Rust
ffx component run /core/ffx-laboratory:hello-world-rust fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
打开另一个终端并查看系统日志:
ffx log --filter hello-world
该组件会在日志中输出以下输出内容:
[ffx-laboratory:hello-world] INFO: Hello, World!
问题排查
如果 fx serve
未运行,该命令会从
设备或模拟器
如果 fx serve
正在运行,但未找到该软件包,
重复这些步骤并重新构建 Fuchsia 映像,
添加适当的软件包