Files
static-php-cli/en/develop/structure.html

87 lines
38 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Project Structure | StaticPHP</title>
<meta name="description" content="A powerful tool designed for building portable executables including PHP, extensions, and more.">
<meta name="generator" content="VitePress v2.0.0-alpha.12">
<link rel="preload stylesheet" href="/assets/style.DtFsVR9B.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.Bml_Pmyb.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CoS8sfxC.js">
<link rel="modulepreload" href="/assets/chunks/framework.C2AwuPrQ.js">
<link rel="modulepreload" href="/assets/en_develop_structure.md.B3aY4J4P.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-1df9f90f><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-1df9f90f data-v-9f75dce3><div class="VPNavBar" data-v-9f75dce3 data-v-2a96a3d0><div class="wrapper" data-v-2a96a3d0><div class="container" data-v-2a96a3d0><div class="title" data-v-2a96a3d0><div class="VPNavBarTitle has-sidebar" data-v-2a96a3d0 data-v-1e38c6bc><a class="title" href="/en/" data-v-1e38c6bc><!--[--><!--]--><!--[--><img class="VPImage logo" src="/images/static-php_nobg.png" alt data-v-8426fc1a><!--]--><span data-v-1e38c6bc>StaticPHP</span><!--[--><!--]--></a></div></div><div class="content" data-v-2a96a3d0><div class="content-body" data-v-2a96a3d0><!--[--><!--]--><div class="VPNavBarSearch search" data-v-2a96a3d0><!--[--><!----><div id="docsearch"><button type="button" aria-label="Search" aria-keyshortcuts="/ control+k meta+k" class="DocSearch DocSearch-Button"><span class="DocSearch-Button-Container"><span class="vpi-search DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key"></kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-2a96a3d0 data-v-39714824><span id="main-nav-aria-label" class="visually-hidden" data-v-39714824> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/guide/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Guide</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/develop/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Develop</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/contributing/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/faq/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>FAQ</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-39714824 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-42cb505d><span class="text" data-v-42cb505d><!----><span data-v-42cb505d>v3 (alpha)</span><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><div class="items" data-v-25a6cce8><!--[--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-cd834e02><a class="VPLink link" href="/en/" data-v-cd834e02><!--[--><span data-v-cd834e02>v3 (alpha)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-cd834e02><a class="VPLink link vp-external-link-icon" href="https://static-php.github.io/v2-docs/" target="_blank" rel="noreferrer" data-v-cd834e02><!--[--><span data-v-cd834e02>v2</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-2a96a3d0 data-v-88af2de4 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-42cb505d><span class="text" data-v-42cb505d><span class="vpi-languages option-icon" data-v-42cb505d></span><!----><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-cd834e02><a class="VPLink link" href="/zh/develop/structure.html" data-v-cd834e02><!--[--><span data-v-cd834e02>简体中文</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div>
<span class="line"><span>├── bin/ # Executable entry scripts (spc, spc.ps1, setup-runtime, etc.)</span></span>
<span class="line"><span>├── config/</span></span>
<span class="line"><span>│ ├── env.ini # Default environment variable configuration</span></span>
<span class="line"><span>│ ├── env.custom.ini # User-defined environment variables (overrides env.ini)</span></span>
<span class="line"><span>│ ├── artifact/ # Build artifact configuration (toolchain downloads, pre-built binaries, etc.)</span></span>
<span class="line"><span>│ └── pkg/ # Package configuration files (YAML)</span></span>
<span class="line"><span>│ ├── ext/ # PHP extension package config (ext-*.yml, builtin-extensions.yml)</span></span>
<span class="line"><span>│ ├── lib/ # Library package config (*.yml)</span></span>
<span class="line"><span>│ └── target/ # Build target config (php.yml, curl.yml, etc.)</span></span>
<span class="line"><span>├── src/</span></span>
<span class="line"><span>│ ├── bootstrap.php # Application bootstrap (auto-loading, DI container, etc.)</span></span>
<span class="line"><span>│ ├── globals/ # Global helper functions</span></span>
<span class="line"><span>│ ├── Package/ # Build logic implementations for each package (PHP classes)</span></span>
<span class="line"><span>│ │ ├── Artifact/ # Custom download/extract logic for build artifacts</span></span>
<span class="line"><span>│ │ ├── Command/ # Package-level custom commands</span></span>
<span class="line"><span>│ │ ├── Extension/ # PHP extension build classes (ext-*.php)</span></span>
<span class="line"><span>│ │ ├── Library/ # Library build classes (*.php)</span></span>
<span class="line"><span>│ │ └── Target/ # Build target classes (php.php, curl.php, etc.)</span></span>
<span class="line"><span>│ └── StaticPHP/ # Framework core code</span></span>
<span class="line"><span>│ ├── ConsoleApplication.php # Symfony Console application entry</span></span>
<span class="line"><span>│ ├── Artifact/ # Build artifact download and extraction (Downloader, Extractor, etc.)</span></span>
<span class="line"><span>│ ├── Attribute/ # PHP attribute definitions</span></span>
<span class="line"><span>│ │ ├── Artifact/ # Artifact-related attributes (CustomSource, BinaryExtract, etc.)</span></span>
<span class="line"><span>│ │ ├── Doctor/ # Doctor-related attributes (CheckItem, FixItem, etc.)</span></span>
<span class="line"><span>│ │ └── Package/ # Package build-related attributes (BuildFor, BeforeStage, AfterStage,</span></span>
<span class="line"><span>│ │ # CustomPhpConfigureArg, PatchBeforeBuild, etc.)</span></span>
<span class="line"><span>│ ├── Command/ # CLI command implementations (build-libs, build-target, doctor, etc.)</span></span>
<span class="line"><span>│ ├── Config/ # Configuration loading and validation (PackageConfig, ArtifactConfig, etc.)</span></span>
<span class="line"><span>│ ├── DI/ # Dependency injection container (ApplicationContext, CallbackInvoker, etc.)</span></span>
<span class="line"><span>│ ├── Doctor/ # System environment checking and fixing (Doctor, CheckResult)</span></span>
<span class="line"><span>│ ├── Exception/ # Custom exception classes</span></span>
<span class="line"><span>│ ├── Package/ # Core package models and build scheduling</span></span>
<span class="line"><span>│ │ ├── Package.php # Base package class</span></span>
<span class="line"><span>│ │ ├── LibraryPackage.php # Library package type</span></span>
<span class="line"><span>│ │ ├── PhpExtensionPackage.php # PHP extension package type</span></span>
<span class="line"><span>│ │ ├── TargetPackage.php # Build target package type</span></span>
<span class="line"><span>│ │ ├── PackageInstaller.php # Package installer (download, extract source)</span></span>
<span class="line"><span>│ │ └── PackageBuilder.php # Package builder (execute build pipeline)</span></span>
<span class="line"><span>│ ├── Registry/ # Registry management (Registry, PackageLoader, ArtifactLoader)</span></span>
<span class="line"><span>│ ├── Runtime/ # Runtime utilities</span></span>
<span class="line"><span>│ │ ├── Executor/ # Command executors (UnixAutoconfExecutor, UnixCMakeExecutor,</span></span>
<span class="line"><span>│ │ │ # WindowsCMakeExecutor, Executor base class)</span></span>
<span class="line"><span>│ │ ├── Shell/ # Shell abstraction (UnixShell, WindowsCmd, etc.)</span></span>
<span class="line"><span>│ │ └── SystemTarget.php # System target information</span></span>
<span class="line"><span>│ ├── Toolchain/ # Toolchain abstraction (GccNative, Musl, MSVC, Zig, ClangBrew, etc.)</span></span>
<span class="line"><span>│ └── Util/ # General utility classes</span></span>
<span class="line"><span>│ ├── System/ # OS platform utilities (LinuxUtil, MacOSUtil, WindowsUtil, etc.)</span></span>
<span class="line"><span>│ ├── BuildRootTracker.php # buildroot file tracking</span></span>
<span class="line"><span>│ ├── DependencyResolver.php # Dependency resolution and build order</span></span>
<span class="line"><span>│ ├── FileSystem.php # File system operations</span></span>
<span class="line"><span>│ ├── GlobalEnvManager.php # Global environment variable management</span></span>
<span class="line"><span>│ ├── InteractiveTerm.php # Interactive terminal output</span></span>
<span class="line"><span>│ ├── LicenseDumper.php # License export</span></span>
<span class="line"><span>│ ├── PkgConfigUtil.php # pkg-config utility wrapper</span></span>
<span class="line"><span>│ ├── SourcePatcher.php # Source code patching utility</span></span>
<span class="line"><span>│ └── SPCConfigUtil.php # SPC configuration reader</span></span>
<span class="line"><span>├── tests/ # Unit tests and integration tests</span></span>
<span class="line"><span>├── downloads/ # Download cache directory (source packages, pre-built binaries)</span></span>
<span class="line"><span>├── source/ # Extracted source code directory</span></span>
<span class="line"><span>├── buildroot/ # Build output directory (headers, static libraries, etc.)</span></span>
<span class="line"><span>├── pkgroot/ # Platform-archived build artifacts</span></span>
<span class="line"><span>└── spc.registry.yml # core registry definition file</span></span></code></pre></div><p>Note that the classes in <code>src/Package</code> are responsible for implementing the build logic of specific packages, while the classes in <code>src/StaticPHP</code> provide the core functionality of the build framework, such as command scheduling, environment checking, and toolchain abstraction. The two are decoupled: <code>src/Package</code> corresponds to the packages in the <code>core</code> registry (including PHP, extensions, libraries, and build targets), while <code>src/StaticPHP</code> is the infrastructure that supports build needs across different registries and packages.</p></div></div></main><footer class="VPDocFooter" data-v-7011f0d8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/en/develop/" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Get Started</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/en/develop/registry.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Registry</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-1df9f90f data-v-c3855bb3><div class="container" data-v-c3855bb3><p class="message" data-v-c3855bb3>Released under the MIT License.</p><p class="copyright" data-v-c3855bb3>Copyright © 2023-present crazywhalecc</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"deps-craft-yml.md\":\"DaRp5sDR\",\"en_contributing_index.md\":\"Bw6aGZo7\",\"en_develop_artifact-model.md\":\"Be9wN_ZU\",\"en_develop_build-lifecycle.md\":\"BrkkrOI9\",\"en_develop_craft-yml.md\":\"CJqlRAWM\",\"en_develop_doctor-module.md\":\"BPx_gh7b\",\"en_develop_extending_annotations.md\":\"rWEgD5t7\",\"en_develop_extending_custom-artifact.md\":\"BQoftnUi\",\"en_develop_extending_dependency-injection.md\":\"3RvnsJs8\",\"en_develop_extending_index.md\":\"CBALgGvM\",\"en_develop_extending_lifecycle-hooks.md\":\"TH51ajMN\",\"en_develop_extending_package-classes.md\":\"DL47sxq4\",\"en_develop_index.md\":\"CDPdLdXm\",\"en_develop_package-model.md\":\"D5wiXvya\",\"en_develop_php-src-changes.md\":\"CIUUevPf\",\"en_develop_registry.md\":\"B5tf5XnG\",\"en_develop_structure.md\":\"B3aY4J4P\",\"en_develop_system-build-tools.md\":\"aR6vgJMi\",\"en_faq_index.md\":\"ButqLRAC\",\"en_guide_cli-generator.md\":\"BIALMDzk\",\"en_guide_cli-reference.md\":\"B6zUxFdM\",\"en_guide_deps-map.md\":\"B9M0h5GJ\",\"en_guide_env-vars.md\":\"B5JOZL1S\",\"en_guide_extension-notes.md\":\"C1QFg1E9\",\"en_guide_extensions.md\":\"SakKJurE\",\"en_guide_first-build.md\":\"C3LOd79t\",\"en_guide_index.md\":\"hf3edrTD\",\"en_guide_installation.md\":\"DNcSrgIL\",\"en_guide_migrate-from-v2.md\":\"CfVymFnT\",\"en_guide_sapi-reference.md\":\"Dx3FnmW6\",\"en_guide_troubleshooting.md\":\"Mc4ZUzP-\",\"en_index.md\":\"Bb9qw2-E\",\"index.md\":\"DnU1YpfU\",\"zh_contributing_index.md\":\"BxNPLW0M\",\"zh_develop_artifact-model.md\":\"BtcNBk1j\",\"zh_develop_build-lifecycle.md\":\"D1JbjvDB\",\"zh_develop_craft-yml.md\":\"oQn7yY_F\",\"zh_develop_doctor-module.md\":\"DAzJoWwn\",\"zh_develop_extending_annotations.md\":\"DAa7FG7j\",\"zh_develop_extending_custom-artifact.md\":\"BTEWH7KO\",\"zh_develop_extending_dependency-injection.md\":\"PLkrv44m\",\"zh_develop_extending_index.md\":\"B478Mpx4\",\"zh_develop_extending_lifecycle-hooks.md\":\"BNdlHrBu\",\"zh_develop_extending_package-classes.md\":\"CLofM-pE\",\"zh_develop_index.md\":\"CYr92Q4h\",\"zh_develop_package-model.md\":\"DYRZ8aaf\",\"zh_develop_php-src-changes.md\":\"QIFUEZHE\",\"zh_develop_registry.md\":\"BvRBmoGT\",\"zh_develop_structure.md\":\"EpUhxfrR\",\"zh_develop_system-build-tools.md\":\"DEEE1raf\",\"zh_faq_index.md\":\"DkTldA8b\",\"zh_guide_cli-generator.md\":\"D-dK4dGb\",\"zh_guide_cli-reference.md\":\"DMttieGz\",\"zh_guide_deps-map.md\":\"BsudOLor\",\"zh_guide_env-vars.md\":\"Bs72W99k\",\"zh_guide_extension-notes.md\":\"D-KMlaiu\",\"zh_guide_extensions.md\":\"gAHaZJuZ\",\"zh_guide_first-build.md\":\"CQdFhKsg\",\"zh_guide_index.md\":\"DaRL6Seg\",\"zh_guide_installation.md\":\"Ap2snxXu\",\"zh_guide_migrate-from-v2.md\":\"Df8wnmfP\",\"zh_guide_sapi-reference.md\":\"DXv5eV6I\",\"zh_guide_troubleshooting.md\":\"CueHHZkW\",\"zh_index.md\":\"BFbwQGEI\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"StaticPHP\",\"description\":\"A powerful tool designed for building portable executables including PHP, extensions, and more.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/images/static-php_nobg.png\",\"nav\":[],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/crazywhalecc/static-php-cli\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2023-present crazywhalecc\"},\"externalLinkIcon\":true,\"search\":{\"provider\":\"algolia\",\"options\":{\"appId\":\"IHJHUB1SF1\",\"apiKey\":\"8266d31cc2ffbd0e059f1c6e5bdaf8fc\",\"indexName\":\"static-php docs\",\"askAi\":{\"assistantId\":\"b72369b2-60a5-461d-902c-5c18d8c05902\",\"agentStudio\":true,\"sidePanel\":true}}}},\"locales\":{\"en\":{\"label\":\"English\",\"lang\":\"en\",\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/en/guide/\"},{\"text\":\"Develop\",\"link\":\"/en/develop/\"},{\"text\":\"Contributing\",\"link\":\"/en/contributing/\"},{\"text\":\"FAQ\",\"link\":\"/en/faq/\"},{\"text\":\"v3 (alpha)\",\"items\":[{\"text\":\"v3 (alpha)\",\"link\":\"/en/\
</body>
</html>