Compile on Windows: Difference between revisions

From FreeCAD Documentation
(→‎LibPack: add a step)
(→‎CMake: add an info)
Line 101: Line 101:
<!--T:76-->
<!--T:76-->
This will begin the configuration and will fail because of missing settings. Therefore now:
This will begin the configuration and will fail because of missing settings. Therefore now:
# Assure that the search option ''Advanced'' is checked.
# Search in CMake for the variable '''FREECAD_LIBPACK_DIR''' and specify there the correct location to the LibPack folder.
# Search in CMake for the variable '''FREECAD_LIBPACK_DIR''' and specify there the correct location to the LibPack folder.
# Search for the variable '''BUILD_QT5''' and enable this option.
# Search for the variable '''BUILD_QT5''' and enable this option.

Revision as of 11:41, 19 September 2019

Tracker
CompileOnUnix

This article explains step by step how to compile FreeCAD on Windows.

See also

Prerequisites

At first you must install the following required programs ad libraries:

Required

  • Git (There are also a GUI frontends available for Git, see the next section.)
  • CMake version 3.11.x - 3.14.x. Note: Usually one cannot take the latest CMake version. Therefore only use a CMake version in the range specified on this page!
    It is recommended to use the option Add CMake to the system PATH for all users when installing CMake. Then you can later easily access CMake also from the command line/powershell.
  • LibPack (also called FreeCADLibs). This is a set of libraries necessary to compile FreeCAD on Windows. Depending on the FreeCAD version you want to compile, you must download the corresponding LibPack. For example to compile FreeCAD 0.18, download either the 32bit or the 64bit version of the LibPack for 0.18, to compile the latest development version 0.19, download the LibPack for 0.19 (there is only a 64bit version).
    Just download the LibPack, you will unpack and set it up later.
    Note: It is recommended to use the same compiler MS Visual Studio (MSVC) version the LibPack is designed for. This assures that the compilation and the execution of the compiled FreeCAD.exe succeeds. So you should for example be able to compile FreeCAD 0.18 using the LibPack for 0.19 and MSVC 15 but you you might get problems compiling FreeCAD 0.18 using the LibPack for 0.18 and MSVC 15 because the LibPack for 0.18 is designed to be built with MSVC 12.

Optional programs

  • Python 3.x. A separate python installation is not mandatory since the LibPack contains Python. However, to be able to test later your FreeCAD build it is useful to have a standalone Python installation. It is recommended to use not the latest version, but the prior version (e.g. not Python 3.7 but 3.6).
  • A GUI frontend for Git. There are several frontends available, see this list. The main benefit of a frontend is that you don't have to learn the Git commands to get the source code of FreeCAD or to send patches to the GitHub repository of FreeCAD.
    In the following we describe source code handling using the frontend TortoiseGit. This frontend integrates directly to Windows file explorer and has a large user community to get help in case you have problems.
  • NSIS This is the program to generate the Windows installer of FreeCAD. (Information: For FreeCAD 0.17 and older the program WiX was used to create the installer.)

Source Code

Now you can get the source code of FreeCAD:

Using the Command Line

To create a local tracking branch and download the source code, open a terminal (command prompt) and switch there to the directory you want the source, then type:

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

Using a Frontend

When using the Git frontend TortoiseGit:

  1. Create a new folder where the source code should be.
  2. Right-click on this folder in the Windows file explorer and select in the context menu Git Clone.
  3. A dialog will appear. Use there as URL for the FreeCAD repository
    https://github.com/FreeCAD/FreeCAD.git
    and Click OK.

Now the source code is downloaded and its folder becomes a folder tracked by Git.

Compiler

The default (recommended) compiler is MS Visual Studio (MSVC). Though it may be possible to use other compilers using Cygwin or MinGW gcc it is not tested or ported so far.

You can get a free version of MSVC (for OpenSource usage) by downloading the Community edition of MS Visual Studio. To do so, use this URL
https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=xx
where xx is the version number. So to get MSVC 15 (calso called MSVC 2017), use this URL:
https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=15

For those who want to avoid installing the huge MSVC for the mere purpose of having a compiler, see CompileOnWindows - Reducing Disk Footprint.

