try to make everything -flto=thin compatible (librdkafka fails for some reason)

This commit is contained in:
DubbleClick 2025-07-26 21:44:01 +07:00
parent fb62a0e338
commit 978552136c
5 changed files with 36 additions and 6 deletions

View File

@ -92,7 +92,7 @@ class LinuxBuilder extends UnixBuilderBase
'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'),
'CPPFLAGS' => '-I' . BUILD_INCLUDE_PATH,
'LDFLAGS' => '-L' . BUILD_LIB_PATH,
'LIBS' => SPCTarget::getRuntimeLibs(), // do not pass static libraries here yet, they may contain polyfills for libc functions!
//'LIBS' => SPCTarget::getRuntimeLibs(), // do not pass static libraries here yet, they may contain polyfills for libc functions!
]);
$embed_type = getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') ?: 'static';
@ -103,7 +103,7 @@ class LinuxBuilder extends UnixBuilderBase
);
}
shell()->cd(SOURCE_PATH . '/php-src')
->exec(
->exec($php_configure_env . ' ' .
getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' .
($enableCli ? '--enable-cli ' : '--disable-cli ') .
($enableFpm ? '--enable-fpm ' . ($this->getLib('libacl') !== null ? '--with-fpm-acl ' : '') : '--disable-fpm ') .
@ -115,8 +115,8 @@ class LinuxBuilder extends UnixBuilderBase
$json_74 .
$zts .
$maxExecutionTimers .
$this->makeStaticExtensionArgs() .
' ' . $php_configure_env . ' '
$this->makeStaticExtensionArgs() . ' '
//'ac_cv_lib_readline_rl_pending_input=yes'
);
$this->emitPatchPoint('before-php-make');

View File

@ -17,6 +17,14 @@ trait librdkafka
*/
protected function build(): void
{
$cflags = $this->builder->arch_c_flags;
$cxxflags = $this->builder->arch_cxx_flags;
$patched_cflags = preg_replace('/\s*-flto(=\S*)?\s*/', ' ', $cflags);
$patched_cxxflags = preg_replace('/\s*-flto(=\S*)?\s*/', ' ', $cxxflags);
$this->builder->arch_c_flags = $patched_cflags;
$this->builder->arch_cxx_flags = $patched_cxxflags;
FileSystem::replaceFileStr(
$this->source_dir . '/lds-gen.py',
"funcs.append('rd_ut_coverage_check')",
@ -56,5 +64,8 @@ trait librdkafka
->exec("rm -rf {$this->getLibDir()}/*.so.*")
->exec("rm -rf {$this->getLibDir()}/*.so")
->exec("rm -rf {$this->getLibDir()}/*.dylib");
$this->builder->arch_c_flags = $cflags;
$this->builder->arch_cxx_flags = $cxxflags;
}
}

View File

@ -16,6 +16,14 @@ trait unixodbc
*/
protected function build(): void
{
$cflags = $this->builder->arch_c_flags;
$cxxflags = $this->builder->arch_cxx_flags;
$patched_cflags = preg_replace('/\s*-flto(=\S*)?\s*/', ' ', $cflags);
$patched_cxxflags = preg_replace('/\s*-flto(=\S*)?\s*/', ' ', $cxxflags);
$this->builder->arch_c_flags = $patched_cflags;
$this->builder->arch_cxx_flags = $patched_cxxflags;
UnixAutoconfExecutor::create($this)
->configure(
'--disable-debug',
@ -27,5 +35,8 @@ trait unixodbc
->make();
$this->patchPkgconfPrefix(['odbc.pc', 'odbccr.pc', 'odbcinst.pc']);
$this->patchLaDependencyPrefix();
$this->builder->arch_c_flags = $cflags;
$this->builder->arch_cxx_flags = $cxxflags;
}
}

View File

@ -162,6 +162,12 @@ class Zig extends CustomPackage
$script_content = str_replace('zig cc', 'zig c++', $script_content);
file_put_contents("{$bin_dir}/zig-c++", $script_content);
file_put_contents("{$bin_dir}/zig-ar", "#!/usr/bin/env bash\nexec zig ar $@");
file_put_contents("{$bin_dir}/zig-ranlib", "#!/usr/bin/env bash\nexec zig ranlib $@");
file_put_contents("{$bin_dir}/zig-objcopy", "#!/usr/bin/env bash\nexec zig objcopy $@");
chmod("{$bin_dir}/zig-c++", 0755);
chmod("{$bin_dir}/zig-ar", 0755);
chmod("{$bin_dir}/zig-ranlib", 0755);
chmod("{$bin_dir}/zig-objcopy", 0755);
}
}

View File

@ -15,10 +15,12 @@ class ZigToolchain implements ToolchainInterface
// Set environment variables for zig toolchain
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CC=zig-cc');
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CXX=zig-c++');
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_AR=zig ar');
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_AR=zig-ar');
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_LD=zig-cc');
GlobalEnvManager::putenv('RANLIB=zig-ranlib');
GlobalEnvManager::putenv('OBJCOPY=zig-objcopy');
// Generate additional object needed for zig toolchain
// Generate additional objects needed for zig toolchain
$paths = ['/usr/lib/gcc', '/usr/local/lib/gcc'];
$objects = ['crtbeginS.o', 'crtendS.o'];
$found = [];