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
Next revisionBoth sides next revision
internals:windows:stepbystepbuild_sdk_2 [2018/11/18 23:55] abinternals:windows:stepbystepbuild_sdk_2 [2021/08/06 15:23] – note about updating VS; see https://bugs.php.net/81337 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 **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. 
 + 
 +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 28: Line 35:
   * If compiling **PHP 7.2+**:   * If compiling **PHP 7.2+**:
     * Install Visual Studio 2017     * Install Visual Studio 2017
 +  * If compiling **master**:
 +    * Install Visual Studio 2019
  
   * Optional tools    * Optional tools 
Line 42: Line 51:
   * PHP_SDK_PHP_CMD - integrated PHP binary wrapper script   * PHP_SDK_PHP_CMD - integrated PHP binary wrapper script
   * PHP_SDK_ROOT_PATH - the path to the PHP SDK root directory   * PHP_SDK_ROOT_PATH - the path to the PHP SDK root directory
-  * PHP_SDK_VC - Visual C++ version used for the environment+  * PHP_SDK_VS - Visual C++ version used for the environment (before PHP SDK 2.2.0beta4, this variable was named PHP_SDK_VC)
   * several other less relevant vars are available, that can be viewed by the ''set'' command   * several other less relevant vars are available, that can be viewed by the ''set'' command
  
Line 77: Line 86:
   - Run the ''phpsdk_buildtree'' batch script which will create the desired directory structure: <code bash>phpsdk_buildtree phpdev</code>   - Run the ''phpsdk_buildtree'' batch script which will create the desired directory structure: <code bash>phpsdk_buildtree phpdev</code>
   - The ''phpsdk_buildtree'' script will create the path according to the currently VC++ version used and switch into the newly created directory   - The ''phpsdk_buildtree'' script will create the path according to the currently VC++ version used and switch into the newly created directory
-  - Extract the PHP source code to ''C:\php-sdk\phpdev\**vc##**\**x##**'', where: +  - Extract the PHP source code to ''C:\php-sdk\phpdev\**vX##**\**x##**'', where: 
-    * ''**vc##**'' is the compiler version you are using (eq ''vc14'')+    * ''**vX##**'' is the compiler version you are using (eq ''vc14'' or ''vs16'')
     * ''**x##**'' is your architecture (''x86'' or ''x64'')     * ''**x##**'' is your architecture (''x86'' or ''x64'')
     * For example: ''C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src''     * For example: ''C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src''
Line 96: Line 105:
   - To build PHP, run: <code bash>nmake</code>   - To build PHP, run: <code bash>nmake</code>
   - If you want the resulting PHP builds and extensions to be zipped, after 'nmake' also run: <code bash>nmake snap</code>   - If you want the resulting PHP builds and extensions to be zipped, after 'nmake' also run: <code bash>nmake snap</code>
-  - The compiled PHP is now under "C:\php-sdk\phpdev\vcXX\x##\php-source-directory\Release_TS" If you ran 'nmake snap' the zip file will also be here. +  - The compiled PHP is now under "C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release_TS" If you ran 'nmake snap' the zip file will also be here. 
-    * If you compiled with "--disable-zts" the compiled PHP will be under "C:\php-sdk\phpdev\vcXX\x##\php-source-directory\Release"+    * If you compiled with "--disable-zts" the compiled PHP will be under "C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release"
  
 ==== Recompile after you have done some changes ==== ==== Recompile after you have done some changes ====
Line 128: 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.
 +
 +==== 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 =====
  
   - 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.
 +  - 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