Repository navigation
Version 2.0.2
[Summary]
StormByte System is the C++26 process, device and host layer of the StormByte suite.
It depends directly on StormByte Base 2.1.0 and StormByte-BuildMaster >= 2.1.0. This repository is not Base, Buffer, Config, Crypto, Database, Logger, Multimedia or Network.
Spawn children with piped stdin/stdout/stderr, classify the medium behind a path, resolve directories and the current executable, inspect the machine, name the calling thread, and expand environment strings. POSIX and Windows stay behind one API. Failures are StormByte::Error::Fault in a per-type domain (StormByte.System.*). Nothing in this module throws. Text that crosses a DLL boundary is StormByte::Safe::String / StormByte::Safe::WString, not std::string by value.
From 2.0.0, original System sources are dual-licensed: GNU Lesser General Public License v3.0 or later, or a commercial license from the copyright holder. That change does not cover other StormByte modules or third-party material under thirdparty/ (including bundled StormByte Base).
If you landed here from a release link and have not read the tree:
- What this module is, how to build it, and short examples: README.md
- License: dual license LGPL-3.0-or-later or commercial, LICENSE
Added
ENABLE_PGOandENABLE_LTO. Profile-guided optimization trains inpgo-instrand installs this build. Link-time optimization followsENABLE_LTO(default ON) for every build type. Both apply to System. Base is not rebuilt.- Release archives include
THIRD-PARTY(notTHIRDPARTY: on Windows and macOS that name is the same path as thethirdparty/directory, so the file never landed in those zips). No third-party object code is compiled into this shared library. StormByte Base is linked at run time and keeps its own notice.
Changed
- CI builds with
ENABLE_LTO=ON,ENABLE_PGO=OFFandENABLE_TEST=ON, then runs ctest. Profile-guided optimization stays on the release workflow. cmake/optimizations.cmakeis the same file as Base. On Release, and only when that language was not set from the outside, it appendsOPTIMIZATION_FLAGS_LINUX,OPTIMIZATION_FLAGS_MACorOPTIMIZATION_FLAGS_WINDOWS. Linux is-O2 -march=x86-64-v3, Apple is-O2 -mcpu=apple-m1, Windows is/O2 /arch:AVX2. There is no/fp:fastand no/EHsc.cmake/pgo.cmakeis the same file as Base, so a forwarded list keeps its semicolons.- Requires StormByte-BuildMaster >= 2.1.0. An older install is not used; the
buildmastersubmodule supplies 2.1.0. - Requires StormByte Base 2.1.0. The build downloads that release archive (
stormbyte_component_url) and links it withBACKEND=binary. The Base submodule is gone. The archive matches this OS and C++ runtime:libstdc++orlibc++on Linux and macOS, no runtime suffix on Windows. Doxygen include path is${BUILDMASTER_INSTALL_INCLUDEDIR}, notthirdparty/StormByte/base/src. - Bumped version to 2.0.2.
Fixed
-stdlib=libc++and-stdlib=libstdc++do not count as custom C++ flags. If either is the only extra flag, Release still gets-O2and the CPU baseline.- Linux device classification splits
dev_twith themajorandminormacros from<sys/sysmacros.h>.gnu_dev_majorandgnu_dev_minorare glibc-only, sodevice.cxxdid not compile on musl. - Part of the port: the DLL does not return a
std::object.std::strong_orderingis not a DLL ABI. clang-cl returns it through a hidden pointer and MSVC does not pass one, so a call into a clang-built Base wrote at address 0. Ordering is compiled by the caller from Base 2.1.0, where those operators areSTORMBYTE_FORCE_INLINE.make_error_codeandDomain::MessageareSTORMBYTE_FORCE_INLINEin the header for the same reason.Variable::HomePathis no longer public: it returnedstd::filesystem::pathfrom the DLL and is now a file-local helper. This archive must be built against that Base. cmake/pgo.cmakematches Base. MSVC PGO links with/LTCG:PGINSTRUMENTand/LTCG:PGOPTIMIZE./GENPROFILEalone fails with LNK1220 because the currentlink.exerequires an/LTCGspecification, and CMake's own/LTCGstays off so it does not replace the profile mode. The profile mode isadd_link_optionson this project, notCMAKE_EXE_LINKER_FLAGS. A nestedproject()inherits the cache and its compiler test linkscmTC_*.exe, which was never instrumented, so/LTCG:PGOPTIMIZEaborted with LNK1266 (cmTC_*.pgdmissing). The cache keeps a bare/LTCGso those/GLobjects still link. A static dependency stays LTCG and is optimized by the link that owns the.pgd.- Clang PGO drops
.profrawfiles left by compiler probes before ctest, andllvm-profdata mergeuses-failure-mode=all. A probe writes a few hundred bytes formain, with a padded empty symbol name. The default failure mode isany, so that one file aborted the merge even after the instrumented tests had passed.