diff --git a/config/env.ini b/config/env.ini index 1565f622..cc4ec13e 100644 --- a/config/env.ini +++ b/config/env.ini @@ -90,6 +90,7 @@ LD=${SPC_LINUX_DEFAULT_LD} ; default compiler flags, used in CMake toolchain file, openssl and pkg-config build SPC_DEFAULT_C_FLAGS="-fPIC -Os" SPC_DEFAULT_CXX_FLAGS="-fPIC -Os" +SPC_DEFAULT_LD_FLAGS="" ; upx executable path UPX_EXEC=${PKG_ROOT_PATH}/bin/upx ; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 88e0a71d..d62cc7a9 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -35,6 +35,7 @@ class LinuxBuilder extends UnixBuilderBase // cflags $this->arch_c_flags = getenv('SPC_DEFAULT_C_FLAGS'); $this->arch_cxx_flags = getenv('SPC_DEFAULT_CXX_FLAGS'); + $this->arch_ld_flags = getenv('SPC_DEFAULT_LD_FLAGS'); // create pkgconfig and include dir (some libs cannot create them automatically) f_mkdir(BUILD_LIB_PATH . '/pkgconfig', recursive: true); diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index a74b6f14..bd152cb7 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -38,6 +38,7 @@ class MacOSBuilder extends UnixBuilderBase // cflags $this->arch_c_flags = getenv('SPC_DEFAULT_C_FLAGS'); $this->arch_cxx_flags = getenv('SPC_DEFAULT_CXX_FLAGS'); + $this->arch_ld_flags = getenv('SPC_DEFAULT_LD_FLAGS'); // create pkgconfig and include dir (some libs cannot create them automatically) f_mkdir(BUILD_LIB_PATH . '/pkgconfig', recursive: true); diff --git a/src/SPC/builder/traits/UnixLibraryTrait.php b/src/SPC/builder/traits/UnixLibraryTrait.php index 151ace1b..c45d45b2 100644 --- a/src/SPC/builder/traits/UnixLibraryTrait.php +++ b/src/SPC/builder/traits/UnixLibraryTrait.php @@ -97,16 +97,6 @@ trait UnixLibraryTrait return trim($env); } - public function getLibExtraLdFlags(): string - { - return getenv($this->getSnakeCaseName() . '_LDFLAGS') ?: ''; - } - - public function getLibExtraLibs(): string - { - return getenv($this->getSnakeCaseName() . '_LIBS') ?: ''; - } - public function getLibExtraCXXFlags(): string { $env = getenv($this->getSnakeCaseName() . '_CXXFLAGS') ?: ''; @@ -115,4 +105,18 @@ trait UnixLibraryTrait } return trim($env); } + + public function getLibExtraLdFlags(): string + { + $env = getenv($this->getSnakeCaseName() . '_LDFLAGS') ?: ''; + if (!str_contains($env, $this->builder->arch_ld_flags)) { + $env .= ' ' . $this->builder->arch_ld_flags; + } + return trim($env); + } + + public function getLibExtraLibs(): string + { + return getenv($this->getSnakeCaseName() . '_LIBS') ?: ''; + } } diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index d4afbc93..98567a6b 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -26,6 +26,9 @@ abstract class UnixBuilderBase extends BuilderBase /** @var string C++ flags */ public string $arch_cxx_flags; + /** @var string LD flags */ + public string $arch_ld_flags; + public function proveLibs(array $sorted_libraries): void { // search all supported libs diff --git a/src/SPC/builder/unix/library/librdkafka.php b/src/SPC/builder/unix/library/librdkafka.php index 81bd9364..3df7a931 100644 --- a/src/SPC/builder/unix/library/librdkafka.php +++ b/src/SPC/builder/unix/library/librdkafka.php @@ -17,14 +17,6 @@ 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')", @@ -64,8 +56,5 @@ 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; } } diff --git a/src/SPC/builder/unix/library/unixodbc.php b/src/SPC/builder/unix/library/unixodbc.php index 842b9d93..a795d244 100644 --- a/src/SPC/builder/unix/library/unixodbc.php +++ b/src/SPC/builder/unix/library/unixodbc.php @@ -16,14 +16,6 @@ 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', @@ -35,8 +27,5 @@ 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; } }