summaryrefslogtreecommitdiff
path: root/Documentation/development/compiling.md
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/development/compiling.md')
-rw-r--r--Documentation/development/compiling.md413
1 files changed, 413 insertions, 0 deletions
diff --git a/Documentation/development/compiling.md b/Documentation/development/compiling.md
new file mode 100644
index 0000000..6a5ac92
--- /dev/null
+++ b/Documentation/development/compiling.md
@@ -0,0 +1,413 @@
+# Building KiCad from Source #
+If you are a user and not a developer, please consider using one of the prebuilt packages
+of KiCad which can be found at the [download][] page on the [KiCad website][]. Building KiCad
+from source is not for the faint of heart and is not recommended unless you have reasonable
+software development experience. This document contains the instructions on how to build KiCad
+from source on the supported platforms. It is not intended as a guide for installing or building
+[library dependencies](#library_dependencies). Please consult you platforms documentation for
+installing packages or the source code when building the library dependencies. Currently the
+supported platforms are Windows Versions 7-10, just about any version of Linux, and OSX
+10.7-10.10. You may be able to build KiCad on other platforms but it is not supported. On
+Windows and Linux the [GNU GCC][] is the only supported compiler and on OSX [Clang][] is the
+only supported compiler.
+
+[TOC]
+
+# Development Tools # {#development_tools}
+
+Before you begin building KiCad, there are a few tools required in addition to your compiler.
+Some of these tools are required to build from source and some are optional.
+
+## CMake Build Configuration Tool ## {#cmake}
+
+[CMake][] is the build configuration and makefile generation tool used by KiCad. It is required.
+
+
+## Bazaar Version Control System ## {#bazaar}
+
+The official source code repository is hosted on [Launchpad][] and requires the [Bazaar][] version
+control system in order to create a branch of the latest source. Bazaar is not required if you are
+going to build a stable version of KiCad from a source archive.
+
+## GIT Version Control System ## {#git}
+
+If you prefer to use [GIT][] for version control, there is a mirror of the official KiCad
+repository on [Github][]. GIT is not required if you are going to build a stable version of
+KiCad from a source archive. Please note that the Github mirror is read only. Do not submit
+pull requests to Github. Changes should be sent to the KiCad developer's [mailing list][] as
+an attached patch with [PATCH] at the beginning of the subject.
+
+## Doxygen Code Documentation Generator ## {#doxygen_section}
+
+The KiCad source code is documented using [Doxygen][] which parses the KiCad source code files
+and builds a dependency tree along with the source documentation into HTML. Doxygen is only
+required if you are going to build the KiCad documentation.
+
+## SWIG Simplified Wrapper and Interface Generator ## {#swig}
+
+[SWIG][] is used to generate the Python scripting language extensions for KiCad. SWIG is not
+required if you are not going to build the KiCad scripting extension.
+
+
+# Library Dependencies # {#library_dependencies}
+
+This section includes a list of library dependencies required to build KiCad. It does not
+include any dependencies of the libraries. Please consult the library's documentation for any
+additional dependencies. Some of these libraries are optional depending on you build
+configuration. This is not a guide on how to install the library dependencies using you systems
+package management tools or how to build the library from source. Consult the appropriate
+documentation to perform these tasks.
+
+## wxWidgets Cross Platform GUI Library## {#wxwidgets}
+
+[wxWidgets][] is the graphical user interface (GUI) library used by KiCad. The current minimum
+version is 3.0.0. However, 3.0.2 should be used whenever possible as there are some known bugs
+in prior versions that can cause problems on some platforms. Please note that there are also
+some platform specific patches that must be applied before building wxWidgets from source. These
+patches can be found in the [patches folder][] in the KiCad source. These patches are named by
+the wxWidgets version and platform name they should be applied against. wxWidgets must be built
+with the --with-opengl option. If you installed the packaged version of wxWidgets on your system,
+verify that it was built with this option.
+
+## Boost C++ Libraries ## {#boost}
+
+The [Boost][] C++ library is required only if you intend to build KiCad with the system installed
+version of Boost instead of the default internally built version. If you use the system installed
+version of Boost, version 1.56 or greater is required. Please note there are some platform
+specific patches required to build a working Boost library. These patches can be found in the
+[patches folder][] in the KiCad source. These patches are named by the platform name they should
+be applied against.
+
+## GLEW OpenGL Extension Wrangler Library ## {#glew}
+
+The [OpenGL Extension Wrangler][GLEW] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## GLUT OpenGL Utility Toolkit Library ## {#glut}
+
+The [OpenGL Utility Toolkit][GLUT] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## Cairo 2D Graphics Library ## {#cairo}
+
+The [Cairo][] 2D graphics library is used as a fallback rendering canvas when OpenGL is no
+available and is always required to build KiCad.
+
+## Python Programming Language ## {#python}
+
+The [Python][] programming language is used to provide scripting support to KiCad. It only needs
+to be install if the [KiCad scripting](#kicad_scripting) build configuration option is enabled.
+
+## wxPython Library ## {#wxpython}
+
+The [wxPython][] library is used to provide a scripting console for Pcbnew. It only needs to be
+installed if the [wxPython scripting](#wxpython_scripting) build configuration option is enabled.
+When building KiCad with wxPython support, make sure the version of the wxWidgets library and
+the version of wxPython installed on your system are the same. Mismatched versions have been
+known to cause runtime issues.
+
+# KiCad Build Configuration Options # {#build_opts}
+
+KiCad has many build options that can be configured to build different options depending on
+the availability of support for each option on a given platform. This section documents
+these options and their default values.
+
+## Case Sensitivity ## {#case_sensitive_opt}
+
+The KICAD_KEEPCASE option allows you to build KiCad so that the string matching for component
+names is case sensitive of case insensitive. This option is enabled by default.
+
+## Advanced Graphics Context ## {#graphics_context_opt}
+
+The USE_WX_GRAPHICS_CONTEXT option replaces wxDC with wxGraphicsContext for graphics rendering.
+This option is disabled by default. Warning: the is experimental and has not been maintained
+so use at your own risk.
+
+## Graphics Context Overlay ## {#overlay_opt}
+
+The USE_WX_OVERLAY option is used to enable the optional wxOverlay class for graphics rendering
+on OSX. This is enabled on OSX by default and disabled on all other platforms.
+
+## Scripting Support ## {#scripting_opt}
+
+The KICAD_SCRIPTING option is used to enable building the Python scripting support into Pcbnew.
+This options is disabled by default.
+
+## Scripting Module Support ## {#scripting_mod_opt}
+
+The KICAD_SCRIPTING_MODULES option is used to enable building and installing the Python modules
+supplied by KiCad. This option is disabled by default.
+
+## wxPython Scripting Support ## {#wxpython_opt}
+
+The KICAD_SCRIPTING_WXPYTHON option is used to enable building the wxPython interface into
+Pcbnew including the wxPython console. This option is disabled by default.
+
+## Github Plugin ## {#github_opt}
+
+The BUILD_GITHUB_PLUGIN option is used to control if the Github plugin is built. This option is
+enabled by default.
+
+## Build with Static Libraries ## {#static_lib_opt}
+
+The KICAD_BUILD_STATIC option is used to build KiCad with static libraries. This option is
+used for OSX builds only and is disabled by default.
+
+## Build with Dynamic Libraries ## {#dynamic_lib_opt}
+
+The KICAD_BUILD_DYNAMIC option is used to build KiCad with dynamic libraries. This option is
+used for OSX only and is disabled by default.
+
+## Build with System Boost ## {#boost_opt}
+
+The KICAD_SKIP_BOOST option allow you to use the Boost libraries installed on your system to
+be used instead of downloading Boost 1.54 and building a custom version specifically for
+building KiCad. It is high recommended that you enable this option on Linux and use Boost
+version 1.56 or greater. On other platforms you mileage may vary. This option is disabled
+by default.
+
+## OSX Dependency Builder ## {#osx_deps_opt}
+
+The USE_OSX_DEPS_BUILDER option forces the build configuration to download and build the
+required dependencies to build KiCad on OSX. This option is not longer maintained and most
+likely is broken. Use it at your own peril.
+
+## Setting the Build Version and Repository Name ## {#build_version_opt}
+
+The KiCad version string is defined by the three CMake variables KICAD_VERSION, KICAD_BRANCH_NAME,
+and KICAD_VERSION_EXTRA. Variables KICAD_BRANCH_NAME and KICAD_VERSION_EXTRA are defined as empty
+strings and can be set at configuration. Unless the source branch is a stable release archive,
+KICAD_VERSION is set to "no-vcs-found". If an optional variable is not define, it is not appended
+to the full version string. If an optional variable is defined it is appended along with a leading
+'-' to the full version string as follows:
+
+ KICAD_VERSION[-KICAD_BRANCH_NAME][-KICAD_VERSION_EXTRA]
+
+When the version string is set to "no-vcs-found", the build script automatically creates the
+version string information from the [git][] repository information as follows:
+
+
+ (2016-08-26 revision 67230ac)-master
+ | | |
+ | | branch name, "HEAD" if not on a branch,
+ | | or "unknown" if no .git present
+ | |
+ | abbreviated commit hash, or no-git if no .git
+ | present
+ |
+ date of commit, or date of build if no .git present
+
+# Getting the KiCad Source Code ## {#getting_src}
+
+There are several ways to get the KiCad source. If you want to build the stable version you
+can down load the source archive from the [KiCad Launchpad][] developers page. Use tar or some
+other archive program to extract the source on your system. If you are using tar, use the
+following command:
+
+ tar -xzf kicad_src_archive.tar.gz
+
+If you are contributing directly to the KiCad project on Launchpad, you can create a local
+branch on your machine by using the following command:
+
+ bzr branch lp:repo_to_branch
+
+If you prefer to use [GIT][] as you version control system, you can clone the KiCad mirror on
+Github using the following command:
+
+ git clone https://github.com/KiCad/kicad-source-mirror
+
+Here is a list of source links:
+
+Stable release archive: https://launchpad.net/kicad/4.0/4.0.0-rc1/+download/kicad-4.0.0-rc1.tar.xz
+
+Development branch: https://code.launchpad.net/~kicad-product-committers/kicad/product
+
+Github mirror: https://github.com/KiCad/kicad-source-mirror
+
+# Building KiCad on Linux # {#build_linux}
+
+To perform a full build on Linux, run the following commands:
+
+ cd kicad_source_tree
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make
+ sudo make install
+
+If the CMake configuration fails, determine the missing dependencies and install them on your
+system. By default, CMake sets the install path on Linux to /usr/local. Use the
+CMAKE_INSTALL_PREFIX option to specify a different install path.
+
+# Building KiCad on Windows # {#build_windows}
+
+The preferred Windows build environment is [MSYS2][]. The [MinGW][] build environment is still
+supported but it is not recommended because the developer is responsible for building *all* of
+the dependencies from source which is a huge and frustrating undertaking. The [MSYS2][] project
+provides packages for all of the require dependencies to build KiCad. To setup the [MSYS2][]
+build environment, depending on your system download and run either the [MSYS2 32-bit Installer][]
+or the [MSYS2 64-bit Installer][]. After the installer is finished, update to the latest
+package versions by running the `msys2_shell.bat` file located in the MSYS2 install path and
+running the command `pacman -Syu`. If the msys2-runtime package is updated, close the shell
+and run `msys2_shell.bat`.
+
+## MSYS2 the Easy Way ## {#msys2_easy}
+
+The easiest way to build KiCad using the [MSYS2][] build environment is to use the KiCad
+[PKGBUILD][] provided by the MSYS2 project to build package using the head of the KiCad
+development branch. To build the KiCad package, run the `msys2_shell.bat` file located in the
+MSYS2 install path and run the following commands:
+
+ pacman -S git
+ mkdir src
+ cd src
+ git clone https://github.com/Alexpux/MINGW-packages
+ cd MinGW-packages/mingw-w64-kicad-git
+ makepkg-mingw -is
+
+This will download and install all of the build dependencies, clone the KiCad source mirror
+from Github, create both 32-bit and 64-bit KiCad packages depending on your MSYS setup, and
+install the newly built KiCad packages. Please note that this build process takes a very
+long time to build even on a fast system.
+
+## MSYS2 the Hard Way ## {#msys2_hard}
+
+If you do not want to create KiCad packages and prefer the traditional `make && make install`
+method of building KiCad, your task is significantly more involved. For 64 bit builds run
+the `mingw64_shell.bat` file located in the MSYS2 install path. At the command prompt run the
+the following commands:
+
+ pacman -S mingw-w64-x86_64-cmake \
+ mingw-w64-x86_64-doxygen \
+ mingw-w64-x86_64-gcc \
+ mingw-w64-x86_64-python2 \
+ mingw-w64-x86_64-pkg-config \
+ mingw-w64-x86_64-swig \
+ mingw-w64-x86_64-boost \
+ mingw-w64-x86_64-cairo \
+ mingw-w64-x86_64-glew \
+ mingw-w64-x86_64-curl \
+ mingw-w64-x86_64-wxPython \
+ mingw-w64-x86_64-wxWidgets
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -G "MSYS Makefiles" \
+ -DCMAKE_PREFIX_PATH=/mingw64 \
+ -DCMAKE_INSTALL_PREFIX=/mingw64 \
+ -DDEFAULT_INSTALL_PATH=/mingw64 \
+ -DKICAD_SKIP_BOOST=ON \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make install
+
+# Building KiCad on OSX # {#build_osx}
+
+Building on OSX is challenging at best. It typically requires building dependency libraries
+that require patching in order to work correctly. For more information on the complexities of
+building KiCad on OSX, see the [OSX bundle build scripts][].
+
+Download the wxPython source and build using the following commands:
+
+ cd path-to-wxwidgets-src
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx.patch
+ patch -p0 < path-to-kicad-src/wxwidgets-3.0.0_macosx_bug_15908.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_soname.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.2_macosx_yosemite.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_scrolledwindow.patch
+ mkdir build
+ cd build
+ export MAC_OS_X_VERSION_MIN_REQUIRED=10.7
+ ../configure \
+ --prefix=`pwd`/../wx-bin \
+ --with-opengl \
+ --enable-aui \
+ --enable-utf8 \
+ --enable-html \
+ --enable-stl \
+ --with-libjpeg=builtin \
+ --with-libpng=builtin \
+ --with-regex=builtin \
+ --with-libtiff=builtin \
+ --with-zlib=builtin \
+ --with-expat=builtin \
+ --without-liblzma \
+ --with-macosx-version-min=10.7 \
+ --enable-universal-binary=i386,x86_64 \
+ CC=clang \
+ CXX=clang++
+
+Build KiCad using the following commands:
+
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 \
+ -DwxWidgets_CONFIG_EXECUTABLE=path-to-wx-install/bin/wx-config \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ -DPYTHON_EXECUTABLE=path-to-python-exe/python \
+ -DPYTHON_SITE_PACKAGE_PATH=wx/wx-bin/lib/python2.7/site-packages \
+ -DCMAKE_INSTALL_PREFIX=../bin \
+ -DCMAKE_BUILD_TYPE=Release \
+ ../../
+ make
+ make install
+
+# Known Issues # {#known_issues}
+
+There are some known issues that are platform and/or dependencie specific. This section provides
+a list of the currently known issues when building KiCad.
+
+## Boost C++ Library Issues ## {#boost_issue}
+
+As of version 5 of [GNU GCC][], using the default configuration of downloading, patching, and
+building of Boost 1.54 will cause the KiCad build to fail. Therefore a newer version of Boost
+must be used to build KiCad. If your system has Boost 1.56 or greater installed, you job is
+straight forward. Configure your KiCad build using `-DKICAD_SKIP_BOOST=ON`. If your system
+does not have Boost 1.56 or greater installed, you will have to download and [build Boost][]
+from source. If you are building Boost on windows using [MinGW][] you will have to apply the
+Boost patches in the KiCad source [patch folder][].
+
+
+[download]: http://kicad-pcb.org/download/
+[KiCad website]: http://kicad-pcb.org/
+[KiCad Launchpad]: https://launchpad.net/kicad
+[GNU GCC]: https://gcc.gnu.org/
+[Clang]: http://clang.llvm.org/
+[CMake]: https://cmake.org/
+[Launchpad]: https://code.launchpad.net/~kicad-product-committers/kicad/product
+[Bazaar]: http://bazaar.canonical.com/en/
+[GIT]: https://git-scm.com/
+[Github]: https://github.com/KiCad/kicad-source-mirror
+[Doxygen]: http://www.stack.nl/~dimitri/doxygen/
+[mailing list]: https://launchpad.net/~kicad-developers
+[SWIG]: http://www.swig.org/
+[wxWidgets]: http://wxwidgets.org/
+[patches folder]: http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/patches/
+[Boost]: http://www.boost.org/
+[GLEW]: http://glew.sourceforge.net/
+[GLUT]: https://www.opengl.org/resources/libraries/glut/
+[Cairo]: http://cairographics.org/
+[Python]: https://www.python.org/
+[wxPython]: http://wxpython.org/
+[MSYS2]: http://msys2.github.io/
+[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20150916.exe
+[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20150916.exe
+[PKGBUILD]: https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-kicad-git/PKGBUILD
+[OSX bundle build scripts]:http://bazaar.launchpad.net/~adamwolf/+junk/kicad-mac-packaging/files
+[MinGW]: http://mingw.org/
+[build Boost]: http://www.boost.org/doc/libs/1_59_0/more/getting_started/index.html