mirror of
https://github.com/pmmp/PHP-Binaries.git
synced 2025-02-28 19:21:11 +00:00
638 lines
22 KiB
PowerShell
638 lines
22 KiB
PowerShell
$ErrorActionPreference="Stop"
|
|
$ProgressPreference="SilentlyContinue"
|
|
|
|
$PHP_VERSIONS=@("8.2.25", "8.3.13")
|
|
|
|
$PHP_SDK_VER="2.3.0"
|
|
$ARCH="x64"
|
|
|
|
#### NOTE: Tags with "v" prefixes behave weirdly in the GitHub API. They'll be stripped in some places but not others.
|
|
#### Use commit hashes to avoid this.
|
|
|
|
$LIBYAML_VER="0.2.5"
|
|
$PTHREAD_W32_VER="3.0.0"
|
|
$LEVELDB_MCPE_VER="1c7564468b41610da4f498430e795ca4de0931ff" #release not tagged
|
|
$LIBDEFLATE_VER="78051988f96dc8d8916310d8b24021f01bd9e102" #1.23 - see above note about "v" prefixes
|
|
|
|
$PHP_PMMPTHREAD_VER="6.1.1"
|
|
$PHP_YAML_VER="2.2.4"
|
|
$PHP_CHUNKUTILS2_VER="0.3.5"
|
|
$PHP_IGBINARY_VER="3.2.16"
|
|
$PHP_LEVELDB_VER="317fdcd8415e1566fc2835ce2bdb8e19b890f9f3" #release not tagged
|
|
$PHP_CRYPTO_VER="abbe7cbf869f96e69f2ce897271a61d32f43c7c0" #release not tagged
|
|
$PHP_RECURSIONGUARD_VER="0.1.0"
|
|
$PHP_MORTON_VER="0.1.2"
|
|
$PHP_LIBDEFLATE_VER="0.2.1"
|
|
$PHP_XXHASH_VER="0.2.0"
|
|
$PHP_XDEBUG_VER="3.3.2"
|
|
$PHP_ARRAYDEBUG_VER="0.2.0"
|
|
$PHP_ENCODING_VER="0.4.0"
|
|
|
|
function pm-echo {
|
|
param ([string] $message)
|
|
|
|
echo "[PocketMine] $message"
|
|
echo "[PocketMine] $message" >> "$log_file"
|
|
}
|
|
|
|
function pm-echo-error {
|
|
param ([string] $message)
|
|
|
|
pm-echo "[ERROR] $message"
|
|
}
|
|
|
|
function pm-fatal-error {
|
|
param ([string] $message)
|
|
|
|
pm-echo-error $message
|
|
exit 1
|
|
}
|
|
|
|
$library = ""
|
|
$library_version = ""
|
|
function write-library {
|
|
param ([string] $library, [string] $version)
|
|
|
|
Write-Host -NoNewline "[$library $version]"
|
|
$script:library = $library
|
|
$script:library_version = $version
|
|
}
|
|
function write-status {
|
|
param ([string] $status)
|
|
|
|
Write-Host -NoNewline " $status..."
|
|
echo "[$library $library_version] $status..." >> $log_file
|
|
}
|
|
function write-download {
|
|
write-status "downloading"
|
|
}
|
|
function write-extracting {
|
|
write-status "extracting"
|
|
}
|
|
function write-configure {
|
|
write-status "configuring"
|
|
}
|
|
function write-compile {
|
|
write-status "compiling"
|
|
}
|
|
function write-install {
|
|
write-status "installing"
|
|
}
|
|
function write-done {
|
|
echo " done!"
|
|
$script:library = ""
|
|
$script:library_version = ""
|
|
}
|
|
|
|
$log_file="$pwd\compile.log"
|
|
echo "" > "$log_file"
|
|
$outpath="$pwd"
|
|
|
|
pm-echo "PHP compiler for Windows"
|
|
date >> "$log_file"
|
|
|
|
pm-echo "Checking dependencies"
|
|
|
|
$script_dependencies = @("git", "cmake")
|
|
foreach ($dep in $script_dependencies) {
|
|
$depInfo = Get-Command "$dep" -ErrorAction SilentlyContinue
|
|
if ($depInfo -eq $null) {
|
|
pm-fatal-error "$dep is required but can't be found in your PATH"
|
|
} else {
|
|
pm-echo "Found $dep in $($depInfo.Source)"
|
|
}
|
|
}
|
|
|
|
|
|
|
|
pm-echo "Checking configuration options"
|
|
|
|
$PHP_VERSION_BASE="auto"
|
|
$PHP_VER=""
|
|
if ($env:PHP_VERSION_BASE -ne $null) {
|
|
$PHP_VERSION_BASE=$env:PHP_VERSION_BASE
|
|
}
|
|
|
|
$PHP_DEBUG_BUILD=0
|
|
if ($env:PHP_DEBUG_BUILD -eq 1) {
|
|
$PHP_DEBUG_BUILD=1
|
|
}
|
|
|
|
$MSBUILD_CONFIGURATION="RelWithDebInfo"
|
|
$PHP_JIT_ENABLE_ARG="no"
|
|
|
|
if ($PHP_DEBUG_BUILD -eq 0) {
|
|
$OUT_PATH_REL="Release"
|
|
$PHP_HAVE_DEBUG="enable-debug-pack"
|
|
pm-echo "Building release binaries with debugging symbols"
|
|
} else {
|
|
$OUT_PATH_REL="Debug"
|
|
$PHP_HAVE_DEBUG="enable-debug"
|
|
|
|
#I don't like this, but YAML will crash if it's not built with the same target as PHP
|
|
$MSBUILD_CONFIGURATION="Debug"
|
|
pm-echo "Building debug binaries"
|
|
}
|
|
|
|
if ($env:PHP_JIT_SUPPORT -eq 1) {
|
|
$PHP_JIT_ENABLE_ARG="yes"
|
|
pm-echo "Compiling JIT support in OPcache (unstable)"
|
|
}
|
|
|
|
function php-version-id {
|
|
param ([string] $version)
|
|
|
|
$parts = $version.Split(".")
|
|
|
|
#TODO: patch is a pain because of suffixes and we don't really need it anyway
|
|
$result = (([int]$parts[0]) * 10000) + (([int]$parts[1]) * 100)
|
|
return $result
|
|
}
|
|
|
|
$PREFERRED_PHP_VERSION_BASE=""
|
|
switch ($env:PM_VERSION_MAJOR) {
|
|
5 { $PREFERRED_PHP_VERSION_BASE="8.2" }
|
|
$null { pm-fatal-error "Please specify PocketMine-MP major version by setting the PM_VERSION_MAJOR environment variable" }
|
|
default { pm-fatal-error "PocketMine-MP $PM_VERSION_MAJOR is not supported by this version of the build script" }
|
|
}
|
|
|
|
$PM_VERSION_MAJOR=$env:PM_VERSION_MAJOR
|
|
pm-echo "Compiling with configuration for PocketMine-MP $PM_VERSION_MAJOR"
|
|
|
|
if ($PHP_VERSION_BASE -eq "auto") {
|
|
$PHP_VERSION_BASE=$PREFERRED_PHP_VERSION_BASE
|
|
} elseif ($PHP_VERSION_BASE -ne $PREFERRED_PHP_VERSION_BASE) {
|
|
pm-echo "[WARNING] $PHP_VERSION_BASE is not the default for PocketMine-MP $PM_VERSION_MAJOR"
|
|
pm-echo "[WARNING] The build may fail, or you may not be able to use the resulting PHP binary"
|
|
}
|
|
|
|
foreach ($version in $PHP_VERSIONS) {
|
|
if ($version -like "$PHP_VERSION_BASE.*") {
|
|
$PHP_VER=$version
|
|
break
|
|
}
|
|
}
|
|
if ($PHP_VER -eq "") {
|
|
pm-echo-error "Unsupported PHP base version $PHP_VERSION_BASE"
|
|
pm-echo-error "Example inputs: 8.2, 8.3"
|
|
exit 1
|
|
}
|
|
|
|
#don't really need these except for dev versions
|
|
$PHP_GIT_REV="php-$PHP_VER"
|
|
$PHP_DISPLAY_VER="$PHP_VER"
|
|
|
|
#TODO: these should be selected by PHP base version
|
|
$VC_VER=""
|
|
$CMAKE_TARGET=""
|
|
|
|
$PHP_VERSION_ID = php-version-id $PHP_VER
|
|
if ($PHP_VERSION_ID -ge 80400) {
|
|
$VC_VER="vs17"
|
|
$CMAKE_TARGET="Visual Studio 17 2022"
|
|
} else {
|
|
$VC_VER="vs16"
|
|
$CMAKE_TARGET="Visual Studio 16 2019"
|
|
}
|
|
|
|
pm-echo "Selected PHP $PHP_VER ($PHP_VERSION_ID) and toolset $VC_VER ($CMAKE_TARGET)"
|
|
|
|
if ($env:SOURCES_PATH -ne $null) {
|
|
$SOURCES_PATH=$env:SOURCES_PATH
|
|
} else {
|
|
$SOURCES_PATH="C:\pocketmine-php-$PHP_DISPLAY_VER-$($OUT_PATH_REL.ToLower())"
|
|
}
|
|
pm-echo "Using path $SOURCES_PATH for build sources"
|
|
|
|
if (Test-Path "$pwd\bin") {
|
|
pm-echo "Deleting old binary folder..."
|
|
Remove-Item -Recurse -Force "$pwd\bin" 2>&1
|
|
}
|
|
if (Test-Path $SOURCES_PATH) {
|
|
pm-echo "Deleting old workspace $SOURCES_PATH..."
|
|
Remove-Item -Recurse -Force $SOURCES_PATH 2>&1
|
|
}
|
|
|
|
$download_cache="$pwd\download_cache"
|
|
function download-file {
|
|
param ([string] $url, [string] $prefix)
|
|
|
|
$cached_filename="$prefix-$($url.Substring($url.LastIndexOf("/") + 1))"
|
|
$cached_path="$download_cache\$cached_filename"
|
|
|
|
if (!(Test-Path $download_cache)) {
|
|
mkdir $download_cache >> $log_file 2>&1
|
|
}
|
|
|
|
if (Test-Path $cached_path) {
|
|
echo "Cache hit for URL: $url" >> $log_file
|
|
} else {
|
|
echo "Downloading file from $url to $cached_path" >> $log_file
|
|
#download to a tmpfile first, so that we don't leave borked cache entries for later runs
|
|
Invoke-WebRequest -Uri $url -OutFile "$download_cache/.temp" >> $log_file 2>&1
|
|
Move-Item "$download_cache/.temp" $cached_path >> $log_file 2>&1
|
|
}
|
|
if (!(Test-Path $cached_path)) {
|
|
pm-fatal-error "Failed to download file from $url"
|
|
}
|
|
|
|
return $cached_path
|
|
}
|
|
|
|
function unzip-file {
|
|
param ([string] $file, [string] $destination)
|
|
|
|
#expand-archive doesn't respect script-local ProgressPreference
|
|
#https://github.com/PowerShell/Microsoft.PowerShell.Archive/issues/77
|
|
$oldProgressPref = $global:ProgressPreference
|
|
$global:ProgressPreference = "SilentlyContinue"
|
|
Expand-Archive -Path $file -DestinationPath $destination >> $log_file 2>&1
|
|
$global:ProgressPreference = $oldProgressPref
|
|
}
|
|
|
|
|
|
function append-file-utf8 {
|
|
param ([string] $line, [string] $file)
|
|
|
|
Out-File -Append -FilePath $file -Encoding utf8 -InputObject $line
|
|
}
|
|
|
|
function download-sdk {
|
|
write-library "PHP SDK" $PHP_SDK_VER
|
|
|
|
write-download
|
|
$file = download-file "https://github.com/php/php-sdk-binary-tools/archive/refs/tags/php-sdk-$PHP_SDK_VER.zip" "php-sdk"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item "php-sdk-binary-tools-php-sdk-$PHP_SDK_VER" $SOURCES_PATH
|
|
write-done
|
|
}
|
|
|
|
function sdk-command {
|
|
param ([string] $command, [string] $errorMessage = "")
|
|
|
|
New-Item task.bat -Value $command >> $log_file 2>&1
|
|
echo "Running SDK command: $command" >> $log_file
|
|
$wrap = "`"$SOURCES_PATH\phpsdk-$VC_VER-$ARCH.bat`" -t task.bat 2>&1"
|
|
echo "SDK wrapper command: $wrap" >> $log_file
|
|
(& cmd.exe /c $wrap) >> $log_file
|
|
$result=$LASTEXITCODE
|
|
if ($result -ne 0) {
|
|
if ($errorMessage -eq "") {
|
|
pm-fatal-error "Error code $result running SDK build command"
|
|
} else {
|
|
pm-fatal-error $errorMessage
|
|
}
|
|
}
|
|
Remove-Item task.bat
|
|
}
|
|
|
|
function download-php-deps {
|
|
write-library "PHP prebuilt deps" "$PHP_VERSION_BASE/$VC_VER"
|
|
write-download
|
|
sdk-command "phpsdk_deps -u -t $VC_VER -b $PHP_VERSION_BASE -a $ARCH -f -d $DEPS_DIR || exit 1"
|
|
write-done
|
|
}
|
|
|
|
function build-yaml {
|
|
write-library "yaml" $LIBYAML_VER
|
|
write-download
|
|
$file = download-file "https://github.com/yaml/libyaml/archive/$LIBYAML_VER.zip" "yaml"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item "libyaml-$LIBYAML_VER" libyaml >> $log_file 2>&1
|
|
Push-Location libyaml
|
|
|
|
write-configure
|
|
sdk-command "cmake -G `"$CMAKE_TARGET`"^`
|
|
-DCMAKE_PREFIX_PATH=`"$DEPS_DIR`"^`
|
|
-DCMAKE_INSTALL_PREFIX=`"$DEPS_DIR`"^`
|
|
-DBUILD_SHARED_LIBS=ON^`
|
|
`"$pwd`" || exit 1"
|
|
write-compile
|
|
sdk-command "msbuild ALL_BUILD.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
write-install
|
|
sdk-command "msbuild INSTALL.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
Copy-Item "$MSBUILD_CONFIGURATION\yaml.pdb" "$DEPS_DIR\bin" >> $log_file 2>&1
|
|
write-done
|
|
Pop-Location
|
|
}
|
|
|
|
function build-pthreads4w {
|
|
write-library "pthreads4w" $PTHREAD_W32_VER
|
|
write-download
|
|
$file = download-file "https://github.com/pmmp/DependencyMirror/releases/download/mirror/pthreads4w-code-v$PTHREAD_W32_VER.zip" "pthreads4w"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item "pthreads4w-code-*" pthreads4w >> $log_file 2>&1
|
|
Push-Location pthreads4w
|
|
|
|
write-compile
|
|
sdk-command "nmake VC || exit 1"
|
|
|
|
write-install
|
|
Copy-Item "pthread.h" "$DEPS_DIR\include" >> $log_file 2>&1
|
|
Copy-Item "sched.h" "$DEPS_DIR\include" >> $log_file 2>&1
|
|
Copy-Item "semaphore.h" "$DEPS_DIR\include" >> $log_file 2>&1
|
|
Copy-Item "_ptw32.h" "$DEPS_DIR\include" >> $log_file 2>&1
|
|
Copy-Item "pthreadVC3.lib" "$DEPS_DIR\lib" >> $log_file 2>&1
|
|
Copy-Item "pthreadVC3.dll" "$DEPS_DIR\bin" >> $log_file 2>&1
|
|
Copy-Item "pthreadVC3.pdb" "$DEPS_DIR\bin" >> $log_file 2>&1
|
|
write-done
|
|
Pop-Location
|
|
}
|
|
|
|
function build-leveldb {
|
|
write-library "leveldb" $LEVELDB_MCPE_VER
|
|
write-download
|
|
$file = download-file "https://github.com/pmmp/leveldb/archive/$LEVELDB_MCPE_VER.zip" "leveldb"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item leveldb-* leveldb >> $log_file 2>&1
|
|
Push-Location leveldb
|
|
|
|
write-configure
|
|
sdk-command "cmake -G `"$CMAKE_TARGET`"^`
|
|
-DCMAKE_PREFIX_PATH=`"$DEPS_DIR`"^`
|
|
-DCMAKE_INSTALL_PREFIX=`"$DEPS_DIR`"^`
|
|
-DBUILD_SHARED_LIBS=ON^`
|
|
-DLEVELDB_BUILD_BENCHMARKS=OFF^`
|
|
-DLEVELDB_BUILD_TESTS=OFF^`
|
|
-DZLIB_LIBRARY=`"$DEPS_DIR\lib\zlib_a.lib`"^`
|
|
`"$pwd`" || exit 1"
|
|
|
|
write-compile
|
|
sdk-command "msbuild ALL_BUILD.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
write-install
|
|
sdk-command "msbuild INSTALL.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
Copy-Item "$MSBUILD_CONFIGURATION\leveldb.pdb" "$DEPS_DIR\bin" >> $log_file 2>&1
|
|
write-done
|
|
Pop-Location
|
|
}
|
|
|
|
function build-libdeflate {
|
|
write-library "libdeflate" $LIBDEFLATE_VER
|
|
write-download
|
|
$file = download-file "https://github.com/ebiggers/libdeflate/archive/$LIBDEFLATE_VER.zip" "libdeflate"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item libdeflate-* libdeflate >> $log_file 2>&1
|
|
Push-Location libdeflate
|
|
|
|
write-configure
|
|
#TODO: not sure why we have arch here but not on other cmake targets
|
|
sdk-command "cmake -G `"$CMAKE_TARGET`" -A `"$ARCH`"^`
|
|
-DCMAKE_PREFIX_PATH=`"$DEPS_DIR`"^`
|
|
-DCMAKE_INSTALL_PREFIX=`"$DEPS_DIR`"^`
|
|
-DLIBDEFLATE_BUILD_GZIP=OFF^`
|
|
-DLIBDEFLATE_BUILD_SHARED_LIB=ON^`
|
|
-DLIBDEFLATE_BUILD_STATIC_LIB=OFF^`
|
|
`"$pwd`" || exit 1"
|
|
write-compile
|
|
sdk-command "msbuild ALL_BUILD.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
write-install
|
|
sdk-command "msbuild INSTALL.vcxproj /p:Configuration=$MSBUILD_CONFIGURATION /m || exit 1"
|
|
Copy-Item "$MSBUILD_CONFIGURATION\deflate.pdb" "$DEPS_DIR\bin" >> $log_file 2>&1
|
|
write-done
|
|
Pop-Location
|
|
}
|
|
|
|
function download-php {
|
|
write-library "PHP" $PHP_VER
|
|
write-download
|
|
|
|
$file = download-file "https://github.com/php/php-src/archive/$PHP_GIT_REV.zip" "php"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
Move-Item "php-src-$PHP_GIT_REV" php-src >> $log_file 2>&1
|
|
write-done
|
|
}
|
|
|
|
function get-extension-zip {
|
|
param ([string] $name, [string] $version, [string] $url, [string] $extractedName)
|
|
|
|
write-library "php-ext $name" $version
|
|
write-download
|
|
$file = download-file $url "php-ext-$name"
|
|
write-extracting
|
|
unzip-file $file $pwd
|
|
write-done
|
|
}
|
|
|
|
function get-github-extension {
|
|
param ([string] $name, [string] $version, [string] $user, [string] $repo, [string] $versionPrefix)
|
|
get-extension-zip $name $version "https://github.com/$user/$repo/archive/$versionPrefix$version.zip" "$repo-$version"
|
|
}
|
|
|
|
function download-php-extensions {
|
|
Push-Location "$SOURCES_PATH\php-src\ext" >> $log_file 2>&1
|
|
get-github-extension "pmmpthread" $PHP_PMMPTHREAD_VER "pmmp" "ext-pmmpthread"
|
|
get-github-extension "yaml" $PHP_YAML_VER "php" "pecl-file_formats-yaml"
|
|
get-github-extension "chunkutils2" $PHP_CHUNKUTILS2_VER "pmmp" "ext-chunkutils2"
|
|
get-github-extension "igbinary" $PHP_IGBINARY_VER "igbinary" "igbinary"
|
|
get-github-extension "leveldb" $PHP_LEVELDB_VER "pmmp" "php-leveldb"
|
|
get-github-extension "recursionguard" $PHP_RECURSIONGUARD_VER "pmmp" "ext-recursionguard"
|
|
get-github-extension "morton" $PHP_MORTON_VER "pmmp" "ext-morton"
|
|
get-github-extension "libdeflate" $PHP_LIBDEFLATE_VER "pmmp" "ext-libdeflate"
|
|
get-github-extension "xxhash" $PHP_XXHASH_VER "pmmp" "ext-xxhash"
|
|
get-github-extension "xdebug" $PHP_XDEBUG_VER "xdebug" "xdebug"
|
|
get-github-extension "arraydebug" $PHP_ARRAYDEBUG_VER "pmmp" "ext-arraydebug"
|
|
get-github-extension "encoding" $PHP_ENCODING_VER "pmmp" "ext-encoding"
|
|
|
|
write-library "php-ext crypto" $PHP_CRYPTO_VER
|
|
write-download
|
|
(& cmd.exe /c "git clone https://github.com/bukka/php-crypto.git crypto 2>&1") >> $log_file
|
|
Push-Location crypto
|
|
write-status "preparing"
|
|
(& cmd.exe /c "git checkout $PHP_CRYPTO_VER 2>&1") >> $log_file
|
|
(& cmd.exe /c "git submodule update --init --recursive 2>&1") >> $log_file
|
|
write-done
|
|
Pop-Location
|
|
|
|
Pop-Location
|
|
}
|
|
|
|
download-sdk
|
|
cd $SOURCES_PATH >> $log_file 2>&1
|
|
|
|
pm-echo "Checking that SDK can find Visual Studio"
|
|
#using CMAKE_TARGET for this is a bit meh but it's human readable at least
|
|
sdk-command "exit /b 0" "Please install $CMAKE_TARGET"
|
|
|
|
$DEPS_DIR="$SOURCES_PATH\deps"
|
|
#custom libs depend on some standard libs, so prepare these first
|
|
#a bit annoying because this part of the build is slow and makes it take longer to find problems
|
|
download-php-deps
|
|
|
|
$LIB_BUILD_DIR="$SOURCES_PATH\deps_build"
|
|
|
|
mkdir $LIB_BUILD_DIR >> $log_file 2>&1
|
|
|
|
cd $LIB_BUILD_DIR >> $log_file 2>&1
|
|
|
|
build-pthreads4w
|
|
build-yaml
|
|
#these two both need zlib from the standard deps
|
|
build-leveldb
|
|
build-libdeflate
|
|
|
|
cd $SOURCES_PATH >> $log_file 2>&1
|
|
|
|
download-php
|
|
download-php-extensions
|
|
|
|
cd "$SOURCES_PATH\php-src"
|
|
write-library "PHP" $PHP_VER
|
|
write-configure
|
|
|
|
sdk-command "buildconf.bat"
|
|
sdk-command "configure^`
|
|
--with-mp=auto^`
|
|
--with-prefix=pocketmine-php-bin^`
|
|
--$PHP_HAVE_DEBUG^`
|
|
--disable-all^`
|
|
--disable-cgi^`
|
|
--enable-cli^`
|
|
--enable-zts^`
|
|
--enable-pdo^`
|
|
--enable-arraydebug=shared^`
|
|
--enable-bcmath^`
|
|
--enable-calendar^`
|
|
--enable-chunkutils2=shared^`
|
|
--enable-com-dotnet^`
|
|
--enable-ctype^`
|
|
--enable-encoding=shared^`
|
|
--enable-fileinfo=shared^`
|
|
--enable-filter^`
|
|
--enable-hash^`
|
|
--enable-igbinary=shared^`
|
|
--enable-json^`
|
|
--enable-mbstring^`
|
|
--enable-morton^`
|
|
--enable-opcache^`
|
|
--enable-opcache-jit=$PHP_JIT_ENABLE_ARG^`
|
|
--enable-phar^`
|
|
--enable-recursionguard=shared^`
|
|
--enable-sockets^`
|
|
--enable-tokenizer^`
|
|
--enable-xmlreader^`
|
|
--enable-xmlwriter^`
|
|
--enable-xxhash^`
|
|
--enable-zip^`
|
|
--enable-zlib^`
|
|
--with-bz2=shared^`
|
|
--with-crypto=shared^`
|
|
--with-curl^`
|
|
--with-dom^`
|
|
--with-gd=shared^`
|
|
--with-gmp^`
|
|
--with-iconv^`
|
|
--with-leveldb=shared^`
|
|
--with-libdeflate=shared^`
|
|
--with-libxml^`
|
|
--with-mysqli=shared^`
|
|
--with-mysqlnd^`
|
|
--with-openssl^`
|
|
--with-pcre-jit^`
|
|
--with-pmmpthread=shared^`
|
|
--with-pmmpthread-sockets^`
|
|
--with-simplexml^`
|
|
--with-sodium^`
|
|
--with-sqlite3=shared^`
|
|
--with-xdebug=shared^`
|
|
--with-xdebug-compression^`
|
|
--with-xml^`
|
|
--with-yaml^`
|
|
--with-pdo-mysql^`
|
|
--with-pdo-sqlite^`
|
|
--without-readline"
|
|
|
|
write-compile
|
|
sdk-command "nmake"
|
|
|
|
write-install
|
|
sdk-command "nmake snap"
|
|
|
|
#remove ICU DLLs copied unnecessarily by nmake snap - this needs to be removed if we ever have ext/intl as a dependency
|
|
Remove-Item "$SOURCES_PATH\php-src\$ARCH\Release_TS\php-$PHP_DISPLAY_VER\icu*.dll" >> $log_file 2>&1
|
|
#remove enchant dependencies which are unnecessarily copied - this needs to be removed if we ever have ext/enchant as a dependency
|
|
Remove-Item "$SOURCES_PATH\php-src\$ARCH\Release_TS\php-$PHP_DISPLAY_VER\glib-*.dll" >> $log_file 2>&1
|
|
Remove-Item "$SOURCES_PATH\php-src\$ARCH\Release_TS\php-$PHP_DISPLAY_VER\gmodule-*.dll" >> $log_file 2>&1
|
|
Remove-Item -Recurse "$SOURCES_PATH\php-src\$ARCH\Release_TS\php-$PHP_DISPLAY_VER\lib\enchant\" >> $log_file 2>&1
|
|
|
|
cd $outpath >> $log_file 2>&1
|
|
Move-Item -Force "$SOURCES_PATH\php-src\$ARCH\$($OUT_PATH_REL)_TS\php-debug-pack-*.zip" $outpath
|
|
Remove-Item -Recurse bin -ErrorAction Continue >> $log_file 2>&1
|
|
mkdir bin >> $log_file 2>&1
|
|
Move-Item "$SOURCES_PATH\php-src\$ARCH\$($OUT_PATH_REL)_TS\php-$PHP_DISPLAY_VER" bin\php
|
|
|
|
$php_exe = "$outpath\bin\php\php.exe"
|
|
|
|
if (!(Test-Path $php_exe)) {
|
|
pm-fatal-error "Something has gone wrong. php.exe not found"
|
|
}
|
|
write-status "generating php.ini"
|
|
|
|
$php_ini="$outpath\bin\php\php.ini"
|
|
|
|
#all this work to make PS output utf-8/ascii instead of utf-16 :(
|
|
Out-File -FilePath $php_ini -Encoding ascii -InputObject ";Custom PocketMine-MP php.ini file"
|
|
append-file-utf8 "memory_limit=1024M" $php_ini
|
|
append-file-utf8 "display_errors=1" $php_ini
|
|
append-file-utf8 "display_startup_errors=1" $php_ini
|
|
append-file-utf8 "error_reporting=-1" $php_ini
|
|
append-file-utf8 "zend.assertions=-1" $php_ini
|
|
append-file-utf8 "extension_dir=ext" $php_ini
|
|
append-file-utf8 "extension=php_pmmpthread.dll" $php_ini
|
|
append-file-utf8 "extension=php_openssl.dll" $php_ini
|
|
append-file-utf8 "extension=php_chunkutils2.dll" $php_ini
|
|
append-file-utf8 "extension=php_igbinary.dll" $php_ini
|
|
append-file-utf8 "extension=php_leveldb.dll" $php_ini
|
|
append-file-utf8 "extension=php_crypto.dll" $php_ini
|
|
append-file-utf8 "extension=php_libdeflate.dll" $php_ini
|
|
append-file-utf8 "igbinary.compact_strings=0" $php_ini
|
|
append-file-utf8 "zend_extension=php_opcache.dll" $php_ini
|
|
append-file-utf8 "opcache.enable=1" $php_ini
|
|
append-file-utf8 "opcache.enable_cli=1" $php_ini
|
|
append-file-utf8 "opcache.save_comments=1" $php_ini
|
|
append-file-utf8 "opcache.validate_timestamps=1" $php_ini
|
|
append-file-utf8 "opcache.revalidate_freq=0" $php_ini
|
|
append-file-utf8 "opcache.file_update_protection=0" $php_ini
|
|
append-file-utf8 "opcache.optimization_level=0x7FFEBFFF" $php_ini
|
|
append-file-utf8 "opcache.cache_id=PHP_BINARY ;prevent sharing SHM between different binaries - they won't work because of ASLR" $php_ini
|
|
append-file-utf8 ";Optional extensions, supplied for plugin use" $php_ini
|
|
append-file-utf8 "extension=php_fileinfo.dll" $php_ini
|
|
append-file-utf8 "extension=php_gd.dll" $php_ini
|
|
append-file-utf8 "extension=php_mysqli.dll" $php_ini
|
|
append-file-utf8 "extension=php_sqlite3.dll" $php_ini
|
|
append-file-utf8 ";Optional extensions, supplied for debugging" $php_ini
|
|
append-file-utf8 "extension=php_recursionguard.dll" $php_ini
|
|
append-file-utf8 "recursionguard.enabled=0 ;disabled due to minor performance impact, only enable this if you need it for debugging" $php_ini
|
|
append-file-utf8 ";extension=php_arraydebug.dll" $php_ini
|
|
append-file-utf8 "" $php_ini
|
|
if ($PHP_JIT_ENABLE_ARG -eq "yes") {
|
|
append-file-utf8 "; ---- ! WARNING ! ----" $php_ini
|
|
append-file-utf8 "; JIT can provide big performance improvements, but as of PHP $PHP_VER it is still unstable. For this reason, it is disabled by default." $php_ini
|
|
append-file-utf8 "; Enable it at your own risk. See https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit for possible options." $php_ini
|
|
append-file-utf8 "opcache.jit=off" $php_ini
|
|
append-file-utf8 "opcache.jit_buffer_size=128M" $php_ini
|
|
append-file-utf8 "" $php_ini
|
|
}
|
|
append-file-utf8 ";WARNING: When loaded, xdebug 3.2.0 will cause segfaults whenever an uncaught error is thrown, even if xdebug.mode=off. Load it at your own risk." $php_ini
|
|
append-file-utf8 ";zend_extension=php_xdebug.dll" $php_ini
|
|
append-file-utf8 ";https://xdebug.org/docs/all_settings#mode" $php_ini
|
|
append-file-utf8 "xdebug.mode=off" $php_ini
|
|
append-file-utf8 "xdebug.start_with_request=yes" $php_ini
|
|
append-file-utf8 ";The following overrides allow profiler, gc stats and traces to work correctly in ZTS" $php_ini
|
|
append-file-utf8 "xdebug.profiler_output_name=cachegrind.%s.%p.%r" $php_ini
|
|
append-file-utf8 "xdebug.gc_stats_output_name=gcstats.%s.%p.%r" $php_ini
|
|
append-file-utf8 "xdebug.trace_output_name=trace.%s.%p.%r" $php_ini
|
|
append-file-utf8 ";Optional experimental extensions" $php_ini
|
|
append-file-utf8 "extension=php_encoding.dll" $php_ini
|
|
write-done
|
|
pm-echo "Xdebug is included, but disabled by default. To enable it, change 'xdebug.mode' in your php.ini file."
|
|
|
|
pm-echo "NOTE: You may need to install VC++ Redistributable for the binaries to work. Download it here: https://aka.ms/vs/16/release/vc_redist.x64.exe"
|
|
pm-echo "PHP binary files installed in $outpath\bin"
|
|
pm-echo "If the binary doesn't work, please report an issue at https://github.com/pmmp/PHP-Binaries and attach the `"compile.log`" file"
|