Note: Despite that the Community edition of MSVC is free, you must create a Microsoft account from withing the MSVC IDE that you can use the IDE for more than 30 days. If you will only compile using the command line, you don't need the IDE and thus no Microsoft account.

System Path Configuration

Inside your system path be sure to set the correct paths to the following programs:

  • git (not tortoiseGit, but git.exe) This is necessary for Cmake to properly update the "About FreeCAD" information in the version.h file which allows FreeCAD to report the proper version in About FreeCAD from the help menu.
  • Optionally you can include the Libpack in your system path. This is useful if you plan to build multiple configurations/versions of FreeCAD, you will need to copy less files as explained later in the build process.

To add to your system path:

  • Start menu → Right click on Computer → Properties → Advanced system settings
  • Advanced tab → Environment Variables...
  • Add the PATH/TO/GIT to the PATH
  • It should be separated from the others with a semicolon `;`

Configuration

LibPack

At first you need to setup a build folder:

  1. Create a new folder where the compiled FreeCAD should be. It is highly recommended that this folder is not inside the source code folder of FreeCAD.
  2. Create there a new subfolder for the LibPack. Give it for example the same name like the LibPack.
  3. Extract the LibPack to this subfolder.

CMake

Now you need to configure the build environment using CMake:

  1. Open the CMake GUI
  2. Specify there the source folder of FreeCAD
  3. Specify the build folder you just created in the previous step.
  4. Click Configure
  5. In the appearing dialog specify the generator according to the one you want to use. For the standard MS Visual Studio use Visual Studio xx 2yyy where xx is the compiler version ad yyy the year of its release. It is recommended to use the default option Use default native compilers. Note: it is important to specify the correct bit variant. if you have the 64bit variant of LibPack you must also use the x64 compiler.

This will begin the configuration and will fail because of missing settings. Therefore now:

  1. Assure that the search option Advanced is checked.
  2. Search in CMake for the variable FREECAD_LIBPACK_DIR and specify there the correct location to the LibPack folder.
  3. Search for the variable BUILD_QT5 and enable this option.
  4. Click Configure again

There should now be no errors. If so, click on Generate. After this is done you could close CMake and continue to start the compilation of FreeCAD. However, for the first compilation keep it open for the case that you want or need to change some options for the build process:

Options for the Build Process

The CMake build system gives you the flexibility over the build process. That means you can switch on and off some features or modules. (It is in a way like the Linux kernel build.)

Here is a description for some of these switches:

Link table
Variable name Description Default
BUILD_GUI Build FreeCAD with all Gui related modules ON
CMAKE_INSTALL_PREFIX The output folder when building the target INSTALL, see also section Running and installing FreeCAD Windows' default program installation folder
FREECAD_COPY_LIBPACK_BIN_TO_BUILD Copies the LibPack libraries needed to execute the FreeCAD.exe to the build folder. See also section Running and installing FreeCAD OFF
FREECAD_LIBPACK_USE Switch the usage of the FreeCAD LibPack on or off ON
FREECAD_LIBPACK_DIR Directory where the LibPack is FreeCAD's source code folder

If you are building with Qt Creator, jump to Building with Qt Creator, otherwise proceed to Building with Visual Studio 9 2008.

Building FreeCAD

Depending on your current setup, the process for building FreeCAD will be slightly different. This is due to the differences in available software and software versions for each operating system.


The following procedure will work for compiling on Windows Vista/7/8, for XP an alternate VS tool set is required for VS 2012 and 2013, which has not been tested successfully with the current Libpacks. To target XP(both x32 and x64) it is recommended to use VS2008 and Libpack FreeCADLibs_11.0_x86_VC9.7z

Building with Visual Studio 12 2013

Make sure to specify Visual Studio 12 x64(or the alternate C-Compiler you are using) as the generator in CMake before you continue.

  • Start Visual Studio 12 2013 by clicking on the desktop icon created at installation.
  • Open the project by:

File → Open → Project/Solution

  • Open FreeCAD_Trunk.sln from the build folder CMake created
  • Switch the Solutions Configuration drop down at the top to Release X64

This may take a while depending on your sytem

  • Build → Build Solution
  • This will take a long time...

If you don't get any errors you are done. Exit Visual Studio and start FreeCAD by double clicking the FreeCAD icon in the bin folder of the build directory.

