- PM5 default
- PM5 PHP 8.2 (default for PM 5.10+)
- PM5 PHP 8.3 (not officially supported, but works in PM 5.9+)
- PM5 PHP 8.4 (not officially supported, but works in PM 5.33+)
- PM4 PHP 8.0 (default for PM 4.0+)
- PM4 PHP 8.1 (default for PM 4.21+)
- PM4 PHP 8.2 (never officially supported, but works in PM 4.12+)
- PM5 PHP 8.0 (default for PM 5.0 alpha)
- PM5 PHP 8.1 (default for PM 5.0+)
Bash script used to compile PHP on MacOS and Linux platforms. Make sure you have make autoconf automake libtool m4 wget getconf gzip bzip2 bison g++ git cmake pkg-config re2c ca-certificates.
- If you're going to use the compiled binary only on the machine you're build it on, remove the
-toption for best performance - this will allow the script to optimize for the current machine rather than a generic one. ext-gd2is NOT included unless the-gflag is provided, as PocketMine-MP doesn't need it. However, if your plugins need it, don't forget to enable it using-g.- The
-cand-loptions can be used to specify cache folders to speed up recompiling if you're recompiling many times (e.g. to improve the script).
- Avoid using the script in directory trees containing spaces. Some libraries don't like trying to be built in directory trees containing spaces, e.g.
/home/user/my folder/pocketmine-mp/might experience problems. - Avoid directory trees containing special (non-English) symbols. For example,
Développementmight cause issues.
- Most dependencies can be installed using Homebrew
- You will additionally need
glibtool(GNU libtool, xcode libtool won't work)
- Only aarch64 targets are supported for Android cross-compile.
- The
aarch64-linux-musltoolchain is required. You can compile and install it using https://github.com/pmmp/musl-cross-make (PMMP fork includes musl-libc patches for DNS resolver config path and increasing stack size limit for LevelDB)
| Script flags | Description |
|---|---|
| -c | Uses the folder specified for caching downloaded tarballs, zipballs etc. |
| -d | Compiles with debugging symbols and disables optimizations (slow, but useful for debugging segfaults) |
| -D | Compiles with separated debugging symbols, but leaves optimizations enabled (used for distributed binaries) |
| -g | Will compile GD2 |
| -j | Set make threads to # |
| -l | Uses the folder specified for caching compilation artifacts (useful for rapid rebuild and testing) |
| -n | Don't remove sources after completing compilation |
| -s | Will compile everything statically |
| -t | Set target |
| -v | Enable Valgrind support in PHP |
| -x | Specifies we are doing cross-compile |
| -P | Set target to the specified major PocketMine-MP version specified (currently only 5 is supported) |
| -z | PHP version to build, e.g 8.2 (optional, if not specified, will be auto-selected by PM version) |
| Target | Arguments |
|---|---|
| linux64 | -t linux64 -j4 -P5 |
| linux64, PM4 | -t linux64 -j4 -P4 |
| mac64 | -t mac-x86-64 -j4 -P5 |
| android-aarch64 | -t android-aarch64 -x -j4 -P5 |
Uses Visual Studio toolsets to compile PHP binaries on Windows.
You need to install git, cmake and Visual Studio 2019 to use this script.
This script doesn't accept parameters, but the following environment variables are influential:
| Variable | Description |
|---|---|
PHP_DEBUG_BUILD |
Disables optimisations and builds PHP with detailed debugging information (useful for debugging segfaults) |
SOURCES_PATH |
Where to put the downloaded sources for compilation |
PM_VERSION_MAJOR |
Major version of PocketMine-MP to build for (currently only 5 is supported) |
PHP_VERSION_BASE |
PHP version to build, e.g 8.2 (optional, if not specified, will be auto-selected by PM version) |
PHP_JIT_SUPPORT |
Whether to compile with OPcache JIT, set to 1 for yes |
| Link to package | Needed for | Notes |
|---|---|---|
| zlib | Compression | |
| gmp | Big integer math for Bedrock packet encryption | Hosted at DependencyMirror to avoid service outages |
| curl | Web requests | |
| libyaml | Parsing YAML config files | |
| leveldb | Bedrock world support | Custom version based on google/leveldb with minimum required changes to support MCPE worlds |
| libxml | XML parsing support for UPnP | Hosted at DependencyMirror to avoid service outages |
| libpng | php-gd, plugin use only | Hosted at DependencyMirror to avoid service outages |
| libjpeg | php-gd, plugin use only | Hosted at DependencyMirror to avoid service outages |
| openssl | Bedrock packet encryption, secure web requests | |
| libzip | Resource packs | |
| sqlite3 | Plugin use only | Hosted at DependencyMirror to avoid service outages |
| libdeflate | Faster alternative to zlib for network use | |
| pthreads4w | Needed by ext-pmmpthread on Windows | Hosted at DependencyMirror to avoid service outages |
| Link to package | Needed for | Notes |
|---|---|---|
| PHP | Everything | Replace 8.2 in the URL with your chosen version |
| pmmpthread | PHP threading | |
| yaml | YAML config parsing | Yes, the mix of - and _ is intentional. Don't ask me. |
| leveldb | Bedrock world support | Custom version to provide LEVELDB_ZLIB_RAW_COMPRESSION support |
| chunkutils2 | PalettedBlockArray and other low-level stuff |
|
| xdebug | Debugging | Not needed for production |
| igbinary | Faster serialization, mostly for moving stuff between threads | Non-essential, could be ditched if necessary |
| crypto | Bedrock packet encryption | |
| recursionguard | Debugging | Not needed for production |
| libdeflate | Faster network compression | Non-essential but provides significant performance advantage over zlib |
| morton | Packing X/Z and X/Y/Z coordinates into ints in a format suitable for PHP array keys | Needed for performance |
| xxhash | Not currently used | Could be replaced by hash() in recent versions of PHP but this extension has much better performance |
| arraydebug | Debugging array hash collisions | |
| encoding | Not currently used | Experimental, intended to replace BinaryUtils but never finished |
| Link to package | Needed for | Notes |
|---|---|---|
| php-sdk-binary-tools | Building PHP on Windows |