From e1028b0348cd21e1446a59d059f78c089b119f99 Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Tue, 24 Jun 2025 20:43:38 +0700 Subject: [PATCH] swoole has date time conversion error in c++ code, clang needs -lunwind --- config/env.ini | 4 ++-- src/SPC/builder/linux/LinuxBuilder.php | 7 ++++++- src/SPC/util/SPCConfigUtil.php | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/config/env.ini b/config/env.ini index 5c093fc7..8c25fe66 100644 --- a/config/env.ini +++ b/config/env.ini @@ -72,7 +72,7 @@ AR=${SPC_LINUX_DEFAULT_AR} LD=${SPC_LINUX_DEFAULT_LD} ; default compiler flags, used in CMake toolchain file, openssl and pkg-config build SPC_DEFAULT_C_FLAGS="-fPIC -Os -Wno-error=date-time -fno-sanitize=undefined" -SPC_DEFAULT_CXX_FLAGS="-fPIC -Os" +SPC_DEFAULT_CXX_FLAGS="-fPIC -Os -Wno-error=date-time" ; extra libs for building php executable, used in `make` command for building php (this value may changed by extension build process, space separated) SPC_EXTRA_LIBS= ; upx executable path @@ -96,7 +96,7 @@ SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS="${SPC_DEFAULT_C_FLAGS} -fPIE" ; CPPFLAGS for configuring php SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS="-I${BUILD_INCLUDE_PATH}" ; LDFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS="-L${BUILD_LIB_PATH}" +SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS="-L${BUILD_LIB_PATH} -L/usr/lib64" ; LIBS for configuring php SPC_CMD_VAR_PHP_CONFIGURE_LIBS="-ldl -lrt -lpthread -lm -lresolv -lutil" ; EXTRA_CFLAGS for `make` php diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index eb49f579..9d8c5208 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -80,6 +80,7 @@ class LinuxBuilder extends UnixBuilderBase } // add libstdc++, some extensions or libraries need it $extra_libs .= (empty($extra_libs) ? '' : ' ') . ($this->hasCpp() ? '-lstdc++ ' : ''); + $extra_libs .= (SystemUtil::getCCType(getenv('CC')) === 'clang' ? ' -lunwind' : ''); f_putenv('SPC_EXTRA_LIBS=' . $extra_libs); $cflags = $this->arch_c_flags; f_putenv('CFLAGS=' . $cflags); @@ -337,12 +338,16 @@ class LinuxBuilder extends UnixBuilderBase private function getMakeExtraVars(): array { - return [ + $env = [ 'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), 'EXTRA_LIBS' => getenv('SPC_EXTRA_LIBS') . ' ' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS'), 'EXTRA_LDFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS'), 'EXTRA_LDFLAGS_PROGRAM' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS_PROGRAM'), ]; + if (str_contains(getenv('CC'), 'zig')) { + $env['LDFLAGS'] = getenv('LDFLAGS') . ' -L/usr/lib64'; + } + return $env; } /** diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index ee13c4e9..e2f18b08 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -6,6 +6,7 @@ namespace SPC\util; use SPC\builder\BuilderBase; use SPC\builder\BuilderProvider; +use SPC\builder\linux\SystemUtil; use SPC\builder\macos\MacOSBuilder; use SPC\exception\FileSystemException; use SPC\exception\RuntimeException; @@ -70,6 +71,9 @@ class SPCConfigUtil if ($this->builder->hasCpp()) { $libs .= $this->builder instanceof MacOSBuilder ? ' -lc++' : ' -lstdc++'; } + if (SystemUtil::getCCType(getenv('CC')) === 'clang') { + $libs .= ' -lunwind'; + } // mimalloc must come first if (str_contains($libs, BUILD_LIB_PATH . '/mimalloc.o')) { $libs = BUILD_LIB_PATH . '/mimalloc.o ' . str_replace(BUILD_LIB_PATH . '/mimalloc.o', '', $libs);