Building with Visual Studio 9 2008

Warning

Since early 0.17 cycle Freecad uses c++11 features that are not supported by 2008 version



Building with Qt Creator

Installation and configuration of Qt Creator

  • Download and install Qt Creator
  • Tools → Options → Text Editor → Behavior tab:
    • File Encodings → Default Encodings:
    • Set to: ISO-8859-1 /...csISOLatin1 (Certain characters create errors/warnings with Qt Creator if left set to UTF-8. This seems to fix it.)
  • Tools → Options → Build & Run:
    • CMake tab
      • Fill Executable box with path to cmake.exe
    • Kits tab
      • Name: MSVC 2008
      • Compiler: Microsoft Visual C++ Compiler 9.0 (x86)
      • Debugger: Auto detected...
      • Qt version: None
    • General tab
      • Uncheck: Always build project before deploying it
      • Uncheck: Always deploy project before running it

Import project and Build

  • File → Open File or Project
  • Open CMakeLists.txt which is in the top level of the source
  • This will start CMake
  • Choose build directory and click next
  • Set generator to NMake Generator (MSVC 2008)
  • Click Run CMake. Follow the instructions depicted above to configure CMake to your liking.

Now FreeCAD can be built

  • Build → Build All
  • This will take a long time...

Once complete, it can be run: There are 2 green triangles at the bottom left. One is debug. The other is run. Pick whichever you want.


Command line build

Here an example how to build FreeCAD from the Command line:

rem @echo off
rem   Build script, uses vcbuild to completetly build FreeCAD
 
rem update trunc
d:
cd "D:\_Projekte\FreeCAD\FreeCAD_0.9"
"C:\Program Files (x86)\Subversion\bin\svn.exe" update 
 
rem  set the aprobiated Variables here or outside in the system
 
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
set INCLUDE=
set LIB=
 
rem Register VS Build programms
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
 
rem Set Standard include paths
set INCLUDE=%INCLUDE%;%FrameworkSDKDir%\include
set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
 
rem Set lib Pathes
set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
set LIB=%LIB%;%PROGRAMFILES%\Microsoft Visual Studio\VC98\Lib
 
rem Start the Visuall Studio build process
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe" "D:\_Projekte\FreeCAD FreeCAD_0.9_build\FreeCAD_trunk.sln" /useenv


Running and installing FreeCAD

There are 2 methods to run the compiled FreeCAD:

  1. You execute the FreeCAD.exe that you find in your build folder in the subfolder bin
  2. You build the target INSTALL

Method 2 is the simpler one because it automatically assures that all libraries needed to run the FreeCAD.exe are in the correct folder. The FreeCAD.exe and the libraries will be output in the folder you specified in the CMake variable CMAKE_INSTALL_PREFIX.
For FreeCAD 0.19 there is currently only one issue that requires your action:

  1. Download the file qwindowsvistastyle.zip from the FreeCAD forum.
  2. Create a new subfolder named styles in the bin folder.
  3. Extract the ZIP-file to this folder.

This adds the necessary style to make FreeCAD look like a normal Win 10 program, otherwise it looks like in Windows 98.

For Method 1 you need to put the libraries into the bin folder of your build folder (where the FreeCAD.exe is). This can easily be done, by using the CMake variable option FREECAD_COPY_LIBPACK_BIN_TO_BUILD.

Building FreeCAD older than version 0.9

Using LibPack

To make it easier to get FreeCAD compiled, we provide a collection of all needed libraries. It's called the LibPack. You can find it on the download page on sourceforge.

You need to set the following environment variables:

FREECADLIB = "D:\Wherever\LIBPACK"
QTDIR = "%FREECADLIB%"

Add "%FREECADLIB%\bin" and "%FREECADLIB%\dll" to the system PATH variable. Keep in mind that you have to replace "%FREECADLIB%" with the path name, since Windows does not recursively replace environment variables.

Directory setup in Visual Studio

Some search path of Visual Studio need to be set. To change them, use the menu Tools→Options→Directory

Includes

