Skip to content

Commit 141c737

Browse files
committed
Add libsodium
1 parent af97263 commit 141c737

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

config/pkg/lib/libsodium.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ libsodium:
1313
- libsodium
1414
static-libs@unix:
1515
- libsodium.a
16+
static-libs@windows:
17+
- libsodium.lib

src/Package/Library/libsodium.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,26 @@
66

77
use StaticPHP\Attribute\Package\BuildFor;
88
use StaticPHP\Attribute\Package\Library;
9+
use StaticPHP\Attribute\Package\PatchBeforeBuild;
10+
use StaticPHP\Exception\BuildFailureException;
11+
use StaticPHP\Exception\EnvironmentException;
912
use StaticPHP\Package\LibraryPackage;
1013
use StaticPHP\Runtime\Executor\UnixAutoconfExecutor;
14+
use StaticPHP\Runtime\SystemTarget;
15+
use StaticPHP\Util\FileSystem;
16+
use StaticPHP\Util\System\WindowsUtil;
1117

1218
#[Library('libsodium')]
1319
class libsodium
1420
{
21+
#[PatchBeforeBuild]
22+
public function patchBeforeBuild(LibraryPackage $lib): void
23+
{
24+
if (SystemTarget::getTargetOS() === 'Windows') {
25+
FileSystem::replaceFileStr("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium\\export.h", '#ifdef SODIUM_STATIC', '#if 1');
26+
}
27+
}
28+
1529
#[BuildFor('Linux')]
1630
#[BuildFor('Darwin')]
1731
public function build(LibraryPackage $lib): void
@@ -21,4 +35,39 @@ public function build(LibraryPackage $lib): void
2135
// Patch pkg-config file
2236
$lib->patchPkgconfPrefix(['libsodium.pc'], PKGCONF_PATCH_PREFIX);
2337
}
38+
39+
#[BuildFor('Windows')]
40+
public function buildWin(LibraryPackage $lib): void
41+
{
42+
$ver = WindowsUtil::findVisualStudio();
43+
$vs_ver_dir = match ($ver['major_version']) {
44+
'17' => '\vs2022',
45+
'16' => '\vs2019',
46+
default => throw new EnvironmentException("Current VS version {$ver['major_version']} is not supported yet!"),
47+
};
48+
49+
cmd()->cd("{$lib->getSourceDir()}\\builds\\msvc{$vs_ver_dir}")
50+
->exec('msbuild libsodium.sln /t:Rebuild /p:Configuration=StaticRelease /p:Platform=x64 /p:PreprocessorDefinitions="SODIUM_STATIC=1"');
51+
FileSystem::createDir($lib->getLibDir());
52+
FileSystem::createDir($lib->getIncludeDir());
53+
54+
// copy include
55+
FileSystem::copyDir("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium", "{$lib->getIncludeDir()}\\sodium");
56+
FileSystem::copy("{$lib->getSourceDir()}\\src\\libsodium\\include\\sodium.h", "{$lib->getIncludeDir()}\\sodium.h");
57+
// copy lib
58+
$ls = FileSystem::scanDirFiles("{$lib->getSourceDir()}\\bin");
59+
$find = false;
60+
foreach ($ls as $file) {
61+
if (str_ends_with($file, 'libsodium.lib')) {
62+
FileSystem::copy($file, "{$lib->getLibDir()}\\libsodium.lib");
63+
$find = true;
64+
}
65+
if (str_ends_with($file, 'libsodium.pdb')) {
66+
FileSystem::copy($file, "{$lib->getLibDir()}\\libsodium.pdb");
67+
}
68+
}
69+
if (!$find) {
70+
throw new BuildFailureException("Build libsodium success, but cannot find libsodium.lib in {$lib->getSourceDir()}\\bin .");
71+
}
72+
}
2473
}

0 commit comments

Comments
 (0)