diff --git a/.github/workflows/main-pm-matrix.yml b/.github/workflows/main-pm-matrix.yml index ddc626b6..b8b8de56 100644 --- a/.github/workflows/main-pm-matrix.yml +++ b/.github/workflows/main-pm-matrix.yml @@ -24,90 +24,6 @@ env: MUSL_CROSS_MAKE_VERSION: 7b9487e56efc83c419a397af7df7f119001dc51c jobs: - android: - name: Android arm64 - runs-on: ubuntu-20.04 - - steps: - - uses: actions/checkout@v4 - - - name: Install tools and dependencies - run: | - sudo apt-get update - sudo apt-get install make autoconf automake libtool libtool-bin m4 wget libc-bin gzip bzip2 bison g++ git re2c - - - name: Prepare compile.sh download cache - id: download-cache - uses: actions/cache@v4 - with: - path: ./download_cache - key: compile-sh-cache-ssl-https-${{ hashFiles('./compile.sh') }} - restore-keys: compile-sh-cache-ssl-https- - - - name: Fetch compiler cache - id: compiler-cache - uses: actions/cache@v4 - with: - path: ${{ github.workspace }}/compiler - key: musl-cross-make-${{ env.MUSL_CROSS_MAKE_VERSION }} - restore-keys: musl-cross-make- - - - name: Checkout musl-cross-make - if: steps.compiler-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v4 - with: - repository: pmmp/musl-cross-make - path: musl-cross-make - ref: ${{ env.MUSL_CROSS_MAKE_VERSION }} - - - name: Build compiler - if: steps.compiler-cache.outputs.cache-hit != 'true' - working-directory: musl-cross-make - run: | - echo "TARGET = aarch64-linux-musl" > config.mak - make -j$(nproc) - make install - mv ./output "${{ github.workspace }}/compiler" - - - name: Compile PHP - run: | - export PATH="${{ github.workspace }}/compiler/bin:$PATH" - - # Used "set -ex" instead of hashbang since script isn't executed with hashbang - set -ex - trap "exit 1" ERR - ./compile.sh -t android-aarch64 -x -j 4 -g -P ${{ inputs.pm-version-major }} -c ./download_cache -D -z ${{ inputs.php-version-base }} - - - - name: Create tarball - run: | - tar -czf ./PHP-${{ inputs.php-version-base }}-Android-arm64-PM${{ inputs.pm-version-major }}.tar.gz bin - tar -czf ./Z-PHP-${{ inputs.php-version-base }}-Android-arm64-PM${{ inputs.pm-version-major }}-debugging-symbols.tar.gz bin-debug - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - if: always() - with: - name: PHP-${{ inputs.php-version-base }}-Android-PM${{ inputs.pm-version-major }} - path: | - ./*PHP-${{ inputs.php-version-base }}-Android-arm64-PM${{ inputs.pm-version-major }}*.tar.gz - install.log - compile.sh - if-no-files-found: error - - - name: Prepare workspace for upload - if: failure() - run: tar -czf workspace.tar.gz install_data - - - name: Upload workspace - uses: actions/upload-artifact@v4 - if: failure() - with: - name: PHP-${{ inputs.php-version-base }}-Android-workspace-PM${{ inputs.pm-version-major }} - path: | - workspace.tar.gz - if-no-files-found: error - linux: name: Linux runs-on: ubuntu-20.04 @@ -230,50 +146,9 @@ jobs: workspace.tar.gz if-no-files-found: error - windows: - name: Windows - runs-on: windows-2019 - - steps: - - uses: actions/checkout@v4 - - - name: Prepare download cache - id: download-cache - uses: actions/cache@v4 - with: - path: ./download_cache - key: windows-cache-${{ hashFiles('./windows-compile-vs.ps1') }} - restore-keys: windows-cache- - - - name: Compile PHP - run: .\windows-compile-vs.ps1 - env: - SOURCES_PATH: ${{ github.workspace }}\pocketmine-php-sdk - PM_VERSION_MAJOR: ${{ inputs.pm-version-major }} - PHP_VERSION_BASE: ${{ inputs.php-version-base }} - - - name: Prepare artifacts - run: | - mkdir temp - Compress-Archive -Path .\bin -DestinationPath "PHP-${{ inputs.php-version-base }}-Windows-x64-PM${{ inputs.pm-version-major }}.zip" - move php-debug-pack-*.zip temp/Z-PHP-${{ inputs.php-version-base }}-Windows-x64-PM${{ inputs.pm-version-major }}-debugging-symbols.zip - move temp\*.zip . - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - if: always() - with: - name: PHP-${{ inputs.php-version-base }}-Windows-PM${{ inputs.pm-version-major }} - path: | - *PHP-${{ inputs.php-version-base }}-Windows-x64-PM${{ inputs.pm-version-major }}*.zip - compile.log - windows-compile-vs.bat - if-no-files-found: error - - publish: name: Publish binaries - needs: [linux, macos, windows, android] + needs: [linux, macos] runs-on: ubuntu-20.04 if: ${{ github.ref_name == 'stable' && github.ref_type == 'branch' && !contains(github.event.head_commit.message, '[no release]') }} concurrency: release-${{ inputs.php-version-base }}-pm${{ inputs.pm-version-major }} @@ -303,7 +178,6 @@ jobs: echo "Build number: ${{ github.run_number }}" >> changelog.md echo -e "\n\n\n" >> changelog.md echo ":information_source: **Linux/MacOS users**: Please see [this page](https://doc.pmmp.io/en/rtfd/faq/installation/opcache.so.html) to fix extension loading errors. Also, check out the [PocketMine-MP Linux/MacOS installer](https://doc.pmmp.io/en/rtfd/installation/get-dot-pmmp-dot-io.html)." >> changelog.md - echo ":warning: **Windows users**: Don't forget to install [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) or the binary will not work!" >> changelog.md echo -e "\n\n\n" >> changelog.md if [[ "${{ inputs.special-release }}" != "none" ]]; then @@ -325,7 +199,6 @@ jobs: with: artifacts: | ${{ github.workspace }}/*PHP-*-PM*/*.tar.gz - ${{ github.workspace }}/*PHP-*-Windows-PM*/*.zip name: PM ${{ inputs.pm-version-major }}.x (${{ steps.date.outputs.DATE }}) - Recommended tag: pm${{ inputs.pm-version-major }}-latest commit: ${{ github.sha }} @@ -340,7 +213,6 @@ jobs: with: artifacts: | ${{ github.workspace }}/*PHP-*-PM*/*.tar.gz - ${{ github.workspace }}/*PHP-*-Windows-PM*/*.zip name: PM ${{ inputs.pm-version-major }}.x (${{ steps.date.outputs.DATE }}) - PHP ${{ inputs.php-version-base }} tag: pm${{ inputs.pm-version-major }}-php-${{ inputs.php-version-base }}-latest commit: ${{ github.sha }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 60fe9ddb..3330297e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,7 +49,6 @@ jobs: echo "Build number: ${{ github.run_number }}" >> changelog.md echo -e "\n\n\n" >> changelog.md echo ":information_source: **Linux/MacOS users**: Please see [this page](https://doc.pmmp.io/en/rtfd/faq/installation/opcache.so.html) to fix extension loading errors. Also, check out the [PocketMine-MP Linux/MacOS installer](https://doc.pmmp.io/en/rtfd/installation/get-dot-pmmp-dot-io.html)." >> changelog.md - echo ":warning: **Windows users**: Don't forget to install [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) or the binary will not work!" >> changelog.md echo -e "\n\n\n" >> changelog.md - name: Create release @@ -57,7 +56,6 @@ jobs: with: artifacts: | ${{ github.workspace }}/*PHP-*-PM*/*.tar.gz - ${{ github.workspace }}/*PHP-*-Windows-PM*/*.zip name: PHP (Build ${{ github.run_number }}) - Archive tag: php-build-${{ github.run_number }} commit: ${{ github.sha }} diff --git a/windows-compile-vs.ps1 b/windows-compile-vs.ps1 deleted file mode 100644 index 2288e0ee..00000000 --- a/windows-compile-vs.ps1 +++ /dev/null @@ -1,637 +0,0 @@ -$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.0" -$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" \ No newline at end of file