2024-10-01 15:37:37 +08:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; static-php-cli (spc) env configuration
;
; This file is used to set default env vars for static-php-cli build.
; As dynamic build process, some of these vars can be overwritten by CLI options.
; And you can also overwrite these vars by setting them in your shell environment.
;
; We need to use some pre-defined internal env vars, like `BUILD_ROOT_PATH`, `DOWNLOAD_PATH`, etc.
; Please note that these vars cannot be defined in this file, they are only be defined before static-php-cli running.
;
2025-03-14 18:22:50 +08:00
; Here's a list of env vars, these value cannot be changed anywhere:
;
; WORKING_DIR: the working directory of the build process. (default: `$(pwd)`)
; ROOT_DIR: the root directory of static-php-cli. (default: `/path/to/static-php-cli`, when running in phar or micro mode: `phar://path/to/spc.phar`)
2024-10-01 15:37:37 +08:00
; BUILD_ROOT_PATH: the root path of the build process. (default: `$(pwd)/buildroot`)
; BUILD_INCLUDE_PATH: the path of the include files. (default: `$BUILD_ROOT_PATH/include`)
; BUILD_LIB_PATH: the path of the lib files. (default: `$BUILD_ROOT_PATH/lib`)
; BUILD_BIN_PATH: the path of the bin files. (default: `$BUILD_ROOT_PATH/bin`)
; PKG_ROOT_PATH: the root path of the package files. (default: `$(pwd)/pkgroot`)
; SOURCE_PATH: the path of the source files. (default: `$(pwd)/source`)
; DOWNLOAD_PATH: the path of the download files. (default: `$(pwd)/downloads`)
; CPU_COUNT: the count of the CPU cores. (default: `$(nproc)`)
2025-03-14 18:22:50 +08:00
; SPC_ARCH: the arch of the current system, for some libraries needed `--host=XXX` args. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`, `arm64`)
2024-10-01 15:37:37 +08:00
; GNU_ARCH: the GNU arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`)
; MAC_ARCH: the MAC arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `arm64`)
;
2025-03-14 18:22:50 +08:00
; * These vars are only be defined in Unix (macOS, Linux, FreeBSD)Builder and cannot be changed anywhere:
2024-10-01 15:37:37 +08:00
; PATH: static-php-cli will add `$BUILD_BIN_PATH` to PATH.
; PKG_CONFIG: static-php-cli will set `$BUILD_BIN_PATH/pkg-config` to PKG_CONFIG.
; PKG_CONFIG_PATH: static-php-cli will set `$BUILD_LIB_PATH/pkgconfig` to PKG_CONFIG_PATH.
;
2025-03-14 18:22:50 +08:00
; * These vars are only be defined in LinuxBuilder and cannot be changed anywhere:
2024-10-01 16:11:46 +08:00
; SPC_LINUX_DEFAULT_CC: the default compiler for linux. (For alpine linux: `gcc`, default: `$GNU_ARCH-linux-musl-gcc`)
; SPC_LINUX_DEFAULT_CXX: the default c++ compiler for linux. (For alpine linux: `g++`, default: `$GNU_ARCH-linux-musl-g++`)
; SPC_LINUX_DEFAULT_AR: the default archiver for linux. (For alpine linux: `ar`, default: `$GNU_ARCH-linux-musl-ar`)
2024-10-01 15:37:37 +08:00
[global]
2024-10-03 15:25:44 +08:00
; Build concurrency for make -jN, default is CPU_COUNT, this value are used in every libs.
2024-10-01 15:37:37 +08:00
SPC_CONCURRENCY = ${CPU_COUNT}
; Ignore PHP version check before building some extensions
SPC_SKIP_PHP_VERSION_CHECK = "no"
2024-10-03 14:53:25 +08:00
; Ignore some check item for bin/spc doctor command, comma separated (e.g. SPC_SKIP_DOCTOR_CHECK_ITEMS="if homebrew has installed")
SPC_SKIP_DOCTOR_CHECK_ITEMS = ""
2025-06-18 10:48:09 +07:00
; extra modules that xcaddy will include in the FrankenPHP build
2025-06-19 12:08:53 +07:00
SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES = "--with github.com/dunglas/frankenphp/caddy --with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy --with github.com/dunglas/caddy-cbrotli"
2025-06-18 10:48:09 +07:00
2025-03-12 08:59:47 +01:00
; EXTENSION_DIR where the built php will look for extension when a .ini instructs to load them
2025-03-14 18:22:50 +08:00
; only useful for builds targeting not pure-static linking
2025-03-12 08:59:47 +01:00
; default paths
; Ubuntu/Debian: /usr/lib/php/{PHP_VERSION}/
; RHEL: /usr/lib64/php/modules
; Alpine: /usr/lib/php{PHP_VERSION}/modules
; where {PHP_VERSION} is 84 for php 8.4
2025-04-14 11:01:39 +07:00
; EXTENSION_DIR=
2024-10-01 15:37:37 +08:00
[windows]
2025-06-28 16:36:05 +08:00
; build target: win7-static
2025-06-29 16:03:38 +08:00
SPC_TARGET = native-windows
2024-10-01 15:37:37 +08:00
; php-sdk-binary-tools path
2024-10-04 18:20:25 +08:00
PHP_SDK_PATH = "${WORKING_DIR}\php-sdk-binary-tools"
2024-10-01 15:37:37 +08:00
; upx executable path
2024-10-04 18:20:25 +08:00
UPX_EXEC = "${PKG_ROOT_PATH}\bin\upx.exe"
2024-10-01 15:37:37 +08:00
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
SPC_MICRO_PATCHES = static_extensions_win32,cli_checks,disable_huge_page,vcruntime140,win32,zend_stream,cli_static
[linux]
2025-07-01 14:01:48 +07:00
; Linux can use different build toolchains.
; - musl (default, when SPC_LIBC=musl): used for general linux distros, can build `musl` (statically linked) only.
; - zig (will become default): usable on all Linux distros, can build `-musl`, `arch-linux-musl -dynamic` and `arch-linux-gnu` targets. Can specify version such as `x86_64-linux-gnu.2.17`.
; - musl-native: used for alpine linux, can build `musl` and `musl -dynamic` target.
; - gnu-native: used for general linux distros, can build gnu target for the installed glibc version only.
2025-06-28 16:36:05 +08:00
2025-07-01 14:01:48 +07:00
; LEGACY option to specify the target, switch to SPC_TARGET with zig toolchain instead
2025-03-14 18:22:50 +08:00
SPC_LIBC = musl
2025-07-01 14:01:48 +07:00
; Recommended: specify your target here. Zig toolchain will be used.
; examples:
2025-07-01 14:07:41 +07:00
; `native-native-gnu` - links against glibc, current OS version
; `native-native-gnu.2.17` - links against glibc, version 2.17
; `native-native` - static linking against musl
2025-07-01 14:01:48 +07:00
; `native-native-musl -dynamic` - links against musl libc
; SPC_TARGET=
2024-10-01 15:37:37 +08:00
; compiler environments
CC = ${SPC_LINUX_DEFAULT_CC}
CXX = ${SPC_LINUX_DEFAULT_CXX}
AR = ${SPC_LINUX_DEFAULT_AR}
2025-06-19 10:36:31 +07:00
LD = ${SPC_LINUX_DEFAULT_LD}
2024-10-01 15:37:37 +08:00
; default compiler flags, used in CMake toolchain file, openssl and pkg-config build
2025-06-25 11:24:01 +07:00
SPC_DEFAULT_C_FLAGS = "-fPIC -Os -Wno-error=date-time"
2025-06-24 20:43:38 +07:00
SPC_DEFAULT_CXX_FLAGS = "-fPIC -Os -Wno-error=date-time"
2024-10-01 15:37:37 +08:00
; 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
UPX_EXEC = ${PKG_ROOT_PATH}/bin/upx
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
2025-06-30 12:56:12 +07:00
SPC_MICRO_PATCHES = cli_checks,disable_huge_page
2024-10-01 15:37:37 +08:00
; *** default build command for building php ***
; buildconf command
SPC_CMD_PREFIX_PHP_BUILDCONF = "./buildconf --force"
; configure command
2025-05-25 11:02:54 +07:00
SPC_CMD_PREFIX_PHP_CONFIGURE = "./configure --prefix= --with-valgrind=no --disable-shared --enable-static --disable-all --disable-cgi --disable-phpdbg --with-pic"
2024-10-01 15:37:37 +08:00
; make command
2024-10-03 15:25:44 +08:00
SPC_CMD_PREFIX_PHP_MAKE = "make -j${CPU_COUNT}"
2025-03-10 16:15:47 +08:00
; embed type for php, static (libphp.a) or shared (libphp.so)
2025-03-11 13:33:03 +08:00
SPC_CMD_VAR_PHP_EMBED_TYPE = "static"
2024-10-01 15:37:37 +08:00
; *** default build vars for building php ***
; CFLAGS for configuring php
2025-06-18 12:46:05 +07:00
SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS = "${SPC_DEFAULT_C_FLAGS} -fPIE"
2024-10-01 15:37:37 +08:00
; CPPFLAGS for configuring php
2025-06-12 11:45:47 +07:00
SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS = "-I${BUILD_INCLUDE_PATH}"
2024-10-01 15:37:37 +08:00
; LDFLAGS for configuring php
2025-06-24 23:07:17 +07:00
SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS = "-L${BUILD_LIB_PATH}"
2024-10-01 15:37:37 +08:00
; LIBS for configuring php
2025-07-03 11:11:21 +07:00
SPC_CMD_VAR_PHP_CONFIGURE_LIBS = "-ldl -lrt -lpthread -lm -lresolv"
2024-10-01 15:37:37 +08:00
; EXTRA_CFLAGS for `make` php
2025-06-22 17:21:28 +07:00
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS = "-g -fstack-protector-strong -fno-ident -fPIE ${SPC_DEFAULT_C_FLAGS}"
2024-10-01 15:37:37 +08:00
; EXTRA_LIBS for `make` php
2025-07-03 11:11:21 +07:00
SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS = "-ldl -lrt -lpthread -lm -lresolv"
2025-06-05 13:54:17 +07:00
; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.so
SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS = ""
2024-10-01 15:37:37 +08:00
; EXTRA_LDFLAGS_PROGRAM for `make` php
2025-06-23 19:21:51 +07:00
SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS_PROGRAM = "-all-static -pie"
2024-10-01 15:37:37 +08:00
[macos]
2025-06-28 16:36:05 +08:00
; build target: macho or macho (possibly we could support macho-universal in the future)
; Currently we do not support universal and cross-compilation for macOS.
2025-06-29 16:03:38 +08:00
SPC_TARGET = native-macos
2024-10-01 15:37:37 +08:00
; compiler environments
CC = clang
CXX = clang++
; default compiler flags, used in CMake toolchain file, openssl and pkg-config build
2025-06-12 11:01:05 +07:00
SPC_DEFAULT_C_FLAGS = "--target=${MAC_ARCH}-apple-darwin -Os"
SPC_DEFAULT_CXX_FLAGS = "--target=${MAC_ARCH}-apple-darwin -Os"
2024-10-01 15:37:37 +08:00
; 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 =
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
2025-06-28 16:47:19 +08:00
SPC_MICRO_PATCHES = cli_checks,macos_iconv
2024-10-01 15:37:37 +08:00
; *** default build command for building php ***
; buildconf command
SPC_CMD_PREFIX_PHP_BUILDCONF = "./buildconf --force"
; configure command
SPC_CMD_PREFIX_PHP_CONFIGURE = "./configure --prefix= --with-valgrind=no --enable-shared=no --enable-static=yes --disable-all --disable-cgi --disable-phpdbg"
; make command
2024-10-01 16:41:10 +08:00
SPC_CMD_PREFIX_PHP_MAKE = "make -j${CPU_COUNT}"
2024-10-01 15:37:37 +08:00
; *** default build vars for building php ***
; CFLAGS for configuring php
SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS = "${SPC_DEFAULT_C_FLAGS} -Werror=unknown-warning-option"
; 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}"
; EXTRA_CFLAGS for `make` php
2025-06-12 11:40:32 +07:00
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS = "-g -fstack-protector-strong -fpic -fpie ${SPC_DEFAULT_C_FLAGS}"
2024-10-01 15:37:37 +08:00
; EXTRA_LIBS for `make` php
SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS = "-lresolv"
2025-03-11 07:44:31 +01:00
; embed type for php, static (libphp.a) or shared (libphp.dylib)
SPC_CMD_VAR_PHP_EMBED_TYPE = "static"
2024-10-01 15:37:37 +08:00
[freebsd]
; compiler environments
CC = clang
CXX = clang++