# Building for Windows Building PLV8 for Windows has some specific requirements: * Git * MSVC 2013, 2015, or 2017 * CMake - available as part of MSVC * Postgres 9.5+ (it will work in 9.3 and 9.4, but will involve extra work) Additional requirements to build V8: * Python 2 * unzip.exe * patch.exe - part of the Git install ## Patching Postgres Currently, Postgres requires a patch of one or more `include` files in order to compile PLV8. First, find the directory that contains the `include` files. This will typically be inside something like `C:\Program Files\PostgreSQL\10\include`, where the `10` is your version number. Inside of the `include` directory: ``` PS> cd server\port\atomics PS> copy \plv8\windows\generic-msvc.h.patch . PS> patch < generic-msvc.h.patch ``` ## Bootstrapping Bootstrapping will the build environment, download, and compile `v8`. Watch for any errors: ``` PS> bootstrap.bat ``` ## Configuring Once `v8` has been built, you can configure your build environment. This involves specifying the path to your Postgres install, the version of Postgres you are running, as well as the build target. Build targets will typically be one of the following: * `Visual Studio 15 2017` - 32 bit, MSVC 2017 * `Visual Studio 15 2017 Win64` - 64 bit, MSVC 2017 * `Visual Studio 14 2015` - 32 bit, MSVC 2015 * `Visual Studio 14 2015 Win64` - 64 bit, MSVC 2015 * `Visual Studio 12 2013` - 32 bit, MSVC 2013 * `Visual Studio 12 2013 Win64` - 64 bit, MSVC 2013 ``` PS> cmake . -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX="C:\Program Files\PostgreSQL\10" -DPOSTGRESQL_VERSION=10 ``` ## Compiling After successfully configuring your build environment, compiling should be easy: ``` PS> cmake --build . --config Release --target Package ``` This will build and package the extension for installation. ## Installing To install, you simply need to `unzip` the file created. The name will depend on the version of PLV8 and the version of Postgres. An example is `plv8-3.0.0-postgresql-10-x64.zip`. ## TODO * Generate configuration files * Generate control files * Generate sql files