Compile on MinGW/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "Compiler sous MinGW")
 
(Updating to match new version of source page)
 
(32 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{VeryImportantMessage|Warning, the contents of this page may be obsolete. Please help us to keep it updated!}}


{{TOCright}}
==How to build and run FreeCAD under MSYS/MinGW==


Ce guide explique les étapes nécessaires pour compiler FreeCAD sous Windows en utilisant l'environnement MSYS2/MinGW. Une connaissance de base avec les commandes du shell Bash sera utile pour comprendre ce que fait chaque étape, mais en suivant le guide, vous devriez obtenir une compilation fonctionnelle même si vous ne comprenez pas exactement ce que vous avez fait pour l'obtenir.
===Prerequisites===


=== Avant de commencer ===
Here comes a short introduction how to setup a MSYS/MinGW environment
on a Windows system, to build all needed libraries and finally to build
the FreeCAD sources.


Téléchargez et installez [https://www.msys2.org MSYS2] si ce n'est pas déjà fait. Lorsque vous lancez MSYS2, utilisez le runtime "MSYS2 MinGW 64-bit" à moins que vous ne sachiez ce que vous faites et que vous ayez une raison spécifique de ne pas le faire. Si vous utilisez la console UCRT, veillez à adapter votre installation pour utiliser les paquets UCRT à la place.
==== MSYS/MinGW====


<pre>
If not already installed get a MinGW installer from the Sourceforge page at
pacman -Syu
http://sourceforge.net/projects/mingw. When writing this tutorial the latest
</pre>
version was mingw-get-inst-20100831.exe. Download and just double-click the
excutable. This installs the compiler and a minimal Windows developer environment.
Make sure to also install the Fortran compiler because there is a single Fortran
file in the 3rd party folder of the FreeCAD sources.


et ensuite relancer et exécuter
Then as second step MSYS needs to be installed to have an environment to run
./configure scripts which we make heavy use of in order to build all needed
libraries. From the Soureforge page the file MSYS-1.0.11.exe was taken.


<pre>
A virginal MSYS/MinGW installation lacks of a few modules we later need.
pacman -Su
First, we need the utility pexport which can be found in the file
</pre>
pexports-0.44-1-mingw32-bin.tar.lzma. I don't know where to put this file
and how to make MSYS to install the stuff inside. But the file can be opened
with a ZIP program and the content can be copied to their destination manually.
Here, the pexports utility can go to the bin directory of your MinGW installation.


avant de poursuivre.
Then, we also need the development files for the pthreads module which is part
of the file pthreads-w32-2.8.0-3-mingw32-dev.tar.lzma. Just download and copy
the files inside to your MinGW installation.


=== Installer les outils de développement de base ===


Dans toutes les étapes suivantes, lorsque l'interpréteur de commandes de MSYS2 vous le demande, acceptez les installations par défaut de tous les éléments en appuyant sur "Entrée".
==== CMake====


Premièrement, installez la chaîne d'outils GCC mingw-w64 :
Download the CMake utility from http://www.cmake.org/cmake/resources/software.html.
Get the archive with the binaries for the Windows platform and unpack whereever you
want. There is nothing further to do for this.


<pre>
==== SWIG====
pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja
</pre>


Cette opération prendra probablement plusieurs minutes, car la chaîne d'outils du compilateur est assez volumineuse.
Download the SWIG utility from www.swig.org and extract it somewhere on your harddisk.


Installez git :


<pre>
===Third party libraries===
pacman -S git
</pre>


Fermez votre fenêtre de console en cours et relancez la console MSYS2 MinGW 64 (dans une installation standard, elle se trouve dans votre menu Démarrer dans le dossier MSYS2).
Here is a description which libraries we need for FreeCAD and how to build them from
the sources. In order not to pollute our MinGW installation with too many files from
the 3rd party libraries we have to build you can e.g. create a sub-directory "local"
in your MSYS installation. If you have installed MSYS under C:\MSYS then simply create
the directory C:\MSYS\1.0\local.


=== Vérifier les sources de FreeCAD ===


Pour obtenir le code source de FreeCAD, clonez-le depuis le dépôt git principal :
==== zlib====


<pre>
For zlib there is already a ready package for MinGW. So, therefore simply download
git clone https://github.com/FreeCAD/FreeCAD
the file libz-1.2.3-1-mingw32-dev.tar.gz from the Sourceforge site and extract the
</pre>
two directories lib and include to C:\MSYS\1.0\local.


Si vous ne voulez pas compiler le dernier HEAD, une fois que vous avez la source, vous pouvez vérifier une balise spécifique :


<pre>
==== Python====
cd FreeCAD
git checkout tags/1.0 -b releases/FreeCAD-1-0
</pre>


Ou une demande spécifique (dans cet exemple, PR 1234) :
It seems to be nearly impossible to build the Python sources directly with the MinGW
compiler. This is because some Python modules require some features which are not
implemented on the MinGW platform. Fortunately, the Python sources are plain C code
and instead of trying to build it with MinGW you can get a ready binary package built
with the MSVC compiler. You can install the Python stuff whereever you want. Afterwards
copy the include folder to C:\MSYS\1.0\local, the DLL can go to C:\MSYS\1.0\local\bin.


<pre>
Now we also need the so called import library. There we cannot use the .lib file which
cd FreeCAD
comes together with the installer. But it's easy to create one with the pexports/dlltool
git fetch origin pull/1234/head:pr/1234
utilities. Assuming the Python version is 2.6 do these two steps:
git checkout pr/1234
pexports python26.dll > python26.def
</pre>
dlltool -D python26.dll -d python26.def -l libpython26.dll.a
The file libpython26.dll.a can now be moved to C:\MSYS\1.0\local\lib.


Notez que toutes les versions ne peuvent pas être compilées sur MSYS2, plusieurs changements ont été nécessaires pour l'activer et ceux-ci n'étaient pas présents dans la 0.19 ou les versions antérieures. Par exemple, la balise 0.19.3 ne sera pas compilable.


=== Installer les bibliothèques requises ===
====f2c====


FreeCAD dépend de nombreuses bibliothèques tierces pour sa fonctionnalité. Elles peuvent être installées individuellement, ou sous la forme d'une seule commande unifiée.
For this library we don't need any header files but only the import library to build the
Salome SMESH sources. The easiest way to build this file is:
pexports libgfortran-3.dll > f2c.def
dlltool -D libgfortran-3.dll -d f2c.def -l libf2c.dll.a
The file libf2c.dll.a can now be moved to C:\MSYS\1.0\local\lib.


Maintenant, installez les dépendances requises suivantes en utilisant pacman :
====xerces-c====


* mingw-w64-x86_64-opencascade
Download a source archive from http://xml.apache.org/dist/xerces-c/ and extract it.
* mingw-w64-x86_64-xerces-c
Open a MSYS command line window and change to the xerces-c sources. From there run
* mingw-w64-x86_64-qt5
./configure LDFLAGS=-no-undefined
* mingw-w64-x86_64-med
Once ./configure has finished it's best to move to the source directory because we
* mingw-w64-x86_64-swig
don't need to build the dozens of test applications and other stuff. So, do this:
* mingw-w64-x86_64-qtwebkit
cd src
* mingw-w64-x86_64-coin
make
* mingw-w64-x86_64-python-pivy
make install
* mingw-w64-x86_64-python-ply
* mingw-w64-x86_64-python-six
This takes a few minutes to be done.
* mingw-w64-x86_64-python-yaml
* mingw-w64-x86_64-python-numpy
* mingw-w64-x86_64-python-matplotlib
* mingw-w64-x86_64-pyside2-qt5
* mingw-w64-x86_64-python-markdown
* mingw-w64-x86_64-python-pygit2


Ce qui suit est une commande unique pour installer tout ce qui est dans la liste ci-dessus :


<pre>
====boost====
pacman -S mingw-w64-x86_64-opencascade mingw-w64-x86_64-xerces-c mingw-w64-x86_64-qt5 mingw-w64-x86_64-med mingw-w64-x86_64-swig mingw-w64-x86_64-qtwebkit mingw-w64-x86_64-coin mingw-w64-x86_64-python-pivy mingw-w64-x86_64-pyside2-qt5 mingw-w64-x86_64-python-ply mingw-w64-x86_64-python-six mingw-w64-x86_64-python-yaml mingw-w64-x86_64-python-numpy mingw-w64-x86_64-python-matplotlib mingw-w64-x86_64-python-markdown mingw-w64-x86_64-python-pygit2
</pre>


===Compiler FreeCAD===
For boost there exists a testing package with cmake support. This, however, seems to be
stable enough to build with the MinGW compiler. So, get the file boost-1.41.0.cmake0.zip
from http://sodium.resophonic.com/boost-cmake/1.41.0.cmake0/ and unpack it.


Créez un répertoire pour la compilation : notez que ce n'est généralement pas un sous-répertoire du répertoire source (il est souvent utile de pouvoir supprimer soit le répertoire source soit le répertoire de compilation).
Now, start the cmake-gui.exe from within the MSYS command line. This is necessary for cmake
in order to find the compiler and other stuff. Select the folder of the boost sources with
the CMakeLists.txt file, select a build directory and start Configure. You'll be asked for
which system you want to generate the Makefiles. Select MSYS/Makefiles, not MinGW/Makefiles.


<pre>
When the configuration step has finished go to the options and search for WINMANGLE_LIBNAMES.
mkdir FreeCAD-build
Switch this off because otherwise the boost library names contain the compiler name. This
cd FreeCAD-build
causes the boost cmake check to fail later when we try to build the FreeCAD sources. And for
</pre>
the installtion folder choose the directory C:\MSYS\1.0\local.


Exécutez cMake :
So, reconfigure boost and press on Generate once it has finished. Close the CMake GUI window
and enter
make
make install
into the command line. This will take a couple of minutes.


<pre>
cmake ../FreeCAD
</pre>


Et enfin :
====eigen2====


<pre>
Download eigen-2.0.15.tar.gz or any later version from http://eigen.tuxfamily.org/index.php?title=Main_Page.
cmake --build ./
Unpack the files and start again cmake-gui. Set the installation directory to C:\MSYS\1.0\local
</pre>
and press on Configure and Generate. Close the window and start the installation with
make
make install


o Qt4
From the Qt website at ftp://ftp.trollech.com you can download already prebuilt packages for the
MinGW platform. But depending on the version you have installed it can happen that they don't fit
together. In this case the source tarball must be downloaded. Use version 4.5.3 or higher. Unpack
the sources and start the configure.exe you'll find inside the sources.
./configure
By default the build the debug and release version. If you only want the release version use the
option "-release".
Configure will ask you some questions under which license you want to use Qt. Choose LGPL here.
Now run the build with
make
This can take quite some time because Qt has become a really huge library over the years. Once the
build has finished run a
make install
to copy the header files to their right place. All the binaries and header files are still inside
the source folder. If you like you can copy all the .dll, .a, and the direcories under "include" to
the subdirectories of C:\MSYS\1.0\local.


{{Userdocnavi{{#translation:}}}}

[[Category:Developer_Documentation{{#translation:}}]]
====Coin====
[[Category:Developer{{#translation:}}]]

Get a source archive from www.coin3d.org. Unpack the sources and run
./confiure
make
make install
It may happen that a message dialog pops up due to a missing cygwin1.dll. You simply ignore this.


====SoQt====

Get a source archive from www.coin3d.org. Unpack the sources and run
./configure CXXFLAGS="-DCOIN_DLL" --with-qt=/usr/local
make
make install
In case your Qt development files are not under /usr/local choose the correct directory there.
Again a message dialog may pop up due to the missing cygwin1.dll.


====PyQt/sip====

Warning: the following is obsoleted from version 0.14, since FreeCAD is now using
pySide instead of PyQt. At the moment, PySide suport for MingW seems still not complete:
https://bugreports.qt-project.org/browse/PYSIDE-113?page=com.atlassian.jira.plugin.system.issuetabpanels%3aall-tabpanel

Download the sources archives for sip and PyQt4 from www.riverbankcomputing.co.uk.

In order to build sip extract the archive and open a MSYS command line. From within
its source archive call
python configure.py --platform win32-g++ --destdir=/usr/local
make
It may happen that this step aborts because the Python include headers cannot be found.
In this case edit the Makefile and add the include path for the ython headers and also
the path and filename of the Python library.

Unfortunately, the 'make install' command doesn't work because the Makefile was generated
to use Windows batch commands instead of bash commands. Thus, copy the following files to
a path where Python can find it, e.g. /usr/local/bin.
sipconfig.py
sipdistutils.py
siputils.py
sip.pyd
sip.exe
In order to build PyQt4 extract the source archive and open a MSYS command line. Go to the
directory and start
export PATH=/usr/local/lib/:$PATH
python configure.py --destdir=/usr/local/lib/site-packages
make
Since the Makefile doesn't find the Python header files copy them all and also the file sip.h
to a directory where they can be found. A good place seems to be the directory of the Qt sources.
There copy the files to $QTDIR/include. The Python library file python26.dll.a can go $QTDIR/lib.

After the build has finished you have to copy all files that end with .pyd to their destination,
e.g. /usr/local/lib/site-packages/PyQt4. Lateron when you have built the FreeCAD sources you have
to copy the PyQt4 directory and sip.pyd to the FreeCAD bin directory or set a symlink.


====ODE====

TODO: Still not clear if this will be used. (http://www.ode.org), >= 0.10.x


====OpenCASCADE====

For the build of the OpenCASCADE libraries get the sources from www.opencascade.org or alternatively
it is also possible to download a stripped source tarball from the Debian mirrors which don't include
any fonts and other resource files.

Unpack the sources and download a CMake script from http://opencascade-cmake.googlecode.com/svn/trunk/
and the file occ_config.h.cmake. Copy both files into the 'ros' directory, start cmake-gui from
within a MSYS command line and select MSYS Makefiles. In the options the following switches can be
disabled:
OPENCASCADE_WRAPPERS
OPENCASCADE_VISUALISATION
OPENCASCADE_OCAF
OPENCASCADE_DRAW
Then specify for OPENCASCADE_INSTALL_PREFIX C:/MSYS/1.0/local as destination directory-

Now click the Configure button which takes a while and afterwards the Generate button.

====Note 1====

The original sources don't completely compile with MinGW. Therefore you have to apply the patch
OpenCASCADE6.3.0-MinGW.patch from http://code.google.com/p/opencascade-cmake/source/browse/trunk

====Note 2====

The original sources includes also a configure script and the Makefile.am files.
But it appeared to be very hard to build the libraries this way. Thus, it highly
recommended to do it the CMake way.

====Note 3====

For a couple of libraries the arguments passed to the linker exceeds the number of
allowed characters and thus the linker stops with an error: "Bad file number".
To solve this issue you can open the file build.make of the according library and
split the block (e.g. TKGeomAlgo_OBJECTS) into several smaller ones and modify the
build rule this way that you create first a static library, add the other object
files to the group and then unpack the static archive into one directory. This
trick solves the problem to reduce the whole number of characters.
Afterwards the shared library can be built out of these object files.

Example:
If the build.make file has a line of the form
g++ <options> -shared -o libTKGeomAlgo.dll $(TKGeomAlgo_OBJECTS) <libs>
then change it into
ar rcs win32/libTKGeomAlgo.a $(TKGeomAlgo_OBJECTS1)
ar q win32/libTKGeomAlgo.a $(TKGeomAlgo_OBJECTS2)
...
ar x win32/libTKGeomAlgo.a
g++ <options> -shared -o libTKGeomAlgo.dll *.obj <libs>
rm -f *.obj

====Netgen====

Modify the following files:
* libsrc/meshing/improve2.hpp
Add DLL_HEADER to class MeshOptimize2d
* libsrc/meshing/meshclass.hpp
Add DLL_HEADER to CalcSurfacesOfNode
* libsrc/meshing/meshtype.hpp
Add DLL_HEADER to classes SurfaceElementIndex, MeshPoint, Element2d (int anp),
* libsrc/occ/occgeom.hpp
Add DLL_HEADER to classes Line, OCCGeometry, OCCParameters, OCCGenerateMesh
* libsrc/occ/occmeshsurf.hpp
Add DLL_HEADER to classes OCCSurface, Meshing2OCCSurfaces, MeshOptimize2dOCCSurfaces, OCCRefinementSurfaces
Run the configure script with these arguments
./configure --prefix=/usr/local --enable-shared --enable-occ --with-occ=/usr/local --with-tcl=/usr/local/lib --enable-nglib CXXFLAGS="-DNGLIB_EXPORTS -DWNT"
make && make install

===Building the FreeCAD sources===

In order build the FreeCAD sources either get the developer sources from the SVN repository
or get one of the .tar.gz tarballs and extract it.
Now start cmake-gui.exe from within a MSYS command line window and browse to the FreeCAD
sources and also define the build directory. Now run Configure. It may happen that cmake
complains about some not found libraries. In this case go through the listed libraries and
choose the include directory and/or the path to the library where needed. Once Confgiure
accepts all your input create the Makefiles by clicking on Generate. Now close the window
and enter
make
make install
This will take a couple of minutes. From the command line window change to the FreeCAD bin
folder and start the application with ./FreeCAD. In case it complains about some DLLs it cannot
find you have to extend your PATH environment variable with
export PATH=$PATH:/usr/local/bin:/usr/local/lib
If no grave problems remains repeating ./FreeCAD should start the application now.

====Note====

In order to let CMake detect the boost libraries you must make sure that the
DLLs are in the system path because the check builds some test applications
and tries to start them. If the DLLs are not in path CMake says that it cannot
find boost. In this case do a export PATH=/usr/local/lib:$PATH

Have fun!


[[Category:Developer_Documentation]]
[[Category:Developer]]

{{clear}}

Latest revision as of 16:23, 7 March 2022

Ce guide explique les étapes nécessaires pour compiler FreeCAD sous Windows en utilisant l'environnement MSYS2/MinGW. Une connaissance de base avec les commandes du shell Bash sera utile pour comprendre ce que fait chaque étape, mais en suivant le guide, vous devriez obtenir une compilation fonctionnelle même si vous ne comprenez pas exactement ce que vous avez fait pour l'obtenir.

Avant de commencer

Téléchargez et installez MSYS2 si ce n'est pas déjà fait. Lorsque vous lancez MSYS2, utilisez le runtime "MSYS2 MinGW 64-bit" à moins que vous ne sachiez ce que vous faites et que vous ayez une raison spécifique de ne pas le faire. Si vous utilisez la console UCRT, veillez à adapter votre installation pour utiliser les paquets UCRT à la place.

pacman -Syu

et ensuite relancer et exécuter

pacman -Su

avant de poursuivre.

Installer les outils de développement de base

Dans toutes les étapes suivantes, lorsque l'interpréteur de commandes de MSYS2 vous le demande, acceptez les installations par défaut de tous les éléments en appuyant sur "Entrée".

Premièrement, installez la chaîne d'outils GCC mingw-w64 :

pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja

Cette opération prendra probablement plusieurs minutes, car la chaîne d'outils du compilateur est assez volumineuse.

Installez git :

pacman -S git

Fermez votre fenêtre de console en cours et relancez la console MSYS2 MinGW 64 (dans une installation standard, elle se trouve dans votre menu Démarrer dans le dossier MSYS2).

Vérifier les sources de FreeCAD

Pour obtenir le code source de FreeCAD, clonez-le depuis le dépôt git principal :

git clone https://github.com/FreeCAD/FreeCAD

Si vous ne voulez pas compiler le dernier HEAD, une fois que vous avez la source, vous pouvez vérifier une balise spécifique :

cd FreeCAD
git checkout tags/1.0 -b releases/FreeCAD-1-0

Ou une demande spécifique (dans cet exemple, PR 1234) :

cd FreeCAD
git fetch origin pull/1234/head:pr/1234
git checkout pr/1234

Notez que toutes les versions ne peuvent pas être compilées sur MSYS2, plusieurs changements ont été nécessaires pour l'activer et ceux-ci n'étaient pas présents dans la 0.19 ou les versions antérieures. Par exemple, la balise 0.19.3 ne sera pas compilable.

Installer les bibliothèques requises

FreeCAD dépend de nombreuses bibliothèques tierces pour sa fonctionnalité. Elles peuvent être installées individuellement, ou sous la forme d'une seule commande unifiée.

Maintenant, installez les dépendances requises suivantes en utilisant pacman :

  • mingw-w64-x86_64-opencascade
  • mingw-w64-x86_64-xerces-c
  • mingw-w64-x86_64-qt5
  • mingw-w64-x86_64-med
  • mingw-w64-x86_64-swig
  • mingw-w64-x86_64-qtwebkit
  • mingw-w64-x86_64-coin
  • mingw-w64-x86_64-python-pivy
  • mingw-w64-x86_64-python-ply
  • mingw-w64-x86_64-python-six
  • mingw-w64-x86_64-python-yaml
  • mingw-w64-x86_64-python-numpy
  • mingw-w64-x86_64-python-matplotlib
  • mingw-w64-x86_64-pyside2-qt5
  • mingw-w64-x86_64-python-markdown
  • mingw-w64-x86_64-python-pygit2

Ce qui suit est une commande unique pour installer tout ce qui est dans la liste ci-dessus :

pacman -S mingw-w64-x86_64-opencascade mingw-w64-x86_64-xerces-c mingw-w64-x86_64-qt5 mingw-w64-x86_64-med mingw-w64-x86_64-swig mingw-w64-x86_64-qtwebkit mingw-w64-x86_64-coin mingw-w64-x86_64-python-pivy mingw-w64-x86_64-pyside2-qt5 mingw-w64-x86_64-python-ply mingw-w64-x86_64-python-six mingw-w64-x86_64-python-yaml mingw-w64-x86_64-python-numpy mingw-w64-x86_64-python-matplotlib mingw-w64-x86_64-python-markdown mingw-w64-x86_64-python-pygit2

Compiler FreeCAD

Créez un répertoire pour la compilation : notez que ce n'est généralement pas un sous-répertoire du répertoire source (il est souvent utile de pouvoir supprimer soit le répertoire source soit le répertoire de compilation).

mkdir FreeCAD-build
cd FreeCAD-build

Exécutez cMake :

cmake ../FreeCAD

Et enfin :

cmake --build ./