diff --git a/build-static.sh b/build-static.sh index 15945c6d77..aff09f608e 100755 --- a/build-static.sh +++ b/build-static.sh @@ -181,6 +181,12 @@ else if ! echo "${PHP_EXTENSION_LIBS}" | grep -q "\bbrotli\b"; then PHP_EXTENSION_LIBS="${PHP_EXTENSION_LIBS},brotli" fi + # The mimalloc library must be built if MIMALLOC is true + if [ -n "${MIMALLOC}" ]; then + if ! echo "${PHP_EXTENSION_LIBS}" | grep -q "\bmimalloc\b"; then + PHP_EXTENSION_LIBS="${PHP_EXTENSION_LIBS},mimalloc" + fi + fi ${spcCommand} doctor --auto-fix # shellcheck disable=SC2086 @@ -248,6 +254,10 @@ if [ "${os}" = "linux" ] && [ "${SPC_LIBC}" = "glibc" ]; then fi CGO_LDFLAGS="${CGO_LDFLAGS} ${PWD}/buildroot/lib/libbrotlicommon.a ${PWD}/buildroot/lib/libbrotlienc.a ${PWD}/buildroot/lib/libbrotlidec.a ${PWD}/buildroot/lib/libwatcher-c.a $(${spcCommand} spc-config "${PHP_EXTENSIONS}" --with-libs="${PHP_EXTENSION_LIBS}" --libs)" +if [[ "$CGO_LDFLAGS" == *"${PWD}/buildroot/lib/mimalloc.o"* ]]; then + CGO_LDFLAGS=${CGO_LDFLAGS//${PWD}\/buildroot\/lib\/mimalloc.o/} + CGO_LDFLAGS="${PWD}/buildroot/lib/libmimalloc.a $CGO_LDFLAGS" +fi if [ "${os}" = "linux" ] && [ "${SPC_LIBC}" = "glibc" ]; then CGO_LDFLAGS="${CGO_LDFLAGS//-lphp/-Wl,--whole-archive -lphp -Wl,--no-whole-archive}" # shellcheck disable=SC2046 @@ -260,83 +270,6 @@ LIBPHP_VERSION="$(./buildroot/bin/php-config --version)" cd ../ -if [ "${os}" = "linux" ]; then - if [ -n "${MIMALLOC}" ]; then - # Replace musl's mallocng by mimalloc - # The default musl allocator is slow, especially when used by multi-threaded apps, - # and triggers weird bugs - # Adapted from https://www.tweag.io/blog/2023-08-10-rust-static-link-with-mimalloc/ - - echo 'The USE_MIMALLOC environment variable is EXPERIMENTAL.' - echo 'This option can be removed or its behavior modified at any time.' - - if [ ! -f "mimalloc/out/libmimalloc.a" ]; then - if [ -d "mimalloc" ]; then - cd mimalloc/ - git reset --hard - git clean -xdf - git fetch --tags - else - git clone https://github.com/microsoft/mimalloc.git - cd mimalloc/ - fi - - # mimalloc version must be compatible with version used in tweag/rust-alpine-mimalloc - git checkout v3.0.1 - - curl -fL --retry 5 https://raw.githubusercontent.com/tweag/rust-alpine-mimalloc/1a756444a5c1484d26af9cd39187752728416ba8/mimalloc.diff -o mimalloc.diff - patch -p1