internals:windows:stepbystepbuild_sdk_2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
internals:windows:stepbystepbuild_sdk_2 [2019/06/06 11:15] – Clarify platform toolset support cmbinternals:windows:stepbystepbuild_sdk_2 [2021/11/08 14:56] – document Windows phpize builds cmb
Line 17: Line 17:
  
   * Visual C++ 14.0 (Visual Studio 2015) for **PHP 7.0** or **PHP 7.1**.   * Visual C++ 14.0 (Visual Studio 2015) for **PHP 7.0** or **PHP 7.1**.
-  * Visual C++ 15.0 (Visual Studio 2017) for **PHP 7.2** or **PHP 7.3**. +  * Visual C++ 15.0 (Visual Studio 2017) for **PHP 7.2****PHP 7.3** or **PHP 7.4**. 
-  * Visual C++ 16.0 (Visual Studio 2019) for **PHP 7.4**.+  * Visual C++ 16.0 (Visual Studio 2019) for **master**
 + 
 +Always keep your installed Visual C++ up to date. Otherwise build errors may occur due to dependencies built with newer versions.
  
 Support for a certain Visual Studio version means only support for its default platform toolset; building PHP with a non-default platform toolset (such as 14.16 with Visual Studio 2019) may work, but is not recommended. Support for a certain Visual Studio version means only support for its default platform toolset; building PHP with a non-default platform toolset (such as 14.16 with Visual Studio 2019) may work, but is not recommended.
  
-In filenames (and the ''PHP_SDK_VS'' environment variable; see below) the Visual Studio version is usually abbreviated. Before Visual Studio 2019, the abbreviation used the scheme "vc#" (for instance, "vc14"). This number ("#") has tradionally been the major number of the respective platform toolset. The preview releases of Visual Studio 2017 shipped with platform toolset 15.00, so "vc15" was used. The first GA release of Visual Studio 2017, however, shipped with platform toolset 14.10 (to signal the backward compatibility), but the internal Visual Studio version number stayed 15.00. To avoid confusion "vc15" has been kept. For the Visual Studio 2019 builds (PHP 7.4 and master), the "vc#" has finally been changed to "vs#" (note the "s"), where the number now designates the major internal Visual Studio version number.+In filenames (and the ''PHP_SDK_VS'' environment variable; see below) the Visual Studio version is usually abbreviated. Before Visual Studio 2019, the abbreviation used the scheme "vc#" (for instance, "vc14"). This number ("#") has tradionally been the major number of the respective platform toolset. The preview releases of Visual Studio 2017 shipped with platform toolset 15.00, so "vc15" was used. The first GA release of Visual Studio 2017, however, shipped with platform toolset 14.10 (to signal the backward compatibility), but the internal Visual Studio version number stayed 15.00. To avoid confusion "vc15" has been kept. For the Visual Studio 2019 builds (master), the "vc#" has finally been changed to "vs#" (note the "s"), where the number now designates the major internal Visual Studio version number.
  
 ==== Setup ==== ==== Setup ====
Line 33: Line 35:
   * If compiling **PHP 7.2+**:   * If compiling **PHP 7.2+**:
     * Install Visual Studio 2017     * Install Visual Studio 2017
-  * If compiling **PHP 7.4+**:+  * If compiling **master**:
     * Install Visual Studio 2019     * Install Visual Studio 2019
  
Line 135: Line 137:
  
 At this point, your compiled extension will be located in the release directory. At this point, your compiled extension will be located in the release directory.
 +
 +==== Building PECL extensions with phpize ====
 +
 +Alternatively to the "in-tree" build described above, you can do a "phpize" build, what is mostly useful if you don't need to build PHP from source, but rather use a pre-built PHP binary package.
 +
 +  - Download and unpack the development package which corresponds to your pre-built PHP version and variant from https://windows.php.net/
 +  - Download and unpack the source of the PECL extension
 +  - Invoke the starter script to automatically setup the environment for the desired build config, e.g. ''c:\php-sdk\phpsdk-vs16-x64.bat''
 +  - Add the development package folder and the PHP folder to the ''PATH''
 +  - Enter the source folder of the PECL extension
 +  - Run ''phpize''
 +  - Run ''configure --help'' to see the list of configuration options
 +    * the most important option is the one which enables the extension to be built (e.g. ''--enable-apcu'')
 +    * another important options is ''--with-prefix'' which expects the PHP folder to be passed
 +    * if the extension depends on C libraries, you need to download these and put them either in the ''--with-php-build'' folder, or use the ''--with-extra-includes'' and ''--with-extra-libs'' options; suitable pre-built libraries can be found on https://windows.php.net/downloads/php-sdk/deps/ and https://windows.php.net/downloads/pecl/deps/
 +    * there may be further interesting configuration options, e.g. those which allows to configure details of the extension to be built
 +  - Run ''configure'' with the desired options
 +  - Run ''nmake''
 +  - After successful compilation, the build artifacts are located in the release folder
 +  - If the extension has a PHPT test suite, run ''nmake test''
 +
 +If you want to build your extension via Github Actions, consider to use https://github.com/cmb69/setup-php-sdk.
 +
 +==== Release directories ====
 +
 +When you have successfully compiled PHP, the release directory can be one of multiple, depending on the build configuration:
 +
 +    - `Release`: Release NTS build
 +    - `Release_TS`: Release ZTS build
 +    - `Debug`: Debug NTS build
 +    - `Debug_TS`: Debug ZTS build
 +
 +If you are compiling using a 64-bit compiler, then these directories will be located in a directory called `x64`.
  
 ===== Pitfalls ===== ===== Pitfalls =====
Line 140: Line 175:
   - For possible PHP SDK issues, please consult the PHP SDK readme   - For possible PHP SDK issues, please consult the PHP SDK readme
   - As of PHP 7.3 the switch --enable-native-intrinsics is available. The resulting binary will then require a processor with the corresponding feature set available. For example, if you set --enable-native-intrinsics=avx2, be sure the target machine has processor with AVX2 support.   - As of PHP 7.3 the switch --enable-native-intrinsics is available. The resulting binary will then require a processor with the corresponding feature set available. For example, if you set --enable-native-intrinsics=avx2, be sure the target machine has processor with AVX2 support.
 +  - In some circumstances, you may hit the [[https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/fatal-error-c1047?view=msvc-160|linker error C1047]]; you may be able to work around that with ''set LDFLAGS=/d2:-AllowCompatibleILVersions'' and re-configuring the build.
  
  
internals/windows/stepbystepbuild_sdk_2.txt · Last modified: 2022/01/10 09:43 by cmb