summaryrefslogtreecommitdiffstats
path: root/src/tools/msvc/README
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/msvc/README')
-rw-r--r--src/tools/msvc/README99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/tools/msvc/README b/src/tools/msvc/README
new file mode 100644
index 0000000..473d6f4
--- /dev/null
+++ b/src/tools/msvc/README
@@ -0,0 +1,99 @@
+src/tools/msvc/README
+
+MSVC build
+==========
+
+This directory contains the tools required to build PostgreSQL using
+Microsoft Visual Studio 2013 - 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 2013 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 VS2013Solution,
+VS2015Solution, VS2017Solution, VS2019Solution or VS2022Solution, all in
+Solution.pm, depending on the user's build environment) and adding objects
+implementing the corresponding Project interface (VC2013Project,
+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.