doesn't even work yet, there has to be a better way than to add 2913912309 libraries

This commit is contained in:
DubbleClick 2025-07-21 00:32:43 +07:00
parent c364970e05
commit 9b207807eb
3 changed files with 45 additions and 15 deletions

View File

@ -186,12 +186,12 @@
"grpc": { "grpc": {
"source": "grpc", "source": "grpc",
"static-libs-unix": [ "static-libs-unix": [
"libgrpc.a", "libgrpc.a"
"libcares.a"
], ],
"lib-depends": [ "lib-depends": [
"zlib", "zlib",
"openssl" "openssl",
"libcares"
], ],
"frameworks": [ "frameworks": [
"CoreFoundation" "CoreFoundation"

View File

@ -36,9 +36,20 @@ class grpc extends Extension
} }
return false; return false;
} }
public function patchBeforeConfigure(): bool
{
$libs = ' -l' . join(' -l', $this->getLibraries());
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/configure', '-lgrpc', $libs);
return true;
}
public function patchBeforeMake(): bool public function patchBeforeMake(): bool
{ {
$extra_libs = trim(getenv('SPC_EXTRA_LIBS'));
$alibs = join('.a ', $this->getLibraries()) . '.a';
$libs = BUILD_LIB_PATH . '/lib' . str_replace(' ', ' ' . BUILD_LIB_PATH . '/lib', $alibs);
$extra_libs = str_replace(BUILD_LIB_PATH . '/libgrpc.a', $libs, $extra_libs);
f_putenv('SPC_EXTRA_LIBS=' . $extra_libs);
// add -Wno-strict-prototypes // add -Wno-strict-prototypes
GlobalEnvManager::putenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS=' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -Wno-strict-prototypes'); GlobalEnvManager::putenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS=' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -Wno-strict-prototypes');
return true; return true;
@ -48,4 +59,12 @@ class grpc extends Extension
{ {
return '--enable-grpc=' . BUILD_ROOT_PATH . '/grpc GRPC_LIB_SUBDIR=' . BUILD_LIB_PATH; return '--enable-grpc=' . BUILD_ROOT_PATH . '/grpc GRPC_LIB_SUBDIR=' . BUILD_LIB_PATH;
} }
private function getLibraries(): array
{
[, $out] = shell()->execWithResult('$PKG_CONFIG --libs-only-l grpc');
$libs = join(' ', $out) . ' -lupb -lupb_message_lib -lupb_json_lib -lupb_textformat_lib -lupb_mini_descriptor_lib -lupb_wire_lib -lupb_mem_lib -lupb_base_lib -lutf8_range';
$libs = str_replace('-l', '', $libs);
return explode(' ', $libs);
}
} }

View File

@ -4,22 +4,33 @@ declare(strict_types=1);
namespace SPC\builder\unix\library; namespace SPC\builder\unix\library;
use SPC\store\FileSystem; use SPC\util\executor\UnixCMakeExecutor;
trait grpc trait grpc
{ {
protected function build(): void protected function build(): void
{ {
shell()->cd($this->source_dir) UnixCMakeExecutor::create($this)
->exec('EXTRA_DEFINES=GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK EMBED_OPENSSL=false CXXFLAGS="-L' . BUILD_LIB_PATH . ' -I' . BUILD_INCLUDE_PATH . '" make static -j' . $this->builder->concurrency); ->addConfigureArgs(
copy($this->source_dir . '/libs/opt/libgrpc.a', BUILD_LIB_PATH . '/libgrpc.a'); '-DgRPC_SSL_PROVIDER=openssl',
copy($this->source_dir . '/libs/opt/libboringssl.a', BUILD_LIB_PATH . '/libboringssl.a'); '-DgRPC_INSTALL_BINDIR=' . BUILD_BIN_PATH,
if (!file_exists(BUILD_LIB_PATH . '/libcares.a')) { '-DgRPC_INSTALL_LIBDIR=' . BUILD_LIB_PATH,
copy($this->source_dir . '/libs/opt/libcares.a', BUILD_LIB_PATH . '/libcares.a'); '-DgRPC_INSTALL_SHAREDIR=' . BUILD_ROOT_PATH . '/share/grpc',
} '-DOPENSSL_ROOT_DIR=' . BUILD_ROOT_PATH,
FileSystem::copyDir($this->source_dir . '/include/grpc', BUILD_INCLUDE_PATH . '/grpc'); '-DOPENSSL_INCLUDE_DIR=' . BUILD_INCLUDE_PATH,
FileSystem::copyDir($this->source_dir . '/include/grpc++', BUILD_INCLUDE_PATH . '/grpc++'); '-DCMAKE_CXX_FLAGS="-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK"'
FileSystem::copyDir($this->source_dir . '/include/grpcpp', BUILD_INCLUDE_PATH . '/grpcpp'); )
FileSystem::copyDir($this->source_dir . '/src/php/ext/grpc', BUILD_ROOT_PATH . '/grpc_php_ext_src'); ->build();
//shell()->cd($this->source_dir)
// ->exec('EXTRA_DEFINES=GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK EMBED_OPENSSL=false CXXFLAGS="-L' . BUILD_LIB_PATH . ' -I' . BUILD_INCLUDE_PATH . '" make static -j' . $this->builder->concurrency);
//copy($this->source_dir . '/libs/opt/libgrpc.a', BUILD_LIB_PATH . '/libgrpc.a');
//copy($this->source_dir . '/libs/opt/libboringssl.a', BUILD_LIB_PATH . '/libboringssl.a');
//if (!file_exists(BUILD_LIB_PATH . '/libcares.a')) {
// copy($this->source_dir . '/libs/opt/libcares.a', BUILD_LIB_PATH . '/libcares.a');
//}
//FileSystem::copyDir($this->source_dir . '/include/grpc', BUILD_INCLUDE_PATH . '/grpc');
//FileSystem::copyDir($this->source_dir . '/include/grpc++', BUILD_INCLUDE_PATH . '/grpc++');
//FileSystem::copyDir($this->source_dir . '/include/grpcpp', BUILD_INCLUDE_PATH . '/grpcpp');
//FileSystem::copyDir($this->source_dir . '/src/php/ext/grpc', BUILD_ROOT_PATH . '/grpc_php_ext_src');
} }
} }