mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-09 01:45:36 +08:00
Merge branch 'main' into crazywhalecc-patch-1
This commit is contained in:
@@ -1000,7 +1000,7 @@
|
||||
"openssl": {
|
||||
"type": "ghrel",
|
||||
"repo": "openssl/openssl",
|
||||
"match": "openssl.+\\.tar\\.gz",
|
||||
"match": "openssl-3.+\\.tar\\.gz",
|
||||
"prefer-stable": true,
|
||||
"alt": {
|
||||
"type": "filelist",
|
||||
@@ -1194,7 +1194,6 @@
|
||||
"path": "php-src/ext/swoole",
|
||||
"type": "ghtar",
|
||||
"repo": "swoole/swoole-src",
|
||||
"match": "v6\\.+",
|
||||
"prefer-stable": true,
|
||||
"license": {
|
||||
"type": "file",
|
||||
|
||||
@@ -34,7 +34,7 @@ use Symfony\Component\Console\Application;
|
||||
*/
|
||||
final class ConsoleApplication extends Application
|
||||
{
|
||||
public const string VERSION = '2.8.5';
|
||||
public const string VERSION = '2.8.6';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
@@ -11,6 +11,9 @@ use SPC\exception\ValidationException;
|
||||
use SPC\exception\WrongUsageException;
|
||||
use SPC\store\Config;
|
||||
use SPC\store\FileSystem;
|
||||
use SPC\toolchain\ToolchainManager;
|
||||
use SPC\toolchain\ZigToolchain;
|
||||
use SPC\util\GlobalEnvManager;
|
||||
use SPC\util\SPCConfigUtil;
|
||||
use SPC\util\SPCTarget;
|
||||
|
||||
@@ -231,7 +234,7 @@ class Extension
|
||||
if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) {
|
||||
$prefix = $matches[1];
|
||||
$currentLibs = trim($matches[2]);
|
||||
$newLibs = trim("{$currentLibs} {$staticLibs} {$lstdcpp}");
|
||||
$newLibs = clean_spaces("{$currentLibs} {$staticLibs} {$lstdcpp}");
|
||||
$deduplicatedLibs = deduplicate_flags($newLibs);
|
||||
|
||||
FileSystem::replaceFileRegex(
|
||||
@@ -543,6 +546,11 @@ class Extension
|
||||
*/
|
||||
protected function getSharedExtensionEnv(): array
|
||||
{
|
||||
$compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: '';
|
||||
if (!str_contains($compiler_extra, '-lcompiler_rt') && ToolchainManager::getToolchainClass() === ZigToolchain::class) {
|
||||
$compiler_extra = trim($compiler_extra . ' -lcompiler_rt');
|
||||
GlobalEnvManager::putenv("SPC_COMPILER_EXTRA={$compiler_extra}");
|
||||
}
|
||||
$config = (new SPCConfigUtil($this->builder, ['no_php' => true]))->getExtensionConfig($this);
|
||||
[$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']);
|
||||
$preStatic = PHP_OS_FAMILY === 'Darwin' ? '' : '-Wl,--start-group ';
|
||||
|
||||
@@ -16,8 +16,14 @@ class decimal extends Extension
|
||||
{
|
||||
FileSystem::replaceFileStr(
|
||||
$this->source_dir . '/php_decimal.c',
|
||||
'zend_module_entry decimal_module_entry',
|
||||
'zend_module_entry php_decimal_module_entry'
|
||||
[
|
||||
'zend_module_entry decimal_module_entry',
|
||||
'ZEND_GET_MODULE(decimal)',
|
||||
],
|
||||
[
|
||||
'zend_module_entry php_decimal_module_entry',
|
||||
'ZEND_GET_MODULE(php_decimal)',
|
||||
]
|
||||
);
|
||||
FileSystem::replaceFileStr(
|
||||
$this->source_dir . '/config.w32',
|
||||
|
||||
@@ -5,11 +5,22 @@ declare(strict_types=1);
|
||||
namespace SPC\builder\extension;
|
||||
|
||||
use SPC\builder\Extension;
|
||||
use SPC\store\FileSystem;
|
||||
use SPC\util\CustomExt;
|
||||
|
||||
#[CustomExt('mongodb')]
|
||||
class mongodb extends Extension
|
||||
{
|
||||
public function patchBeforeBuildconf(): bool
|
||||
{
|
||||
FileSystem::replaceFileRegex(
|
||||
SOURCE_PATH . '/php-src/ext/mongodb/config.m4',
|
||||
'/^(\s+)(src\/libmongoc\/)/m',
|
||||
'$1${ac_config_dir}/$2'
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getUnixConfigureArg(bool $shared = false): string
|
||||
{
|
||||
$arg = ' --enable-mongodb' . ($shared ? '=shared' : '') . ' ';
|
||||
|
||||
@@ -11,6 +11,8 @@ use SPC\store\Config;
|
||||
use SPC\store\DirDiff;
|
||||
use SPC\store\FileSystem;
|
||||
use SPC\store\SourcePatcher;
|
||||
use SPC\toolchain\ToolchainManager;
|
||||
use SPC\toolchain\ZigToolchain;
|
||||
use SPC\util\GlobalEnvManager;
|
||||
use SPC\util\SPCConfigUtil;
|
||||
use SPC\util\SPCTarget;
|
||||
@@ -65,7 +67,8 @@ class LinuxBuilder extends UnixBuilderBase
|
||||
// php 8.5 contains opcache extension by default,
|
||||
// if opcache_jit is enabled for 8.5 or opcache enabled,
|
||||
// we need to disable undefined behavior sanitizer.
|
||||
f_putenv('SPC_COMPILER_EXTRA=-fno-sanitize=undefined');
|
||||
$compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: '';
|
||||
f_putenv('SPC_COMPILER_EXTRA=' . trim($compiler_extra . ' -fno-sanitize=undefined'));
|
||||
}
|
||||
|
||||
if ($this->getOption('enable-zts', false)) {
|
||||
@@ -266,6 +269,11 @@ class LinuxBuilder extends UnixBuilderBase
|
||||
*/
|
||||
protected function buildEmbed(): void
|
||||
{
|
||||
$compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: '';
|
||||
if (!str_contains($compiler_extra, '-lcompiler_rt') && ToolchainManager::getToolchainClass() === ZigToolchain::class) {
|
||||
$compiler_extra = trim($compiler_extra . ' -lcompiler_rt');
|
||||
GlobalEnvManager::putenv("SPC_COMPILER_EXTRA={$compiler_extra}");
|
||||
}
|
||||
$sharedExts = array_filter($this->exts, static fn ($ext) => $ext->isBuildShared());
|
||||
$sharedExts = array_filter($sharedExts, static function ($ext) {
|
||||
return Config::getExt($ext->getName(), 'build-with-php') === true;
|
||||
|
||||
@@ -50,7 +50,7 @@ trait UnixSystemUtilTrait
|
||||
$defined = array_unique($defined);
|
||||
sort($defined);
|
||||
// export
|
||||
if (SPCTarget::getTargetOS() === 'Linux') {
|
||||
if (SPCTarget::getTargetOS() === 'Linux' && ToolchainManager::getToolchainClass() !== ZigToolchain::class) {
|
||||
file_put_contents("{$lib_file}.dynsym", "{\n" . implode("\n", array_map(fn ($x) => " {$x};", $defined)) . "};\n");
|
||||
} else {
|
||||
file_put_contents("{$lib_file}.dynsym", implode("\n", $defined) . "\n");
|
||||
@@ -72,10 +72,6 @@ trait UnixSystemUtilTrait
|
||||
if (!is_file($symbol_file)) {
|
||||
throw new SPCInternalException("The symbol file {$symbol_file} does not exist, please check if nm command is available.");
|
||||
}
|
||||
// https://github.com/ziglang/zig/issues/24662
|
||||
if (ToolchainManager::getToolchainClass() === ZigToolchain::class) {
|
||||
return '-Wl,--export-dynamic'; // needs release 0.16, can be removed then
|
||||
}
|
||||
// macOS/zig
|
||||
if (SPCTarget::getTargetOS() !== 'Linux' || ToolchainManager::getToolchainClass() === ZigToolchain::class) {
|
||||
return "-Wl,-exported_symbols_list,{$symbol_file}";
|
||||
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace SPC\builder\unix\library;
|
||||
|
||||
use SPC\store\FileSystem;
|
||||
use SPC\util\executor\UnixCMakeExecutor;
|
||||
|
||||
trait curl
|
||||
@@ -32,8 +33,16 @@ trait curl
|
||||
)
|
||||
->build();
|
||||
|
||||
// patch pkgconf
|
||||
$this->patchPkgconfPrefix(['libcurl.pc']);
|
||||
// On glibc <2.28 without built-in pthreads, FindThreads sets
|
||||
// INTERFACE_LINK_LIBRARIES to '-lpthread'
|
||||
// curls .pc generator walks and prepends '-l' to each
|
||||
// entry, resulting in -l-lpthread
|
||||
FileSystem::replaceFileRegex(
|
||||
BUILD_LIB_PATH . '/pkgconfig/libcurl.pc',
|
||||
'/-l(-l\S+)/',
|
||||
'$1'
|
||||
);
|
||||
shell()->cd(BUILD_LIB_PATH . '/cmake/CURL/')
|
||||
->exec("sed -ie 's|\"/lib/libcurl.a\"|\"" . BUILD_LIB_PATH . "/libcurl.a\"|g' CURLTargets-release.cmake");
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace SPC\builder\unix\library;
|
||||
|
||||
use SPC\toolchain\ToolchainManager;
|
||||
use SPC\toolchain\ZigToolchain;
|
||||
use SPC\util\executor\UnixAutoconfExecutor;
|
||||
use SPC\util\SPCConfigUtil;
|
||||
|
||||
@@ -39,12 +41,16 @@ trait krb5
|
||||
$extraEnv['LDFLAGS'] = '-framework Kerberos';
|
||||
$args[] = 'ac_cv_func_secure_getenv=no';
|
||||
}
|
||||
UnixAutoconfExecutor::create($this)
|
||||
$make = UnixAutoconfExecutor::create($this)
|
||||
->appendEnv($extraEnv)
|
||||
->optionalLib('ldap', '--with-ldap', '--without-ldap')
|
||||
->optionalLib('libedit', '--with-libedit', '--without-libedit')
|
||||
->configure(...$args)
|
||||
->make();
|
||||
->configure(...$args);
|
||||
|
||||
if (ToolchainManager::getToolchainClass() === ZigToolchain::class) {
|
||||
$make->exec('find . -name Makefile -exec sed -i "s/-Werror=incompatible-pointer-types//g" {} +');
|
||||
}
|
||||
$make->make();
|
||||
$this->patchPkgconfPrefix([
|
||||
'krb5-gssapi.pc',
|
||||
'krb5.pc',
|
||||
|
||||
@@ -13,7 +13,8 @@ trait libde265
|
||||
UnixCMakeExecutor::create($this)
|
||||
->addConfigureArgs(
|
||||
'-DENABLE_SDL=OFF',
|
||||
'-DENABLE_DECODER=OFF'
|
||||
'-DENABLE_DECODER=OFF',
|
||||
'-DHAVE_NEON=OFF',
|
||||
)
|
||||
->build();
|
||||
$this->patchPkgconfPrefix(['libde265.pc']);
|
||||
|
||||
@@ -10,9 +10,9 @@ class postgresql_win extends WindowsLibraryBase
|
||||
|
||||
protected function build(): void
|
||||
{
|
||||
copy($this->source_dir . '\pgsql\lib\libpq.lib', BUILD_LIB_PATH . '\libpq.lib');
|
||||
copy($this->source_dir . '\pgsql\lib\libpgport.lib', BUILD_LIB_PATH . '\libpgport.lib');
|
||||
copy($this->source_dir . '\pgsql\lib\libpgcommon.lib', BUILD_LIB_PATH . '\libpgcommon.lib');
|
||||
copy($this->source_dir . '\lib\libpq.lib', BUILD_LIB_PATH . '\libpq.lib');
|
||||
copy($this->source_dir . '\lib\libpgport.lib', BUILD_LIB_PATH . '\libpgport.lib');
|
||||
copy($this->source_dir . '\lib\libpgcommon.lib', BUILD_LIB_PATH . '\libpgcommon.lib');
|
||||
|
||||
// create libpq folder in buildroot/includes/libpq
|
||||
if (!file_exists(BUILD_INCLUDE_PATH . '\libpq')) {
|
||||
@@ -21,7 +21,7 @@ class postgresql_win extends WindowsLibraryBase
|
||||
|
||||
$headerFiles = ['libpq-fe.h', 'postgres_ext.h', 'pg_config_ext.h', 'libpq\libpq-fs.h'];
|
||||
foreach ($headerFiles as $header) {
|
||||
copy($this->source_dir . '\pgsql\include\\' . $header, BUILD_INCLUDE_PATH . '\\' . $header);
|
||||
copy($this->source_dir . '\include\\' . $header, BUILD_INCLUDE_PATH . '\\' . $header);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ class LinuxToolCheckList
|
||||
public function fixBuildTools(array $distro, array $missing): bool
|
||||
{
|
||||
$install_cmd = match ($distro['dist']) {
|
||||
'ubuntu', 'debian', 'Deepin' => 'apt-get install -y',
|
||||
'ubuntu', 'debian', 'linuxmint', 'Deepin' => 'apt-get install -y',
|
||||
'alpine' => 'apk add',
|
||||
'redhat' => 'dnf install -y',
|
||||
'centos' => 'yum install -y',
|
||||
|
||||
@@ -98,31 +98,50 @@ class Downloader
|
||||
{
|
||||
logger()->debug("finding {$name} source from github {$type} tarball");
|
||||
$source['query'] ??= '';
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/{$type}{$source['query']}",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$url = null;
|
||||
foreach ($data as $rel) {
|
||||
if (($rel['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) {
|
||||
continue;
|
||||
// Use /releases/latest when possible: it returns the semantically latest stable
|
||||
// release regardless of publish order, avoiding issues with concurrent release branches.
|
||||
if ($type === 'releases' && empty($source['query']) && !($source['match'] ?? null)) {
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/releases/latest",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
if (!is_array($data) || empty($data['tarball_url'])) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
if (($rel['draft'] ?? false) === true && (($source['prefer-stable'] ?? false) || !$rel['tarball_url'])) {
|
||||
continue;
|
||||
$url = $data['tarball_url'];
|
||||
$version = $data['tag_name'] ?? $data['name'] ?? null;
|
||||
} else {
|
||||
$data = json_decode(self::curlExec(
|
||||
url: "https://api.github.com/repos/{$source['repo']}/{$type}{$source['query']}",
|
||||
hooks: [[CurlHook::class, 'setupGithubToken']],
|
||||
retries: self::getRetryAttempts()
|
||||
), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$url = null;
|
||||
$version = null;
|
||||
foreach ($data as $rel) {
|
||||
if (($rel['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) {
|
||||
continue;
|
||||
}
|
||||
if (($rel['draft'] ?? false) === true && (($source['prefer-stable'] ?? false) || !$rel['tarball_url'])) {
|
||||
continue;
|
||||
}
|
||||
if (!($source['match'] ?? null)) {
|
||||
$url = $rel['tarball_url'] ?? null;
|
||||
$version = $rel['tag_name'] ?? $rel['name'] ?? null;
|
||||
break;
|
||||
}
|
||||
if (preg_match('|' . $source['match'] . '|', $rel['tarball_url'])) {
|
||||
$url = $rel['tarball_url'];
|
||||
$version = $rel['tag_name'] ?? $rel['name'] ?? null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!($source['match'] ?? null)) {
|
||||
$url = $rel['tarball_url'] ?? null;
|
||||
break;
|
||||
if (!$url) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
if (preg_match('|' . $source['match'] . '|', $rel['tarball_url'])) {
|
||||
$url = $rel['tarball_url'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$url) {
|
||||
throw new DownloaderException("failed to find {$name} source");
|
||||
}
|
||||
$headers = self::curlExec(
|
||||
url: $url,
|
||||
@@ -134,7 +153,7 @@ class Downloader
|
||||
if ($matches) {
|
||||
$filename = $matches['filename'];
|
||||
} else {
|
||||
$filename = "{$name}-" . ($type === 'releases' ? $data['tag_name'] : $data['name']) . '.tar.gz';
|
||||
$filename = "{$name}-" . ($version ?? 'latest') . '.tar.gz';
|
||||
}
|
||||
|
||||
return [$url, $filename];
|
||||
|
||||
@@ -95,6 +95,10 @@ class SourcePatcher
|
||||
// patch php-src/build/php.m4 PKG_CHECK_MODULES -> PKG_CHECK_MODULES_STATIC
|
||||
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/build/php.m4', 'PKG_CHECK_MODULES(', 'PKG_CHECK_MODULES_STATIC(');
|
||||
|
||||
if ($builder->getPHPVersionID() >= 80300 && $builder->getPHPVersionID() < 80400) {
|
||||
self::patchFile('spc_fix_avx512_cache_before_80400.patch', SOURCE_PATH . '/php-src');
|
||||
}
|
||||
|
||||
if ($builder->getOption('enable-micro-win32')) {
|
||||
self::patchMicroWin32();
|
||||
} else {
|
||||
@@ -125,6 +129,15 @@ class SourcePatcher
|
||||
FileSystem::replaceFileRegex(SOURCE_PATH . '/php-src/configure', '/have_capstone="yes"/', 'have_capstone="no"');
|
||||
}
|
||||
|
||||
// PHP 8.2 and below: bcmath libbcmath uses K&R style C function
|
||||
if (is_unix() && $builder->getPHPVersionID() < 80300) {
|
||||
FileSystem::replaceFileStr(
|
||||
SOURCE_PATH . '/php-src/configure',
|
||||
"for ac_arg in '' -std=gnu23",
|
||||
"for ac_arg in '' -std=gnu17",
|
||||
);
|
||||
}
|
||||
|
||||
if (file_exists(SOURCE_PATH . '/php-src/configure.ac.bak')) {
|
||||
// restore configure.ac
|
||||
FileSystem::restoreBackupFile(SOURCE_PATH . '/php-src/configure.ac');
|
||||
|
||||
@@ -182,7 +182,7 @@ class UnixCMakeExecutor extends Executor
|
||||
$target_arch = arch2gnu(php_uname('m'));
|
||||
$cflags = getenv('SPC_DEFAULT_C_FLAGS');
|
||||
$cc = getenv('CC');
|
||||
$cxx = getenv('CCX');
|
||||
$cxx = getenv('CXX');
|
||||
$include = BUILD_INCLUDE_PATH;
|
||||
logger()->debug("making cmake tool chain file for {$os} {$target_arch} with CFLAGS='{$cflags}'");
|
||||
$root = BUILD_ROOT_PATH;
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
#include <sapi/embed/php_embed.h>
|
||||
|
||||
int main(int argc,char **argv){
|
||||
|
||||
PHP_EMBED_START_BLOCK(argc,argv)
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
PHP_EMBED_START_BLOCK(argc, argv)
|
||||
zend_file_handle file_handle;
|
||||
|
||||
zend_stream_init_filename(&file_handle,"embed.php");
|
||||
|
||||
if(!php_execute_script(&file_handle)){
|
||||
zend_stream_init_filename(&file_handle, "embed.php");
|
||||
if(!php_execute_script(&file_handle)) {
|
||||
php_printf("Failed to execute PHP script.\n");
|
||||
}
|
||||
|
||||
PHP_EMBED_END_BLOCK()
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -25,12 +25,16 @@ const DANGER_CMD = [
|
||||
// spc internal extensions
|
||||
const SPC_INTERNAL_EXTENSIONS = [
|
||||
'core',
|
||||
'date',
|
||||
'hash',
|
||||
'json',
|
||||
'lexbor',
|
||||
'pcre',
|
||||
'random',
|
||||
'reflection',
|
||||
'spl',
|
||||
'standard',
|
||||
'uri',
|
||||
];
|
||||
|
||||
// spc extension alias
|
||||
|
||||
91
src/globals/patch/spc_fix_avx512_cache_before_80400.patch
Normal file
91
src/globals/patch/spc_fix_avx512_cache_before_80400.patch
Normal file
@@ -0,0 +1,91 @@
|
||||
--- a/build/php.m4
|
||||
+++ b/build/php.m4
|
||||
@@ -2812,27 +2812,26 @@
|
||||
dnl PHP_CHECK_AVX512_SUPPORTS
|
||||
dnl
|
||||
AC_DEFUN([PHP_CHECK_AVX512_SUPPORTS], [
|
||||
- AC_MSG_CHECKING([for avx512 supports in compiler])
|
||||
- save_CFLAGS="$CFLAGS"
|
||||
- CFLAGS="-mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw $CFLAGS"
|
||||
-
|
||||
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
- #include <immintrin.h>
|
||||
- int main(void) {
|
||||
- __m512i mask = _mm512_set1_epi32(0x1);
|
||||
- char out[32];
|
||||
- _mm512_storeu_si512(out, _mm512_shuffle_epi8(mask, mask));
|
||||
- return 0;
|
||||
- }]])], [
|
||||
+ AC_CACHE_CHECK([whether compiler supports AVX-512], [php_cv_have_avx512], [
|
||||
+ save_CFLAGS="$CFLAGS"
|
||||
+ CFLAGS="-mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw $CFLAGS"
|
||||
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
+ #include <immintrin.h>
|
||||
+ int main(void) {
|
||||
+ __m512i mask = _mm512_set1_epi32(0x1);
|
||||
+ char out[32];
|
||||
+ _mm512_storeu_si512(out, _mm512_shuffle_epi8(mask, mask));
|
||||
+ return 0;
|
||||
+ }]])],
|
||||
+ [php_cv_have_avx512=yes],
|
||||
+ [php_cv_have_avx512=no])
|
||||
+ CFLAGS="$save_CFLAGS"
|
||||
+ ])
|
||||
+ if test "$php_cv_have_avx512" = "yes"; then
|
||||
have_avx512_supports=1
|
||||
- AC_MSG_RESULT([yes])
|
||||
- ], [
|
||||
+ else
|
||||
have_avx512_supports=0
|
||||
- AC_MSG_RESULT([no])
|
||||
- ])
|
||||
-
|
||||
- CFLAGS="$save_CFLAGS"
|
||||
-
|
||||
+ fi
|
||||
AC_DEFINE_UNQUOTED([PHP_HAVE_AVX512_SUPPORTS],
|
||||
[$have_avx512_supports], [Whether the compiler supports AVX512])
|
||||
])
|
||||
@@ -2841,24 +2840,26 @@
|
||||
dnl PHP_CHECK_AVX512_VBMI_SUPPORTS
|
||||
dnl
|
||||
AC_DEFUN([PHP_CHECK_AVX512_VBMI_SUPPORTS], [
|
||||
- AC_MSG_CHECKING([for avx512 vbmi supports in compiler])
|
||||
- save_CFLAGS="$CFLAGS"
|
||||
- CFLAGS="-mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi $CFLAGS"
|
||||
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
- #include <immintrin.h>
|
||||
- int main(void) {
|
||||
- __m512i mask = _mm512_set1_epi32(0x1);
|
||||
- char out[32];
|
||||
- _mm512_storeu_si512(out, _mm512_permutexvar_epi8(mask, mask));
|
||||
- return 0;
|
||||
- }]])], [
|
||||
+ AC_CACHE_CHECK([whether compiler supports AVX-512 VBMI], [php_cv_have_avx512vbmi], [
|
||||
+ save_CFLAGS="$CFLAGS"
|
||||
+ CFLAGS="-mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi $CFLAGS"
|
||||
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
+ #include <immintrin.h>
|
||||
+ int main(void) {
|
||||
+ __m512i mask = _mm512_set1_epi32(0x1);
|
||||
+ char out[32];
|
||||
+ _mm512_storeu_si512(out, _mm512_permutexvar_epi8(mask, mask));
|
||||
+ return 0;
|
||||
+ }]])],
|
||||
+ [php_cv_have_avx512vbmi=yes],
|
||||
+ [php_cv_have_avx512vbmi=no])
|
||||
+ CFLAGS="$save_CFLAGS"
|
||||
+ ])
|
||||
+ if test "$php_cv_have_avx512vbmi" = "yes"; then
|
||||
have_avx512_vbmi_supports=1
|
||||
- AC_MSG_RESULT([yes])
|
||||
- ], [
|
||||
+ else
|
||||
have_avx512_vbmi_supports=0
|
||||
- AC_MSG_RESULT([no])
|
||||
- ])
|
||||
- CFLAGS="$save_CFLAGS"
|
||||
+ fi
|
||||
AC_DEFINE_UNQUOTED([PHP_HAVE_AVX512_VBMI_SUPPORTS],
|
||||
[$have_avx512_vbmi_supports], [Whether the compiler supports AVX512 VBMI])
|
||||
])
|
||||
@@ -26,12 +26,12 @@ $test_os = [
|
||||
// 'macos-15-intel', // bin/spc for x86_64
|
||||
// 'macos-15', // bin/spc for arm64
|
||||
// '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-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
|
||||
'windows-2022', // .\bin\spc.ps1
|
||||
'windows-2025',
|
||||
// 'windows-2022', // .\bin\spc.ps1
|
||||
// 'windows-2025',
|
||||
];
|
||||
|
||||
// whether enable thread safe
|
||||
@@ -43,15 +43,15 @@ $no_strip = false;
|
||||
$upx = false;
|
||||
|
||||
// whether to test frankenphp build, only available for macOS and linux
|
||||
$frankenphp = false;
|
||||
$frankenphp = true;
|
||||
|
||||
// prefer downloading pre-built packages to speed up the build process
|
||||
$prefer_pre_built = false;
|
||||
$prefer_pre_built = true;
|
||||
|
||||
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
||||
$extensions = match (PHP_OS_FAMILY) {
|
||||
'Linux', 'Darwin' => 'decimal',
|
||||
'Windows' => 'decimal',
|
||||
'Linux', 'Darwin' => 'curl,gd',
|
||||
'Windows' => 'bcmath,brotli,bz2,ctype,curl,dom,exif,fileinfo,filter,ftp,gd,iconv,intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_pgsql,pgsql,session,simdjson,simplexml,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,zip,zlib',
|
||||
};
|
||||
|
||||
// If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`).
|
||||
@@ -66,7 +66,7 @@ $with_suggested_libs = 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) {
|
||||
'Linux', 'Darwin' => 'krb5',
|
||||
'Linux', 'Darwin' => '',
|
||||
'Windows' => '',
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,15 @@ use SPC\exception\SPCInternalException;
|
||||
function f_exec(string $command, mixed &$output, mixed &$result_code): bool
|
||||
{
|
||||
$result_code = 0;
|
||||
if (str_contains($command, 'https://api.github.com/repos/AOMediaCodec/libavif/releases/latest')) {
|
||||
$output = explode("\n", json_encode([
|
||||
'tag_name' => 'v1.1.1',
|
||||
'tarball_url' => 'https://api.github.com/repos/AOMediaCodec/libavif/tarball/v1.1.1',
|
||||
'prerelease' => false,
|
||||
'draft' => false,
|
||||
]));
|
||||
return true;
|
||||
}
|
||||
if (str_contains($command, 'https://api.github.com/repos/AOMediaCodec/libavif/releases')) {
|
||||
$output = explode("\n", gzdecode(file_get_contents(__DIR__ . '/../assets/github_api_AOMediaCodec_libavif_releases.json.gz')));
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user