100 lines
4.3 KiB
Plaintext
100 lines
4.3 KiB
Plaintext
src/tools/msvc/README
|
|
|
|
MSVC build
|
|
==========
|
|
|
|
This directory contains the tools required to build PostgreSQL using
|
|
Microsoft Visual Studio 2015 - 2022. This builds the whole backend, not just
|
|
the libpq frontend library. For more information, see the documentation
|
|
chapter "Installation on Windows" and the description below.
|
|
|
|
|
|
Notes about Visual Studio Express
|
|
---------------------------------
|
|
To build PostgreSQL using Visual Studio Express, the Microsoft Windows SDK
|
|
has to be installed. Since this is not included in the product
|
|
originally, extra steps are needed to make it work.
|
|
|
|
First, download and install a supported version of the Microsoft Windows SDK
|
|
from www.microsoft.com (v8.1a or greater).
|
|
|
|
Locate the files vcprojectengine.dll.express.config and
|
|
vcprojectengine.dll.config in the vc\vcpackages directory of
|
|
the Visual C++ Express installation. In these files, add the paths
|
|
to the Platform SDK to the Include, Library and Path tags. Be sure
|
|
to add them to the beginning of the list.
|
|
|
|
This should work for both GUI and commandline builds, but a restart
|
|
may be necessary.
|
|
|
|
If you are using a recent version of the Microsoft Windows SDK that includes
|
|
the compilers and build tools you probably don't even need Visual Studio
|
|
Express to build PostgreSQL.
|
|
|
|
|
|
Structure of the build tools
|
|
----------------------------
|
|
The tools for building PostgreSQL using Microsoft Visual Studio currently
|
|
consist of the following files:
|
|
|
|
- Configuration files -
|
|
config_default.pl default configuration arguments
|
|
|
|
A typical build environment has two more files, buildenv.pl and config.pl
|
|
that contain the user's build environment settings and configuration
|
|
arguments.
|
|
|
|
|
|
- User tools -
|
|
build.pl tool to build the binaries
|
|
clean.bat batch file for cleaning up generated files
|
|
install.pl tool to install the generated files
|
|
mkvcbuild.pl tool to generate the Visual Studio build files
|
|
vcregress.pl tool to run the regression tests
|
|
|
|
|
|
- Internal tools -
|
|
gendef.pl internal tool to generate .DEF files
|
|
pgbison.pl internal tool to process .y files using bison
|
|
pgflex.pl internal tool to process .l files using flex
|
|
|
|
Many of those .pl files also have a corresponding .bat-wrapper that doesn't
|
|
contain any additional logic.
|
|
|
|
|
|
- Internal modules -
|
|
Install.pm module containing the install logic
|
|
Mkvcbuild.pm module containing the code to generate the Visual
|
|
Studio build (project/solution) files
|
|
MSBuildProject.pm module containing the code to generate MSBuild based
|
|
project files (Visual Studio 2015 or greater)
|
|
Project.pm module containing the common code to generate the
|
|
Visual Studio project files. Also provides the
|
|
common interface of all project file generators
|
|
Solution.pm module containing the code to generate the Visual
|
|
Studio solution files.
|
|
VSObjectFactory.pm factory module providing the code to create the
|
|
appropriate project/solution files for the current
|
|
environment
|
|
|
|
|
|
Description of the internals of the Visual Studio build process
|
|
---------------------------------------------------------------
|
|
By typing 'build' the user starts the build.bat wrapper which simply passes
|
|
its arguments to build.pl.
|
|
In build.pl the user's buildenv.pl is used to set up the build environment
|
|
(i. e. path to bison and flex). In addition his config.pl file is merged into
|
|
config_default.pl to create the configuration arguments.
|
|
These configuration arguments are passed over to Mkvcbuild::mkvcbuild
|
|
(Mkvcbuild.pm) which creates the Visual Studio project and solution files.
|
|
It does this by using VSObjectFactory::CreateSolution to create an object
|
|
implementing the Solution interface (this could be either
|
|
VS2015Solution, VS2017Solution, VS2019Solution or VS2022Solution, all in
|
|
Solution.pm, depending on the user's build environment) and adding objects
|
|
implementing the corresponding Project interface (
|
|
VC2015Project, VC2017Project, VC2019Project or VC2022Project from
|
|
MSBuildProject.pm) to it. When Solution::Save is called, the implementations
|
|
of Solution and Project save their content in the appropriate format.
|
|
The final step of starting the appropriate build program (msbuild) is
|
|
performed in build.pl again.
|