@@ -181,6 +181,12 @@ else
181181 if ! echo " ${PHP_EXTENSION_LIBS} " | grep -q " \bbrotli\b" ; then
182182 PHP_EXTENSION_LIBS=" ${PHP_EXTENSION_LIBS} ,brotli"
183183 fi
184+ # The mimalloc library must be built if MIMALLOC is true
185+ if [ -n " ${MIMALLOC} " ]; then
186+ if ! echo " ${PHP_EXTENSION_LIBS} " | grep -q " \bmimalloc\b" ; then
187+ PHP_EXTENSION_LIBS=" ${PHP_EXTENSION_LIBS} ,mimalloc"
188+ fi
189+ fi
184190
185191 ${spcCommand} doctor --auto-fix
186192 # shellcheck disable=SC2086
@@ -248,6 +254,10 @@ if [ "${os}" = "linux" ] && [ "${SPC_LIBC}" = "glibc" ]; then
248254fi
249255
250256CGO_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) "
257+ if [[ " $CGO_LDFLAGS " == * " ${PWD} /buildroot/lib/mimalloc.o" * ]]; then
258+ CGO_LDFLAGS=${CGO_LDFLAGS// ${PWD} \/ buildroot\/ lib\/ mimalloc.o/ }
259+ CGO_LDFLAGS=" ${PWD} /buildroot/lib/libmimalloc.a $CGO_LDFLAGS "
260+ fi
251261if [ " ${os} " = " linux" ] && [ " ${SPC_LIBC} " = " glibc" ]; then
252262 CGO_LDFLAGS=" ${CGO_LDFLAGS// -lphp/ -Wl,--whole-archive -lphp -Wl,--no-whole-archive} "
253263 # shellcheck disable=SC2046
@@ -260,83 +270,6 @@ LIBPHP_VERSION="$(./buildroot/bin/php-config --version)"
260270
261271cd ../
262272
263- if [ " ${os} " = " linux" ]; then
264- if [ -n " ${MIMALLOC} " ]; then
265- # Replace musl's mallocng by mimalloc
266- # The default musl allocator is slow, especially when used by multi-threaded apps,
267- # and triggers weird bugs
268- # Adapted from https://www.tweag.io/blog/2023-08-10-rust-static-link-with-mimalloc/
269-
270- echo ' The USE_MIMALLOC environment variable is EXPERIMENTAL.'
271- echo ' This option can be removed or its behavior modified at any time.'
272-
273- if [ ! -f " mimalloc/out/libmimalloc.a" ]; then
274- if [ -d " mimalloc" ]; then
275- cd mimalloc/
276- git reset --hard
277- git clean -xdf
278- git fetch --tags
279- else
280- git clone https://github.com/microsoft/mimalloc.git
281- cd mimalloc/
282- fi
283-
284- # mimalloc version must be compatible with version used in tweag/rust-alpine-mimalloc
285- git checkout v3.0.1
286-
287- curl -fL --retry 5 https://raw.githubusercontent.com/tweag/rust-alpine-mimalloc/1a756444a5c1484d26af9cd39187752728416ba8/mimalloc.diff -o mimalloc.diff
288- patch -p1 < mimalloc.diff
289-
290- mkdir -p out/
291- cd out/
292- if [ -n " ${DEBUG_SYMBOLS} " ]; then
293- cmake \
294- -DCMAKE_BUILD_TYPE=Debug \
295- -DMI_BUILD_SHARED=OFF \
296- -DMI_BUILD_OBJECT=OFF \
297- -DMI_BUILD_TESTS=OFF \
298- ../
299- else
300- cmake \
301- -DCMAKE_BUILD_TYPE=Release \
302- -DMI_BUILD_SHARED=OFF \
303- -DMI_BUILD_OBJECT=OFF \
304- -DMI_BUILD_TESTS=OFF \
305- ../
306- fi
307- make -j" $( nproc || true) "
308-
309- cd ../../
310- fi
311-
312- if [ -n " ${DEBUG_SYMBOLS} " ]; then
313- libmimalloc_path=mimalloc/out/libmimalloc-debug.a
314- else
315- libmimalloc_path=mimalloc/out/libmimalloc.a
316- fi
317-
318- # Patch musl library to use mimalloc
319- for libc_path in " /usr/local/musl/lib/libc.a" " /usr/local/musl/$( uname -m) -linux-musl/lib/libc.a" " /usr/lib/libc.a" ; do
320- if [ ! -f " ${libc_path} " ] || [ -f " ${libc_path} .unpatched" ]; then
321- continue
322- fi
323-
324- {
325- echo " CREATE libc.a"
326- echo " ADDLIB ${libc_path} "
327- echo " DELETE aligned_alloc.lo calloc.lo donate.lo free.lo libc_calloc.lo lite_malloc.lo malloc.lo malloc_usable_size.lo memalign.lo posix_memalign.lo realloc.lo reallocarray.lo valloc.lo"
328- echo " ADDLIB ${libmimalloc_path} "
329- echo " SAVE"
330- } | ar -M
331- mv " ${libc_path} " " ${libc_path} .unpatched"
332- mv libc.a " ${libc_path} "
333- done
334- fi
335-
336- # Increase the default stack size to prevents issues with code including many files such as Symfony containers
337- extraExtldflags=" -Wl,-z,stack-size=0x80000"
338- fi
339-
340273if [ -z " ${DEBUG_SYMBOLS} " ]; then
341274 extraLdflags=" -w -s"
342275fi
@@ -358,12 +291,16 @@ if [ -n "${DEBUG_SYMBOLS}" ]; then
358291 XCADDY_DEBUG=1
359292fi
360293
294+ if [ " ${SPC_LIBC} " = " musl" ]; then
295+ muslStackSizeFix=" -Wl,-z,stack-size=0x80000"
296+ fi
297+
361298go env
362299cd caddy/
363300if [ -z " ${SPC_LIBC} " ] || [ " ${SPC_LIBC} " = " musl" ]; then
364- xcaddyGoBuildFlags=" -buildmode=pie -tags cgo,netgo,osusergo,static_build,nobadger,nomysql,nopgx -ldflags \" -linkmode=external -extldflags '-static-pie ${extraExtldflags } ' ${extraLdflags} -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${FRANKENPHP_VERSION} PHP ${LIBPHP_VERSION} Caddy'\" "
301+ xcaddyGoBuildFlags=" -buildmode=pie -tags cgo,netgo,osusergo,static_build,nobadger,nomysql,nopgx -ldflags \" -linkmode=external -extldflags '-static-pie ${muslStackSizeFix } ' ${extraLdflags} -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${FRANKENPHP_VERSION} PHP ${LIBPHP_VERSION} Caddy'\" "
365302elif [ " ${SPC_LIBC} " = " glibc" ]; then
366- xcaddyGoBuildFlags=" -buildmode=pie -tags cgo,netgo,osusergo,nobadger,nomysql,nopgx -ldflags \" -linkmode=external -extldflags '-pie ${extraExtldflags} ' ${extraLdflags} -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${FRANKENPHP_VERSION} PHP ${LIBPHP_VERSION} Caddy'\" "
303+ xcaddyGoBuildFlags=" -buildmode=pie -tags cgo,netgo,osusergo,nobadger,nomysql,nopgx -ldflags \" -linkmode=external -extldflags '-pie' ${extraLdflags} -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${FRANKENPHP_VERSION} PHP ${LIBPHP_VERSION} Caddy'\" "
367304fi
368305
369306# shellcheck disable=SC2086
0 commit comments