mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-15 04:45:35 +08:00
Compare commits
8 Commits
2.7.10
...
e5069fafa6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5069fafa6 | ||
|
|
c44e6c79da | ||
|
|
abbc69f7b0 | ||
|
|
08cd8a6611 | ||
|
|
5dcdaaf9dc | ||
|
|
37f604c821 | ||
|
|
18c5ccfe9d | ||
|
|
d064e1353c |
@@ -385,6 +385,9 @@ class Extension
|
|||||||
logger()->info('Shared extension [' . $this->getName() . '] was already built, skipping (' . $this->getName() . '.so)');
|
logger()->info('Shared extension [' . $this->getName() . '] was already built, skipping (' . $this->getName() . '.so)');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ((string) Config::getExt($this->getName(), 'type') === 'addon') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
logger()->info('Building extension [' . $this->getName() . '] as shared extension (' . $this->getName() . '.so)');
|
logger()->info('Building extension [' . $this->getName() . '] as shared extension (' . $this->getName() . '.so)');
|
||||||
foreach ($this->dependencies as $dependency) {
|
foreach ($this->dependencies as $dependency) {
|
||||||
if (!$dependency instanceof Extension) {
|
if (!$dependency instanceof Extension) {
|
||||||
|
|||||||
@@ -184,18 +184,18 @@ abstract class LibraryBase
|
|||||||
|
|
||||||
// extract first if not exists
|
// extract first if not exists
|
||||||
if (!is_dir($this->source_dir)) {
|
if (!is_dir($this->source_dir)) {
|
||||||
$this->getBuilder()->emitPatchPoint('before-library[ ' . static::NAME . ']-extract');
|
$this->getBuilder()->emitPatchPoint('before-library[' . static::NAME . ']-extract');
|
||||||
SourceManager::initSource(libs: [static::NAME], source_only: true);
|
SourceManager::initSource(libs: [static::NAME], source_only: true);
|
||||||
$this->getBuilder()->emitPatchPoint('after-library[ ' . static::NAME . ']-extract');
|
$this->getBuilder()->emitPatchPoint('after-library[' . static::NAME . ']-extract');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->patched && $this->patchBeforeBuild()) {
|
if (!$this->patched && $this->patchBeforeBuild()) {
|
||||||
file_put_contents($this->source_dir . '/.spc.patched', 'PATCHED!!!');
|
file_put_contents($this->source_dir . '/.spc.patched', 'PATCHED!!!');
|
||||||
}
|
}
|
||||||
$this->getBuilder()->emitPatchPoint('before-library[ ' . static::NAME . ']-build');
|
$this->getBuilder()->emitPatchPoint('before-library[' . static::NAME . ']-build');
|
||||||
$this->build();
|
$this->build();
|
||||||
$this->installLicense();
|
$this->installLicense();
|
||||||
$this->getBuilder()->emitPatchPoint('after-library[ ' . static::NAME . ']-build');
|
$this->getBuilder()->emitPatchPoint('after-library[' . static::NAME . ']-build');
|
||||||
return LIB_STATUS_OK;
|
return LIB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,19 +346,19 @@ abstract class LibraryBase
|
|||||||
*/
|
*/
|
||||||
protected function installLicense(): void
|
protected function installLicense(): void
|
||||||
{
|
{
|
||||||
FileSystem::createDir(BUILD_ROOT_PATH . '/source-licenses/' . $this->getName());
|
|
||||||
$source = Config::getLib($this->getName(), 'source');
|
$source = Config::getLib($this->getName(), 'source');
|
||||||
|
FileSystem::createDir(BUILD_ROOT_PATH . "/source-licenses/{$source}");
|
||||||
$license_files = Config::getSource($source)['license'] ?? [];
|
$license_files = Config::getSource($source)['license'] ?? [];
|
||||||
if (is_assoc_array($license_files)) {
|
if (is_assoc_array($license_files)) {
|
||||||
$license_files = [$license_files];
|
$license_files = [$license_files];
|
||||||
}
|
}
|
||||||
foreach ($license_files as $index => $license) {
|
foreach ($license_files as $index => $license) {
|
||||||
if ($license['type'] === 'text') {
|
if ($license['type'] === 'text') {
|
||||||
FileSystem::writeFile(BUILD_ROOT_PATH . '/source-licenses/' . $this->getName() . "/{$index}.txt", $license['text']);
|
FileSystem::writeFile(BUILD_ROOT_PATH . "/source-licenses/{$source}/{$index}.txt", $license['text']);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($license['type'] === 'file') {
|
if ($license['type'] === 'file') {
|
||||||
copy($this->source_dir . '/' . $license['path'], BUILD_ROOT_PATH . '/source-licenses/' . $this->getName() . "/{$index}.txt");
|
copy($this->source_dir . '/' . $license['path'], BUILD_ROOT_PATH . "/source-licenses/{$source}/{$index}.txt");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,4 +43,9 @@ EOF
|
|||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getExtraEnv(): array
|
||||||
|
{
|
||||||
|
return ['CFLAGS' => '-std=c17'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,16 @@ declare(strict_types=1);
|
|||||||
namespace SPC\builder\unix\library;
|
namespace SPC\builder\unix\library;
|
||||||
|
|
||||||
use SPC\util\executor\UnixCMakeExecutor;
|
use SPC\util\executor\UnixCMakeExecutor;
|
||||||
use SPC\util\SPCTarget;
|
|
||||||
|
|
||||||
trait libwebp
|
trait libwebp
|
||||||
{
|
{
|
||||||
protected function build(): void
|
protected function build(): void
|
||||||
{
|
{
|
||||||
|
$code = 'int main() { return _mm256_cvtsi256_si32(_mm256_setzero_si256()); }';
|
||||||
|
$cc = getenv('CC') ?: 'gcc';
|
||||||
|
[$ret] = shell()->execWithResult("echo '{$code}' | {$cc} -x c -mavx2 -o /dev/null - 2>&1");
|
||||||
|
$disableAvx2 = $ret !== 0 && GNU_ARCH === 'x86_64';
|
||||||
|
|
||||||
UnixCMakeExecutor::create($this)
|
UnixCMakeExecutor::create($this)
|
||||||
->addConfigureArgs(
|
->addConfigureArgs(
|
||||||
'-DWEBP_BUILD_EXTRAS=OFF',
|
'-DWEBP_BUILD_EXTRAS=OFF',
|
||||||
@@ -23,7 +27,7 @@ trait libwebp
|
|||||||
'-DWEBP_BUILD_WEBPINFO=OFF',
|
'-DWEBP_BUILD_WEBPINFO=OFF',
|
||||||
'-DWEBP_BUILD_WEBPMUX=OFF',
|
'-DWEBP_BUILD_WEBPMUX=OFF',
|
||||||
'-DWEBP_BUILD_FUZZTEST=OFF',
|
'-DWEBP_BUILD_FUZZTEST=OFF',
|
||||||
SPCTarget::getLibcVersion() === '2.31' && GNU_ARCH === 'x86_64' ? '-DWEBP_ENABLE_SIMD=OFF' : '' // fix an edge bug for debian 11 with gcc 10
|
$disableAvx2 ? '-DWEBP_ENABLE_SIMD=OFF' : ''
|
||||||
)
|
)
|
||||||
->build();
|
->build();
|
||||||
// patch pkgconfig
|
// patch pkgconfig
|
||||||
|
|||||||
@@ -16,19 +16,19 @@ $test_php_version = [
|
|||||||
// '8.1',
|
// '8.1',
|
||||||
// '8.2',
|
// '8.2',
|
||||||
// '8.3',
|
// '8.3',
|
||||||
'8.4',
|
// '8.4',
|
||||||
'8.5',
|
'8.5',
|
||||||
// 'git',
|
// 'git',
|
||||||
];
|
];
|
||||||
|
|
||||||
// test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available)
|
// test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available)
|
||||||
$test_os = [
|
$test_os = [
|
||||||
'macos-15-intel', // bin/spc for x86_64
|
// 'macos-15-intel', // bin/spc for x86_64
|
||||||
'macos-15', // bin/spc for arm64
|
// 'macos-15', // bin/spc for arm64
|
||||||
// 'ubuntu-latest', // bin/spc-alpine-docker for x86_64
|
// 'ubuntu-latest', // bin/spc-alpine-docker for x86_64
|
||||||
'ubuntu-22.04', // bin/spc-gnu-docker for x86_64
|
'ubuntu-22.04', // bin/spc-gnu-docker for x86_64
|
||||||
// 'ubuntu-24.04', // bin/spc for x86_64
|
'ubuntu-24.04', // bin/spc for x86_64
|
||||||
// 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64
|
'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64
|
||||||
'ubuntu-24.04-arm', // bin/spc for arm64
|
'ubuntu-24.04-arm', // bin/spc for arm64
|
||||||
// 'windows-2022', // .\bin\spc.ps1
|
// 'windows-2022', // .\bin\spc.ps1
|
||||||
// 'windows-2025',
|
// 'windows-2025',
|
||||||
@@ -50,7 +50,7 @@ $prefer_pre_built = false;
|
|||||||
|
|
||||||
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
||||||
$extensions = match (PHP_OS_FAMILY) {
|
$extensions = match (PHP_OS_FAMILY) {
|
||||||
'Linux', 'Darwin' => 'bcmath,xsl,xml',
|
'Linux', 'Darwin' => 'imagick',
|
||||||
'Windows' => 'bcmath',
|
'Windows' => 'bcmath',
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ $with_suggested_libs = false;
|
|||||||
|
|
||||||
// If you want to test extra libs for extensions, add them below (comma separated, example `libwebp,libavif`). Unnecessary, when $with_suggested_libs is true.
|
// If you want to test extra libs for extensions, add them below (comma separated, example `libwebp,libavif`). Unnecessary, when $with_suggested_libs is true.
|
||||||
$with_libs = match (PHP_OS_FAMILY) {
|
$with_libs = match (PHP_OS_FAMILY) {
|
||||||
'Linux', 'Darwin' => '',
|
'Linux', 'Darwin' => 'libwebp',
|
||||||
'Windows' => '',
|
'Windows' => '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user