Add libsodium

This commit is contained in:
crazywhalecc
2026-03-23 16:50:13 +08:00
parent af97263596
commit 141c737380
2 changed files with 51 additions and 0 deletions

View File

@@ -13,3 +13,5 @@ libsodium:
- libsodium
static-libs@unix:
- libsodium.a
static-libs@windows:
- libsodium.lib

View File

@@ -6,12 +6,26 @@ namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Attribute\Package\PatchBeforeBuild;
use StaticPHP\Exception\BuildFailureException;
use StaticPHP\Exception\EnvironmentException;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixAutoconfExecutor;
use StaticPHP\Runtime\SystemTarget;
use StaticPHP\Util\FileSystem;
use StaticPHP\Util\System\WindowsUtil;
#[Library('libsodium')]
class libsodium
{
#[PatchBeforeBuild]
public function patchBeforeBuild(LibraryPackage $lib): void
{
if (SystemTarget::getTargetOS() === 'Windows') {
FileSystem::replaceFileStr("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium\\export.h", '#ifdef SODIUM_STATIC', '#if 1');
}
}
#[BuildFor('Linux')]
#[BuildFor('Darwin')]
public function build(LibraryPackage $lib): void
@@ -21,4 +35,39 @@ class libsodium
// Patch pkg-config file
$lib->patchPkgconfPrefix(['libsodium.pc'], PKGCONF_PATCH_PREFIX);
}
#[BuildFor('Windows')]
public function buildWin(LibraryPackage $lib): void
{
$ver = WindowsUtil::findVisualStudio();
$vs_ver_dir = match ($ver['major_version']) {
'17' => '\vs2022',
'16' => '\vs2019',
default => throw new EnvironmentException("Current VS version {$ver['major_version']} is not supported yet!"),
};
cmd()->cd("{$lib->getSourceDir()}\\builds\\msvc{$vs_ver_dir}")
->exec('msbuild libsodium.sln /t:Rebuild /p:Configuration=StaticRelease /p:Platform=x64 /p:PreprocessorDefinitions="SODIUM_STATIC=1"');
FileSystem::createDir($lib->getLibDir());
FileSystem::createDir($lib->getIncludeDir());
// copy include
FileSystem::copyDir("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium", "{$lib->getIncludeDir()}\\sodium");
FileSystem::copy("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium.h", "{$lib->getIncludeDir()}\\sodium.h");
// copy lib
$ls = FileSystem::scanDirFiles("{$lib->getSourceDir()}\\bin");
$find = false;
foreach ($ls as $file) {
if (str_ends_with($file, 'libsodium.lib')) {
FileSystem::copy($file, "{$lib->getLibDir()}\\libsodium.lib");
$find = true;
}
if (str_ends_with($file, 'libsodium.pdb')) {
FileSystem::copy($file, "{$lib->getLibDir()}\\libsodium.pdb");
}
}
if (!$find) {
throw new BuildFailureException("Build libsodium success, but cannot find libsodium.lib in {$lib->getSourceDir()}\\bin .");
}
}
}