summaryrefslogtreecommitdiff
path: root/README.msvc
blob: a72fe1dca71af88dfae153a894fb14be513cb7fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Building GObject-Introspection (G-I) on Windows using Visual Studio
===================================================================
Building G-I on Windows with Visual Studio is now supported via the use
of the Meson build system, the Visual Studio 2008~2017 projects have been
dropped from the distribution.  This README.msvc file will outline the
steps of performing such a build on Visual Studio 2008~2017.

You will need the following, in addition to your Visual Studio installation:
-A Python installation that matches the build configuration that you are
 planning to build.  That is, you need the 32-bit Python installation for
 building 32-bit builds of G-I and the 64-bit (amd64) Python installation
 for building x64/x86_64/amd64 builds of G-I.  You need at least the version
 that is required for Meson, which is 3.4.x at the time of writing.  You will
 then need to install Meson using the pip tool.

-The Ninja build tool, which is optional on Visual Studio 2010, 2015 and 2017
 builds (if one chooses to generate Visual Studio projects with Meson), but is
 required for 2008, 2012 and 2013 builds.

-GIT for Windows is recommended, as Meson will download using GIT the sources
 of libraries that it depends on, if they cannot be found (such as GLib, please
 see below)

-A recent enough version of GLib, preferably built with the same compiler that
 is now being used to build G-I.  If none is found, the Meson build will fetch
 GLib from GIT master and build it first before continuing to build G-I.  Note
 that it will require a libintl implementation (must be installed beforehand, the
 headers and lib and DLL must be found in the paths specified by %INCLUDE, %LIB%
 and %PATH% respectively), along with ZLib and libffi (GLib's own Meson build will
 build  them if they are not found).  If a pre-existing copy of GLib is available,
 be sure to set PKG_CONFIG_PATH to where its .pc files can be found, and ensure
 that its DLLs/ executables can be first found in the paths specified in %PATH%.
 Note that libffi is needed both by GLib and G-I.

-A DLL build of Cairo with Cairo-GObject built, also preferably with the same
 compiler that is now used to build G-I.

-A recent version of winflex/flex and Bison.  They can be obtained via MSYS/MSYS64
 or Cygwin installations.  Either the 32-bit or 64-bit version will work, as long
 as they run on your system.

Set PATH to contain your Python-3.4.x+ interpreter, Ninja build tool (if needed) and
winflex/flex and Bison executables towards its end.

Note that if you plan to use g-ir-scanner for other packages built using Meson, you
need to use the same Python release series (3.4, 3.5...) for running Meson there as
well.

Open a Visual Studio command prompt and create an empty build directory (which needs
to be on the same drive as the G-I sources).  In that directory, run the following:

python $(PythonInstallationPath)\scripts\meson.py $(G-I_srcdir) --buildtype=<build_configuration> --prefix=$(PREFIX) -Dcairo-libname=<DLL filename of cairo-gobject>

When Meson completes configuring and generating the build files, proceed building
using Ninja or the generated Visual Studio projects.

Additional notes for building with Visual Studio 2008 only
==========================================================
Due to its use of security manifests, after Meson completes configuring and
generating the build files, first build the giscanner\_giscanner.pyd target
using 'ninja giscanner\_giscanner.pyd'.  After doing so, embed the manifest
using the following command:

mt /manifest giscanner\_giscanner.pyd.manifest /outputresource:giscanner\_giscanner.pyd;2

The .gir files cannot be successfully generated without this step.

On x64 builds, building girepository\girepository-1.0-1.dll may hang during compilation.
If this happens, terminate all 'cl.exe' processes, which will terminate the build process.
Open build.ninja and change the compiler flags by changing /O2 to /O1 for all the sources
that hang during compilation.  At this time of writing, girepository\girwriter.c,
girepository\girparser.c and girepository\girnode.c are affected--this is due to an issue
in Visual Studio 2008's x64 compiler in regards to optimization.  Re-attempt the build, and
the build should complete normally.  This does not affect Win32/x86 builds.

On all Visual Studio 2008 builds, after successfully completing/installing the build, run
the following so that we ensure the manifests are embedded to the built DLLs and EXEs:

for /r %f in (*.dll.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f /outputresource:$(PREFIX)\bin\%~nf;2
for /r %f in (*.exe.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f /outputresource:$(PREFIX)\bin\%~nf;1