Files
static-php-cli/assets/zh_develop_structure.md.EpUhxfrR.js
2026-05-11 05:18:54 +00:00

64 lines
10 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{_ as s,c as a,o as p,aj as e}from"./chunks/framework.C2AwuPrQ.js";const h=JSON.parse('{"title":"项目结构","description":"","frontmatter":{},"headers":[],"relativePath":"zh/develop/structure.md","filePath":"zh/develop/structure.md"}'),l={name:"zh/develop/structure.md"};function i(c,n,t,o,r,d){return p(),a("div",null,[...n[0]||(n[0]=[e(`<h1 id="项目结构" tabindex="-1">项目结构 <a class="header-anchor" href="#项目结构" aria-label="Permalink to “项目结构”"></a></h1><h2 id="概念" tabindex="-1">概念 <a class="header-anchor" href="#概念" aria-label="Permalink to “概念”"></a></h2><p>StaticPHP 本身是一个基于 <code>symfony/console</code> 的 CLI 应用,核心代码位于 <code>src/StaticPHP</code> 目录下。 它主要分为几个模块:</p><ul><li><strong>Registry</strong>负责管理注册表数据每个注册表含有多个包PackageStaticPHP 项目本身内置一个 <code>core</code> 注册表,包含 PHP 及相关扩展、依赖等。</li><li><strong>Package</strong>:代表一个包,包的种类有四种:<code>php-extension</code>PHP 扩展)、<code>library</code>(库)、<code>target</code>(构建目标)、<code>virtual-target</code>(虚构建目标)。每个包包含构建信息、依赖关系等。</li><li><strong>Installer/Builder</strong>:负责处理包的安装和构建逻辑,调用构建命令、解压构建产物、处理构建结果等。</li><li><strong>Doctor</strong>:提供系统环境检查功能,负责安装和检查系统层面依赖的工具、需要的文件等,如 <code>make</code>、<code>cmake</code>、<code>autoconf</code> 等。</li><li><strong>Runtime/Executor</strong>:包含运行时相关的工具类,如执行 shell 命令、执行 CMake 构建等。</li><li><strong>Toolchain</strong>:对不同操作系统及环境,提供对应系统的工具链抽象接口,负责处理构建过程中与系统环境相关的差异。</li><li><strong>Utils</strong>:一些通用的工具类,如文件系统操作、日志记录、操作系统相关助手方法等。</li><li><strong>DependencyResolver</strong>:负责解析包之间的依赖关系,生成构建顺序等。</li></ul><h2 id="目录结构" tabindex="-1">目录结构 <a class="header-anchor" href="#目录结构" aria-label="Permalink to “目录结构”"></a></h2><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>static-php-cli/</span></span>
<span class="line"><span>├── bin/ # 可执行入口脚本spc、spc.ps1、setup-runtime 等)</span></span>
<span class="line"><span>├── config/</span></span>
<span class="line"><span>│ ├── env.ini # 默认环境变量配置</span></span>
<span class="line"><span>│ ├── env.custom.ini # 用户自定义环境变量(覆盖 env.ini</span></span>
<span class="line"><span>│ ├── artifact/ # 构建产物配置(下载工具链、预构建二进制等)</span></span>
<span class="line"><span>│ └── pkg/ # 包配置文件YAML</span></span>
<span class="line"><span>│ ├── ext/ # PHP 扩展包配置ext-*.yml、builtin-extensions.yml</span></span>
<span class="line"><span>│ ├── lib/ # 库包配置(*.yml</span></span>
<span class="line"><span>│ └── target/ # 构建目标配置php.yml、curl.yml 等)</span></span>
<span class="line"><span>├── src/</span></span>
<span class="line"><span>│ ├── bootstrap.php # 应用引导注册自动加载、DI 容器等)</span></span>
<span class="line"><span>│ ├── globals/ # 全局辅助函数</span></span>
<span class="line"><span>│ ├── Package/ # 各包的构建逻辑实现PHP 类)</span></span>
<span class="line"><span>│ │ ├── Artifact/ # 构建产物的自定义下载/解压逻辑</span></span>
<span class="line"><span>│ │ ├── Command/ # 包级别自定义命令</span></span>
<span class="line"><span>│ │ ├── Extension/ # PHP 扩展构建类ext-*.php</span></span>
<span class="line"><span>│ │ ├── Library/ # 库构建类(*.php</span></span>
<span class="line"><span>│ │ └── Target/ # 构建目标类php.php、curl.php 等)</span></span>
<span class="line"><span>│ └── StaticPHP/ # 框架核心代码</span></span>
<span class="line"><span>│ ├── ConsoleApplication.php # Symfony Console 应用入口</span></span>
<span class="line"><span>│ ├── Artifact/ # 构建产物下载与解压Downloader、Extractor 等)</span></span>
<span class="line"><span>│ ├── Attribute/ # PHP 注解定义</span></span>
<span class="line"><span>│ │ ├── Artifact/ # 产物相关注解CustomSource、BinaryExtract 等)</span></span>
<span class="line"><span>│ │ ├── Doctor/ # Doctor 相关注解CheckItem、FixItem 等)</span></span>
<span class="line"><span>│ │ └── Package/ # 包构建相关注解BuildFor、BeforeStage、AfterStage、</span></span>
<span class="line"><span>│ │ # CustomPhpConfigureArg、PatchBeforeBuild 等)</span></span>
<span class="line"><span>│ ├── Command/ # CLI 命令实现build-libs、build-target、doctor 等)</span></span>
<span class="line"><span>│ ├── Config/ # 配置加载与验证PackageConfig、ArtifactConfig 等)</span></span>
<span class="line"><span>│ ├── DI/ # 依赖注入容器ApplicationContext、CallbackInvoker</span></span>
<span class="line"><span>│ ├── Doctor/ # 系统环境检查与修复Doctor、CheckResult</span></span>
<span class="line"><span>│ ├── Exception/ # 自定义异常类</span></span>
<span class="line"><span>│ ├── Package/ # 包核心模型与构建调度</span></span>
<span class="line"><span>│ │ ├── Package.php # 包基类</span></span>
<span class="line"><span>│ │ ├── LibraryPackage.php # 库包类型</span></span>
<span class="line"><span>│ │ ├── PhpExtensionPackage.php # PHP 扩展包类型</span></span>
<span class="line"><span>│ │ ├── TargetPackage.php # 构建目标包类型</span></span>
<span class="line"><span>│ │ ├── PackageInstaller.php # 包安装器(下载、解压源码)</span></span>
<span class="line"><span>│ │ └── PackageBuilder.php # 包构建器(执行构建流程)</span></span>
<span class="line"><span>│ ├── Registry/ # 注册表管理Registry、PackageLoader、ArtifactLoader</span></span>
<span class="line"><span>│ ├── Runtime/ # 运行时工具</span></span>
<span class="line"><span>│ │ ├── Executor/ # 命令执行器UnixAutoconfExecutor、UnixCMakeExecutor、</span></span>
<span class="line"><span>│ │ │ # WindowsCMakeExecutor、Executor 基类)</span></span>
<span class="line"><span>│ │ ├── Shell/ # Shell 抽象UnixShell、WindowsCmd 等)</span></span>
<span class="line"><span>│ │ └── SystemTarget.php # 系统目标信息</span></span>
<span class="line"><span>│ ├── Toolchain/ # 工具链抽象GccNative、Musl、MSVC、Zig、ClangBrew 等)</span></span>
<span class="line"><span>│ └── Util/ # 通用工具类</span></span>
<span class="line"><span>│ ├── System/ # 系统平台工具LinuxUtil、MacOSUtil、WindowsUtil 等)</span></span>
<span class="line"><span>│ ├── BuildRootTracker.php # buildroot 文件追踪</span></span>
<span class="line"><span>│ ├── DependencyResolver.php # 依赖解析与构建顺序</span></span>
<span class="line"><span>│ ├── FileSystem.php # 文件系统操作</span></span>
<span class="line"><span>│ ├── GlobalEnvManager.php # 全局环境变量管理</span></span>
<span class="line"><span>│ ├── InteractiveTerm.php # 交互式终端输出</span></span>
<span class="line"><span>│ ├── LicenseDumper.php # 开源协议导出</span></span>
<span class="line"><span>│ ├── PkgConfigUtil.php # pkg-config 工具封装</span></span>
<span class="line"><span>│ ├── SourcePatcher.php # 源码补丁工具</span></span>
<span class="line"><span>│ └── SPCConfigUtil.php # SPC 配置读取工具</span></span>
<span class="line"><span>├── tests/ # 单元测试与集成测试</span></span>
<span class="line"><span>├── downloads/ # 下载缓存目录(源码包、预构建二进制)</span></span>
<span class="line"><span>├── source/ # 解压后的源码目录</span></span>
<span class="line"><span>├── buildroot/ # 构建输出目录(头文件、静态库等)</span></span>
<span class="line"><span>├── pkgroot/ # 按平台归档的构建产物</span></span>
<span class="line"><span>└── spc.registry.yml # core 注册表定义文件</span></span></code></pre></div><p>需要注意的是,<code>src/Package</code> 目录下的类主要负责实现具体包的构建逻辑,而 <code>src/StaticPHP</code> 目录下的类则提供了构建框架的核心功能,如命令调度、环境检查、工具链抽象等,两者是解耦的。<code>src/Package</code> 对应的是 <code>core</code> 注册表中的包,其中包含 PHP 及相关扩展、库、构建目标等的具体实现,而 <code>src/StaticPHP</code> 则是整个构建系统的基础设施,支持不同注册表和包的构建需求。</p>`,7)])])}const u=s(l,[["render",i]]);export{h as __pageData,u as default};