Benutzerdefinierte PHP-Build-Skripte für PocketMine-MP
Suchen Sie nach vorgefertigten Binärdateien? Gehen Sie zu den Veröffentlichungen
kompilieren.sh
Bash-Skript zum Kompilieren von PHP auf MacOS- und Linux-Plattformen. Stellen Sie sicher, dass Sie make autoconf automake libtool m4 wget getconf gzip bzip2 bison g++ git cmake pkg-config re2c ca-certificates
haben.
Empfehlungen
- Wenn Sie die kompilierte Binärdatei nur auf der Maschine verwenden, auf der Sie sie erstellen, entfernen Sie die Option
-t
, um die beste Leistung zu erzielen. Dadurch kann das Skript für die aktuelle Maschine und nicht für eine generische Maschine optimiert werden. -
ext-gd2
ist NICHT enthalten, es sei denn, das Flag -g
wird bereitgestellt, da PocketMine-MP es nicht benötigt. Wenn Ihre Plugins es jedoch benötigen, vergessen Sie nicht, es mit -g
zu aktivieren. - Mit den Optionen
-c
und -l
können Cache-Ordner angegeben werden, um die Neukompilierung zu beschleunigen, wenn Sie häufig neu kompilieren (z. B. um das Skript zu verbessern).
Häufige Fallstricke
- Vermeiden Sie die Verwendung des Skripts in Verzeichnisbäumen, die Leerzeichen enthalten. Einige Bibliotheken mögen es nicht, in Verzeichnisbäumen erstellt zu werden, die Leerzeichen enthalten, z. B. kann es
/home/user/my folder/pocketmine-mp/
zu Problemen kommen. - Vermeiden Sie Verzeichnisbäume, die spezielle (nicht englische) Symbole enthalten. Beispielsweise könnte
Développement
Probleme verursachen.
Zusätzliche Hinweise
Mac OSX (native Kompilierung)
- Die meisten Abhängigkeiten können mit Homebrew installiert werden
- Sie benötigen zusätzlich
glibtool
(GNU libtool, xcode libtool funktionieren nicht)
Android 64-Bit (Cross-Compile)
- Für die Android-Crosskompilierung werden nur aarch64-Ziele unterstützt.
- Die
aarch64-linux-musl
Toolchain ist erforderlich. Sie können es mit https://github.com/pmmp/musl-cross-make kompilieren und installieren (PMMP-Fork enthält musl-libc-Patches für den DNS-Resolver-Konfigurationspfad und eine zunehmende Stapelgrößenbeschränkung für LevelDB).
Skript-Flags | Beschreibung |
---|
-C | Verwendet den angegebenen Ordner zum Zwischenspeichern heruntergeladener Tarballs, Zipballs usw. |
-D | Kompiliert mit Debugging-Symbolen und deaktiviert Optimierungen (langsam, aber nützlich zum Debuggen von Segfaults) |
-D | Kompiliert mit separaten Debugging-Symbolen, lässt aber Optimierungen aktiviert (wird für verteilte Binärdateien verwendet) |
-G | Werde GD2 kompilieren |
-J | Threads erstellen auf # setzen |
-l | Verwendet den angegebenen Ordner zum Zwischenspeichern von Kompilierungsartefakten (nützlich für schnelle Neuerstellung und Tests). |
-N | Entfernen Sie keine Quellen, nachdem die Kompilierung abgeschlossen ist |
-S | Kompiliert alles statisch |
-T | Ziel festlegen |
-v | Aktivieren Sie die Valgrind-Unterstützung in PHP |
-X | Gibt an, dass wir eine Cross-Kompilierung durchführen |
-P | Kompiliert Erweiterungen für die angegebene Hauptversion von PocketMine-MP (kann 4 oder 5 sein) |
Beispiel:
Ziel | Argumente |
---|
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 |
Windows-Compile-vs.bat
Batch-Skript, das Visual Studio unter Windows verwendet, um PHP-Binärdateien aus Quellen zu kompilieren. Stellen Sie sicher, dass Visual Studio 2019, git
, 7z
und wget
in Ihrem PATH installiert sind.
Dieses Skript akzeptiert keine Parameter, aber die folgenden Umgebungsvariablen haben Einfluss:
Variable | Beschreibung |
---|
PHP_DEBUG_BUILD | Deaktiviert Optimierungen und erstellt PHP mit detaillierten Debugging-Informationen (nützlich zum Debuggen von Segfaults). |
SOURCES_PATH | Wohin mit den heruntergeladenen Quellen zur Kompilierung? |
VS_EDITION | Edition von Visual Studio installiert, standardmäßig auf Community eingestellt |
PM_VERSION_MAJOR | Hauptversion von PocketMine-MP zum Erstellen von Erweiterungen (Standard ist 4, kann 4 oder 5 sein) |
Für Entwickler: Versionsinformationsquellen
Bibliotheken
Name des Pakets | Versionsinformations-URL | Benötigt für | Notizen |
---|
zlib | https://github.com/madler/zlib/tags | Kompression | |
gmp | https://gmplib.org/ | Große Ganzzahlberechnung für die Bedrock-Paketverschlüsselung | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
Locken | https://github.com/curl/curl/releases | Webanfragen | |
Libyen | https://github.com/yaml/libyaml/releases | Parsen von YAML-Konfigurationsdateien | |
leveldb | https://github.com/pmmp/leveldb/commits/mojang-kompatible/ | Unterstützung von Bedrock World | Benutzerdefinierte Version basierend auf Google/Leveldb mit minimalen erforderlichen Änderungen zur Unterstützung von MCPE-Welten |
libxml | https://gitlab.gnome.org/GNOME/libxml2/-/releases | XML-Parsing-Unterstützung für UPnP | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
libpng | https://sourceforge.net/projects/libpng/files/libpng16/ | php-gd, nur für Plugin-Nutzung | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
libjpeg | https://ijg.org/ | php-gd, nur für Plugin-Nutzung | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
openSL | https://github.com/openssl/openssl/releases | Grundlegende Paketverschlüsselung, sichere Webanfragen | |
libzip | https://github.com/nih-at/libzip/releases | Ressourcenpakete | |
sqlite3 | https://sqlite.org/download.html | Nur Plugin-Nutzung | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
libdeflate | https://github.com/ebiggers/libdeflate/blob/master/NEWS.md | Schnellere Alternative zu zlib für die Netzwerknutzung | |
pthreads4w | https://sourceforge.net/projects/pthreads4w/files/ | Wird von ext-pmmpthread unter Windows benötigt | Wird bei DependencyMirror gehostet, um Dienstausfälle zu vermeiden |
PHP und Erweiterungen
Name des Pakets | Versionsinformations-URL | Benötigt für | Notizen |
---|
PHP | https://www.php.net/releases/?json&version=8.2 | Alles | Ersetzen Sie 8.2 durch die von Ihnen gewählte Version |
pmmpthread | https://github.com/pmmp/ext-pmmpthread/releases | PHP-Threading | |
Yaml | https://github.com/php/pecl-file_formats-yaml/tags | Parsen der YAML-Konfiguration | Ja, die Mischung aus - und _ ist beabsichtigt. Frag mich nicht. |
leveldb | https://github.com/pmmp/php-leveldb/commits/pmmp-mojang-kompatible/ | Unterstützung von Bedrock World | Benutzerdefinierte Version zur Bereitstellung von LEVELDB_ZLIB_RAW_COMPRESSION Unterstützung |
chunkutils2 | https://github.com/pmmp/ext-chunkutils2/releases | PalettedBlockArray und andere Low-Level-Sachen | |
xdebug | https://github.com/xdebug/xdebug/releases | Debuggen | Wird für die Produktion nicht benötigt |
igbinär | https://github.com/igbinary/igbinary/releases | Schnellere Serialisierung, hauptsächlich zum Verschieben von Inhalten zwischen Threads | Unwesentlich, könnte bei Bedarf weggelassen werden |
Krypto | https://github.com/bukka/php-crypto/tags | Grundlegende Paketverschlüsselung | |
Rekursionsschutz | https://github.com/pmmp/ext-recursionguard/releases | Debuggen | Wird für die Produktion nicht benötigt |
libdeflate | https://github.com/pmmp/ext-libdeflate/releases | Schnellere Netzwerkkomprimierung | Nicht unbedingt erforderlich, bietet jedoch einen erheblichen Leistungsvorteil gegenüber zlib |
Morton | https://github.com/pmmp/ext-morton | Packen von X/Z- und X/Y/Z-Koordinaten in Ints in einem Format, das für PHP-Array-Schlüssel geeignet ist | Wird für die Leistung benötigt |
xxhash | https://github.com/pmmp/ext-xxhash/releases | Derzeit nicht verwendet | Könnte in neueren PHP-Versionen durch hash() ersetzt werden, aber diese Erweiterung bietet eine viel bessere Leistung |
Arraydebug | https://github.com/pmmp/ext-arraydebug/tags | Debuggen von Array-Hash-Kollisionen | |
Codierung | https://github.com/pmmp/ext-encoding/releases | Derzeit nicht verwendet | Experimentell, sollte BinaryUtils ersetzen, wurde aber nie fertiggestellt |
Sonstiges
Name des Pakets | Versionsinformations-URL | Benötigt für | Notizen |
---|
php-sdk-binary-tools | https://github.com/php/php-sdk-binary-tools/releases | PHP unter Windows erstellen | |