2023-03-21 00:25:46 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace SPC\builder\linux;
|
|
|
|
|
|
|
|
|
|
use SPC\builder\linux\library\LinuxLibraryBase;
|
2024-01-10 21:08:25 +08:00
|
|
|
use SPC\builder\unix\UnixBuilderBase;
|
2023-03-21 00:25:46 +08:00
|
|
|
use SPC\exception\FileSystemException;
|
|
|
|
|
use SPC\exception\RuntimeException;
|
2023-03-29 21:39:36 +08:00
|
|
|
use SPC\exception\WrongUsageException;
|
2023-10-01 01:32:43 +08:00
|
|
|
use SPC\store\FileSystem;
|
2023-04-30 12:42:19 +08:00
|
|
|
use SPC\store\SourcePatcher;
|
2024-04-07 15:52:24 +08:00
|
|
|
use SPC\util\GlobalEnvManager;
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2024-01-10 21:08:25 +08:00
|
|
|
class LinuxBuilder extends UnixBuilderBase
|
2023-03-21 00:25:46 +08:00
|
|
|
{
|
2023-08-20 19:51:45 +08:00
|
|
|
/** @var bool Micro patch phar flag */
|
2023-03-21 00:25:46 +08:00
|
|
|
private bool $phar_patched = false;
|
|
|
|
|
|
|
|
|
|
/**
|
2023-08-20 19:51:45 +08:00
|
|
|
* @throws FileSystemException
|
2023-04-15 18:45:34 +08:00
|
|
|
* @throws WrongUsageException
|
2023-03-21 00:25:46 +08:00
|
|
|
*/
|
2023-08-20 19:51:45 +08:00
|
|
|
public function __construct(array $options = [])
|
2023-03-21 00:25:46 +08:00
|
|
|
{
|
2023-08-20 19:51:45 +08:00
|
|
|
$this->options = $options;
|
|
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
// check musl-cross make installed if we use musl-cross-make
|
|
|
|
|
$arch = arch2gnu(php_uname('m'));
|
2023-10-23 00:37:28 +08:00
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
// set library path, some libraries need it. (We cannot use `putenv` here, because cmake will be confused)
|
|
|
|
|
$this->setOptionIfNotExist('library_path', "LIBRARY_PATH=/usr/local/musl/{$arch}-linux-musl/lib");
|
|
|
|
|
$this->setOptionIfNotExist('ld_library_path', "LD_LIBRARY_PATH=/usr/local/musl/{$arch}-linux-musl/lib");
|
2023-10-23 00:37:28 +08:00
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
GlobalEnvManager::init($this);
|
2023-08-20 19:51:45 +08:00
|
|
|
|
2024-04-07 16:26:21 +08:00
|
|
|
if (str_ends_with(getenv('CC'), 'linux-musl-gcc') && !file_exists("/usr/local/musl/bin/{$arch}-linux-musl-gcc")) {
|
|
|
|
|
throw new WrongUsageException('musl-cross-make not installed, please install it first. (You can use `doctor` command to install it)');
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-20 19:51:45 +08:00
|
|
|
// concurrency
|
2024-04-07 15:52:24 +08:00
|
|
|
$this->concurrency = intval(getenv('SPC_CONCURRENCY'));
|
2023-08-20 19:51:45 +08:00
|
|
|
// cflags
|
2024-04-07 15:52:24 +08:00
|
|
|
$this->arch_c_flags = getenv('SPC_DEFAULT_C_FLAGS');
|
|
|
|
|
$this->arch_cxx_flags = getenv('SPC_DEFAULT_CXX_FLAGS');
|
2023-08-20 19:51:45 +08:00
|
|
|
// cmake toolchain
|
2023-03-21 00:25:46 +08:00
|
|
|
$this->cmake_toolchain_file = SystemUtil::makeCmakeToolchainFile(
|
2023-08-20 19:51:45 +08:00
|
|
|
'Linux',
|
2024-04-07 15:52:24 +08:00
|
|
|
$arch,
|
2023-08-20 19:51:45 +08:00
|
|
|
$this->arch_c_flags,
|
2023-10-23 00:37:28 +08:00
|
|
|
getenv('CC'),
|
|
|
|
|
getenv('CXX'),
|
2023-03-21 00:25:46 +08:00
|
|
|
);
|
2023-10-23 00:37:28 +08:00
|
|
|
|
2023-10-16 14:09:49 +02:00
|
|
|
// cross-compiling is not supported yet
|
2023-08-20 19:51:45 +08:00
|
|
|
/*if (php_uname('m') !== $this->arch) {
|
2023-03-21 00:25:46 +08:00
|
|
|
$this->cross_compile_prefix = SystemUtil::getCrossCompilePrefix($this->cc, $this->arch);
|
|
|
|
|
logger()->info('using cross compile prefix: ' . $this->cross_compile_prefix);
|
|
|
|
|
$this->configure_env .= " CROSS_COMPILE='{$this->cross_compile_prefix}'";
|
2023-08-20 19:51:45 +08:00
|
|
|
}*/
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2023-08-20 19:51:45 +08:00
|
|
|
// create pkgconfig and include dir (some libs cannot create them automatically)
|
2023-03-21 00:25:46 +08:00
|
|
|
f_mkdir(BUILD_LIB_PATH . '/pkgconfig', recursive: true);
|
|
|
|
|
f_mkdir(BUILD_INCLUDE_PATH, recursive: true);
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-20 19:51:45 +08:00
|
|
|
/**
|
|
|
|
|
* @throws FileSystemException
|
|
|
|
|
* @throws RuntimeException
|
|
|
|
|
* @throws WrongUsageException
|
|
|
|
|
*/
|
2023-03-21 00:25:46 +08:00
|
|
|
public function makeAutoconfArgs(string $name, array $libSpecs): string
|
|
|
|
|
{
|
|
|
|
|
$ret = '';
|
|
|
|
|
foreach ($libSpecs as $libName => $arr) {
|
|
|
|
|
$lib = $this->getLib($libName);
|
|
|
|
|
|
|
|
|
|
$arr = $arr ?? [];
|
|
|
|
|
|
|
|
|
|
$disableArgs = $arr[0] ?? null;
|
|
|
|
|
$prefix = $arr[1] ?? null;
|
|
|
|
|
if ($lib instanceof LinuxLibraryBase) {
|
|
|
|
|
logger()->info("{$name} \033[32;1mwith\033[0;1m {$libName} support");
|
|
|
|
|
$ret .= $lib->makeAutoconfEnv($prefix) . ' ';
|
|
|
|
|
} else {
|
|
|
|
|
logger()->info("{$name} \033[31;1mwithout\033[0;1m {$libName} support");
|
|
|
|
|
$ret .= ($disableArgs ?? "--with-{$libName}=no") . ' ';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return rtrim($ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @throws RuntimeException
|
|
|
|
|
* @throws FileSystemException
|
2023-08-20 19:51:45 +08:00
|
|
|
* @throws WrongUsageException
|
2023-03-21 00:25:46 +08:00
|
|
|
*/
|
2023-08-20 19:51:45 +08:00
|
|
|
public function buildPHP(int $build_target = BUILD_TARGET_NONE): void
|
2023-03-21 00:25:46 +08:00
|
|
|
{
|
2023-08-20 19:51:45 +08:00
|
|
|
// ---------- Update extra-libs ----------
|
2024-04-07 15:52:24 +08:00
|
|
|
$extra_libs = getenv('SPC_EXTRA_LIBS') ?: '';
|
|
|
|
|
// bloat means force-load all static libraries, even if they are not used
|
2023-08-20 19:51:45 +08:00
|
|
|
if (!$this->getOption('bloat', false)) {
|
|
|
|
|
$extra_libs .= (empty($extra_libs) ? '' : ' ') . implode(' ', $this->getAllStaticLibFiles());
|
2023-03-21 00:25:46 +08:00
|
|
|
} else {
|
2023-08-20 19:51:45 +08:00
|
|
|
$extra_libs .= (empty($extra_libs) ? '' : ' ') . implode(' ', array_map(fn ($x) => "-Xcompiler {$x}", array_filter($this->getAllStaticLibFiles())));
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
2023-10-16 14:09:49 +02:00
|
|
|
// add libstdc++, some extensions or libraries need it
|
2023-10-23 00:37:28 +08:00
|
|
|
$extra_libs .= (empty($extra_libs) ? '' : ' ') . ($this->hasCpp() ? '-lstdc++ ' : '');
|
2024-04-07 15:52:24 +08:00
|
|
|
f_putenv('SPC_EXTRA_LIBS=' . $extra_libs);
|
2023-03-21 00:25:46 +08:00
|
|
|
$cflags = $this->arch_c_flags;
|
|
|
|
|
|
2024-01-03 15:57:05 +08:00
|
|
|
$this->emitPatchPoint('before-php-buildconf');
|
2023-07-28 23:45:39 +08:00
|
|
|
SourcePatcher::patchBeforeBuildconf($this);
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')->exec(getenv('SPC_CMD_PREFIX_PHP_BUILDCONF'));
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2024-01-03 15:57:05 +08:00
|
|
|
$this->emitPatchPoint('before-php-configure');
|
2023-07-28 23:45:39 +08:00
|
|
|
SourcePatcher::patchBeforeConfigure($this);
|
2023-05-10 02:04:08 +08:00
|
|
|
|
2023-08-21 12:54:36 +02:00
|
|
|
$phpVersionID = $this->getPHPVersionID();
|
|
|
|
|
$json_74 = $phpVersionID < 80000 ? '--enable-json ' : '';
|
2023-08-21 18:37:00 +02:00
|
|
|
|
|
|
|
|
if ($this->getOption('enable-zts', false)) {
|
|
|
|
|
$maxExecutionTimers = $phpVersionID >= 80100 ? '--enable-zend-max-execution-timers ' : '';
|
|
|
|
|
$zts = '--enable-zts --disable-zend-signals ';
|
|
|
|
|
} else {
|
|
|
|
|
$maxExecutionTimers = '';
|
|
|
|
|
$zts = '';
|
|
|
|
|
}
|
2023-10-16 14:05:07 +02:00
|
|
|
$disable_jit = $this->getOption('disable-opcache-jit', false) ? '--disable-opcache-jit ' : '';
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2023-08-21 09:30:46 +02:00
|
|
|
$enableCli = ($build_target & BUILD_TARGET_CLI) === BUILD_TARGET_CLI;
|
|
|
|
|
$enableFpm = ($build_target & BUILD_TARGET_FPM) === BUILD_TARGET_FPM;
|
|
|
|
|
$enableMicro = ($build_target & BUILD_TARGET_MICRO) === BUILD_TARGET_MICRO;
|
|
|
|
|
$enableEmbed = ($build_target & BUILD_TARGET_EMBED) === BUILD_TARGET_EMBED;
|
|
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
// prepare build php envs
|
|
|
|
|
$envs_build_php = SystemUtil::makeEnvVarString([
|
|
|
|
|
'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'),
|
|
|
|
|
'CPPFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS'),
|
|
|
|
|
'LDFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS'),
|
|
|
|
|
'LIBS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_LIBS'),
|
|
|
|
|
]);
|
|
|
|
|
|
2024-02-19 12:17:03 +08:00
|
|
|
// upx pack and strip for micro
|
2024-05-06 14:12:40 +08:00
|
|
|
// but always restore Makefile.frag.bak first
|
|
|
|
|
if (file_exists(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag.bak')) {
|
|
|
|
|
copy(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag.bak', SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag');
|
|
|
|
|
}
|
2024-02-19 12:17:03 +08:00
|
|
|
if ($this->getOption('with-upx-pack', false)) {
|
2024-05-06 14:12:40 +08:00
|
|
|
// judge $(MAKE) micro_2s_objs SFX_FILESIZE=`$(STAT_SIZE) $(SAPI_MICRO_PATH)` count
|
|
|
|
|
// if 2, replace src/globals/extra/micro-triple-Makefile.frag file content
|
|
|
|
|
if (substr_count(FileSystem::readFile(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag'), '$(MAKE) micro_2s_objs SFX_FILESIZE=`$(STAT_SIZE) $(SAPI_MICRO_PATH)`') === 2) {
|
|
|
|
|
// bak first
|
|
|
|
|
copy(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag', SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag.bak');
|
|
|
|
|
// replace Makefile.frag content
|
|
|
|
|
FileSystem::writeFile(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag', FileSystem::readFile(ROOT_DIR . '/src/globals/extra/micro-triple-Makefile.frag'));
|
|
|
|
|
}
|
2024-04-07 15:52:24 +08:00
|
|
|
// with upx pack always need strip
|
2024-02-19 12:17:03 +08:00
|
|
|
FileSystem::replaceFileRegex(
|
|
|
|
|
SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag',
|
|
|
|
|
'/POST_MICRO_BUILD_COMMANDS=.*/',
|
2024-04-07 15:52:24 +08:00
|
|
|
'POST_MICRO_BUILD_COMMANDS=\$(STRIP) \$(MICRO_STRIP_FLAGS) \$(SAPI_MICRO_PATH) && ' . getenv('UPX_EXEC') . ' --best \$(SAPI_MICRO_PATH)',
|
2024-02-19 12:17:03 +08:00
|
|
|
);
|
|
|
|
|
} elseif (!$this->getOption('no-strip', false)) {
|
2024-04-07 15:52:24 +08:00
|
|
|
// not-no-strip means strip (default behavior)
|
2024-02-19 12:17:03 +08:00
|
|
|
FileSystem::replaceFileRegex(
|
|
|
|
|
SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag',
|
|
|
|
|
'/POST_MICRO_BUILD_COMMANDS=.*/',
|
2024-02-20 10:56:39 +08:00
|
|
|
'POST_MICRO_BUILD_COMMANDS=\$(STRIP) \$(MICRO_STRIP_FLAGS) \$(SAPI_MICRO_PATH)',
|
2024-02-19 12:17:03 +08:00
|
|
|
);
|
2024-02-19 12:27:15 +08:00
|
|
|
} else {
|
2024-04-07 15:52:24 +08:00
|
|
|
// just no strip
|
2024-02-19 12:27:15 +08:00
|
|
|
FileSystem::replaceFileRegex(
|
|
|
|
|
SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag',
|
|
|
|
|
'/POST_MICRO_BUILD_COMMANDS=.*/',
|
2024-02-20 10:56:39 +08:00
|
|
|
'POST_MICRO_BUILD_COMMANDS=true',
|
2024-02-19 12:27:15 +08:00
|
|
|
);
|
2024-02-19 12:17:03 +08:00
|
|
|
}
|
|
|
|
|
|
2023-03-26 22:27:51 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')
|
|
|
|
|
->exec(
|
2024-04-07 15:52:24 +08:00
|
|
|
getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' .
|
2023-09-02 21:25:33 +02:00
|
|
|
($enableCli ? '--enable-cli ' : '--disable-cli ') .
|
|
|
|
|
($enableFpm ? '--enable-fpm ' : '--disable-fpm ') .
|
2023-10-16 14:05:07 +02:00
|
|
|
($enableEmbed ? '--enable-embed=static ' : '--disable-embed ') .
|
|
|
|
|
($enableMicro ? '--enable-micro=all-static ' : '--disable-micro ') .
|
|
|
|
|
$disable_jit .
|
2023-05-04 11:29:14 +08:00
|
|
|
$json_74 .
|
2023-08-20 19:51:45 +08:00
|
|
|
$zts .
|
2023-08-21 12:54:36 +02:00
|
|
|
$maxExecutionTimers .
|
2024-01-03 10:31:21 +08:00
|
|
|
$this->makeExtensionArgs() .
|
|
|
|
|
' ' . $envs_build_php . ' '
|
2023-03-26 22:27:51 +08:00
|
|
|
);
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2024-01-03 15:57:05 +08:00
|
|
|
$this->emitPatchPoint('before-php-make');
|
2023-07-28 23:45:39 +08:00
|
|
|
SourcePatcher::patchBeforeMake($this);
|
2023-04-30 12:42:19 +08:00
|
|
|
|
2023-03-26 22:27:51 +08:00
|
|
|
$this->cleanMake();
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2023-08-21 09:30:46 +02:00
|
|
|
if ($enableCli) {
|
2023-04-23 20:31:58 +08:00
|
|
|
logger()->info('building cli');
|
2023-10-30 22:14:47 +01:00
|
|
|
$this->buildCli();
|
2023-04-23 20:31:58 +08:00
|
|
|
}
|
2023-08-21 09:30:46 +02:00
|
|
|
if ($enableFpm) {
|
2023-04-23 20:31:58 +08:00
|
|
|
logger()->info('building fpm');
|
2023-10-30 22:14:47 +01:00
|
|
|
$this->buildFpm();
|
2023-04-23 20:31:58 +08:00
|
|
|
}
|
2023-08-21 09:30:46 +02:00
|
|
|
if ($enableMicro) {
|
2023-04-23 20:31:58 +08:00
|
|
|
logger()->info('building micro');
|
2023-10-30 22:14:47 +01:00
|
|
|
$this->buildMicro();
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
2023-08-21 09:30:46 +02:00
|
|
|
if ($enableEmbed) {
|
|
|
|
|
logger()->info('building embed');
|
2023-10-01 01:32:43 +08:00
|
|
|
if ($enableMicro) {
|
|
|
|
|
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/Makefile', 'OVERALL_TARGET =', 'OVERALL_TARGET = libphp.la');
|
|
|
|
|
}
|
2023-10-30 22:14:47 +01:00
|
|
|
$this->buildEmbed();
|
2023-08-21 09:30:46 +02:00
|
|
|
}
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2023-08-20 19:51:45 +08:00
|
|
|
if (php_uname('m') === $this->getOption('arch')) {
|
2024-01-03 15:57:05 +08:00
|
|
|
$this->emitPatchPoint('before-sanity-check');
|
2023-04-23 20:31:58 +08:00
|
|
|
$this->sanityCheck($build_target);
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2023-08-20 19:51:45 +08:00
|
|
|
* Build cli sapi
|
|
|
|
|
*
|
2023-03-21 00:25:46 +08:00
|
|
|
* @throws RuntimeException
|
2023-08-20 19:51:45 +08:00
|
|
|
* @throws FileSystemException
|
2023-03-21 00:25:46 +08:00
|
|
|
*/
|
2024-01-10 11:10:40 +08:00
|
|
|
protected function buildCli(): void
|
2023-03-21 00:25:46 +08:00
|
|
|
{
|
2024-04-07 15:52:24 +08:00
|
|
|
$vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars());
|
2023-03-26 22:27:51 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')
|
|
|
|
|
->exec('sed -i "s|//lib|/lib|g" Makefile')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec("\$SPC_CMD_PREFIX_PHP_MAKE {$vars} cli");
|
2023-08-20 19:51:45 +08:00
|
|
|
|
2024-02-19 15:29:43 +08:00
|
|
|
if ($this->getOption('with-upx-pack')) {
|
2024-02-19 12:17:03 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')
|
|
|
|
|
->exec('strip --strip-all php')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec(getenv('UPX_EXEC') . ' --best php');
|
2024-02-19 15:29:43 +08:00
|
|
|
} elseif (!$this->getOption('no-strip', false)) {
|
|
|
|
|
shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')->exec('strip --strip-all php');
|
2023-08-20 19:51:45 +08:00
|
|
|
}
|
2023-03-26 22:27:51 +08:00
|
|
|
|
2023-04-23 20:31:58 +08:00
|
|
|
$this->deployBinary(BUILD_TARGET_CLI);
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2023-08-20 19:51:45 +08:00
|
|
|
* Build phpmicro sapi
|
|
|
|
|
*
|
|
|
|
|
* @throws FileSystemException
|
2023-10-23 00:37:28 +08:00
|
|
|
* @throws RuntimeException
|
|
|
|
|
* @throws WrongUsageException
|
2023-03-21 00:25:46 +08:00
|
|
|
*/
|
2024-01-10 11:10:40 +08:00
|
|
|
protected function buildMicro(): void
|
2023-03-21 00:25:46 +08:00
|
|
|
{
|
2023-04-03 20:47:24 +08:00
|
|
|
if ($this->getPHPVersionID() < 80000) {
|
2023-10-23 00:37:28 +08:00
|
|
|
throw new WrongUsageException('phpmicro only support PHP >= 8.0!');
|
2023-04-03 20:47:24 +08:00
|
|
|
}
|
2023-03-21 00:25:46 +08:00
|
|
|
if ($this->getExt('phar')) {
|
|
|
|
|
$this->phar_patched = true;
|
2023-05-01 12:50:01 +08:00
|
|
|
SourcePatcher::patchMicro(['phar']);
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
|
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
$enable_fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' -DPHP_MICRO_FAKE_CLI' : '';
|
|
|
|
|
$vars = $this->getMakeExtraVars();
|
|
|
|
|
|
|
|
|
|
// patch fake cli for micro
|
|
|
|
|
$vars['EXTRA_CFLAGS'] .= $enable_fake_cli;
|
|
|
|
|
$vars = SystemUtil::makeEnvVarString($vars);
|
|
|
|
|
|
2023-03-26 22:27:51 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')
|
|
|
|
|
->exec('sed -i "s|//lib|/lib|g" Makefile')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec("\$SPC_CMD_PREFIX_PHP_MAKE {$vars} micro");
|
2023-03-21 00:25:46 +08:00
|
|
|
|
2023-04-23 20:31:58 +08:00
|
|
|
$this->deployBinary(BUILD_TARGET_MICRO);
|
2023-09-23 17:00:42 +08:00
|
|
|
|
|
|
|
|
if ($this->phar_patched) {
|
|
|
|
|
SourcePatcher::patchMicro(['phar'], true);
|
|
|
|
|
}
|
2023-04-23 20:31:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2023-08-20 19:51:45 +08:00
|
|
|
* Build fpm sapi
|
2023-04-29 18:59:47 +08:00
|
|
|
*
|
2023-08-20 19:51:45 +08:00
|
|
|
* @throws FileSystemException
|
|
|
|
|
* @throws RuntimeException
|
2023-04-23 20:31:58 +08:00
|
|
|
*/
|
2024-01-10 11:10:40 +08:00
|
|
|
protected function buildFpm(): void
|
2023-04-23 20:31:58 +08:00
|
|
|
{
|
2024-04-07 15:52:24 +08:00
|
|
|
$vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars());
|
2023-04-23 20:31:58 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')
|
|
|
|
|
->exec('sed -i "s|//lib|/lib|g" Makefile')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec("\$SPC_CMD_PREFIX_PHP_MAKE {$vars} fpm");
|
2023-08-20 19:51:45 +08:00
|
|
|
|
2024-02-19 15:29:43 +08:00
|
|
|
if ($this->getOption('with-upx-pack')) {
|
2024-02-19 12:17:03 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src/sapi/fpm')
|
|
|
|
|
->exec('strip --strip-all php-fpm')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec(getenv('UPX_EXEC') . ' --best php-fpm');
|
2024-02-19 15:29:43 +08:00
|
|
|
} elseif (!$this->getOption('no-strip', false)) {
|
|
|
|
|
shell()->cd(SOURCE_PATH . '/php-src/sapi/fpm')->exec('strip --strip-all php-fpm');
|
2023-08-20 19:51:45 +08:00
|
|
|
}
|
2023-04-23 20:31:58 +08:00
|
|
|
$this->deployBinary(BUILD_TARGET_FPM);
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|
2023-08-21 09:30:46 +02:00
|
|
|
|
2023-10-23 00:37:28 +08:00
|
|
|
/**
|
|
|
|
|
* Build embed sapi
|
|
|
|
|
*
|
|
|
|
|
* @throws RuntimeException
|
|
|
|
|
*/
|
2024-01-10 11:10:40 +08:00
|
|
|
protected function buildEmbed(): void
|
2023-08-21 09:30:46 +02:00
|
|
|
{
|
2024-04-07 15:52:24 +08:00
|
|
|
$vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars());
|
2023-08-21 09:30:46 +02:00
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
shell()->cd(SOURCE_PATH . '/php-src')
|
2023-08-21 09:30:46 +02:00
|
|
|
->exec('sed -i "s|//lib|/lib|g" Makefile')
|
2024-04-07 15:52:24 +08:00
|
|
|
->exec(getenv('SPC_CMD_PREFIX_PHP_MAKE') . ' INSTALL_ROOT=' . BUILD_ROOT_PATH . " {$vars} install");
|
2023-08-21 09:30:46 +02:00
|
|
|
}
|
2023-10-30 22:14:47 +01:00
|
|
|
|
2024-04-07 15:52:24 +08:00
|
|
|
private function getMakeExtraVars(): array
|
2023-10-30 22:14:47 +01:00
|
|
|
{
|
|
|
|
|
return [
|
2024-04-07 15:52:24 +08:00
|
|
|
'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'),
|
2024-04-07 16:26:21 +08:00
|
|
|
'EXTRA_LIBS' => getenv('SPC_EXTRA_LIBS') . ' ' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS'),
|
2024-04-07 15:52:24 +08:00
|
|
|
'EXTRA_LDFLAGS_PROGRAM' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS_PROGRAM'),
|
2023-10-30 22:14:47 +01:00
|
|
|
];
|
|
|
|
|
}
|
2023-03-21 00:25:46 +08:00
|
|
|
}
|