Add the following search path to the include path search list:

  • %FREECADLIB%\include
  • %FREECADLIB%\include\Python
  • %FREECADLIB%\include\boost
  • %FREECADLIB%\include\xercesc
  • %FREECADLIB%\include\OpenCascade
  • %FREECADLIB%\include\OpenCV
  • %FREECADLIB%\include\Coin
  • %FREECADLIB%\include\SoQt
  • %FREECADLIB%\include\QT
  • %FREECADLIB%\include\QT\Qt3Support
  • %FREECADLIB%\include\QT\QtCore
  • %FREECADLIB%\include\QT\QtGui
  • %FREECADLIB%\include\QT\QtNetwork
  • %FREECADLIB%\include\QT\QtOpenGL
  • %FREECADLIB%\include\QT\QtSvg
  • %FREECADLIB%\include\QT\QtUiTools
  • %FREECADLIB%\include\QT\QtXml
  • %FREECADLIB%\include\Gts
  • %FREECADLIB%\include\zlib
Libs

Add the following search path to the lib path search list:

  • %FREECADLIB%\lib
Executables

Add the following search path to the executable path search list:

  • %FREECADLIB%\bin
  • TortoiseSVN binary installation directory, usually "C:\Programm Files\TortoiseSVN\bin", this is needed for a distribution build when SubWVRev.exe is used to extract the version number from Subversion.

Python needed

During the compilation some Python scripts get executed. So the Python interpreter has to function on the OS. Use a command box to check it. If the Python library is not properly installed you will get an error message like Cannot find python.exe. If you use the LibPack you can also use the python.exe in the bin directory.

Special for VC8

When building the project with VC8, you have to change the link information for the WildMagic library, since you need a different version for VC6 and VC8. Both versions are supplied in LIBPACK/dll. In the project properties for AppMesh change the library name for the wm.dll to the VC8 version. Take care to change it in Debug and Release configuration.

Compile

After you conform to all prerequisites the compilation is - hopefully - only a mouse click in VC

After Compiling

To get FreeCAD up and running from the compiler environment you need to copy a few files from the LibPack to the bin folder where FreeCAD.exe is installed after a successful build:

  • python.exe and python_d.exe from LIBPACK/bin
  • python25.dll and python25_d.dll from LIBPACK/bin
  • python25.zip from LIBPACK/bin
  • make a copy of Python25.zip and rename it to Python25_d.zip
  • QtCore4.dll from LIBPACK/bin
  • QtGui4.dll from LIBPACK/bin
  • boost_signals-vc80-mt-1_34_1.dll from LIBPACK/bin
  • boost_program_options-vc80-mt-1_34_1.dll from LIBPACK/bin
  • xerces-c_2_8.dll from LIBPACK/bin
  • zlib1.dll from LIBPACK/bin
  • coin2.dll from LIBPACK/bin
  • soqt1.dll from LIBPACK/bin
  • QtOpenGL4.dll from LIBPACK/bin
  • QtNetwork4.dll from LIBPACK/bin
  • QtSvg4.dll from LIBPACK/bin
  • QtXml4.dll from LIBPACK/bin

When using a LibPack with a Python version older than 2.5 you have to copy two further files:

  • zlib.pyd and zlib_d.pyd from LIBPACK/bin/lib. This is needed by python to open the zipped python library.
  • _sre.pyd and _sre_d.pyd from LIBPACK/bin/lib. This is needed by python for the built in help system.

If you don't get it running due to a Python error it is very likely that one of the zlib*.pyd files is missing.

Alternatively, you can copy the whole bin folder of libpack into bin folder of the build. This is easier, but takes time and disk space. This can be substited by making links instead of copying files, see CompileOnWindows - Reducing Disk Footprint.

Additional stuff

If you whant to build the source code documentation you need DoxyGen.

To create an intstaller package you need WIX.

During the compilation some Python scripts get executed. So the Python interpreter has to work properly.

For more details have also a look to README.Linux in your sources.

First of all you should build the Qt plugin that provides all custom widgets of FreeCAD we need for the Qt Designer. The sources are located under

//src/Tools/plugins/widget//.

So far we don't provide a makefile -- but calling

qmake plugin.pro

creates it. Once that's done, calling make will create the library

//libFreeCAD_widgets.so//.

To make this library known to your Qt Designer you have to copy the file to

//$QTDIR/plugin/designer//.


References

Tracker
CompileOnUnix