wiki:BuildingUsingGenericBuildsystem

Version 17 (modified by Samuli Seppänen, 12 years ago) (diff)

--

Introduction

The original contents of this article were adapted from Alon Bar-Lev's emails (the buildsystem's original author).

Generic build method

This is the most generic method: it can cross compile OpenVPN using any toolchain to any environment. Make sure you have installed the correct tool chain, which is mingw-w64 before you start. A few notes before you start:

  • Windows users: configure Git not to translate LF to CR/LF; it's probably best to use Cygwin's Git due to this.
  • Cygwin users: Refer README for required packages.
  • You probably want to customize the build, look at build.vars file.

First checkout the buildsystem code:

$ git clone https://github.com/alonbl/openvpn-build.git
$ cd openvpn-build/generic

To build a native binary:

$ IMAGEROOT=`pwd`/image-native ./build

To build for Windows 32bit on Linux 64bit:

$ IMAGEROOT=`pwd`/image-win32 CHOST=i686-w64-mingw32 \
    CBUILD=x86_64-pc-linux-gnu ./build

To build for Windows 64bit on Linux 64bit:

$ IMAGEROOT=`pwd`/image-win64 CHOST=x86_64-w64-mingw32 \
    CBUILD=x86_64-pc-linux-gnu ./build

To build for Arm on Linux 64bit:

$ IMAGEROOT=`pwd`/image-arm CHOST=arm-unknown-linux-gnueabi \
    CBUILD=x86_64-pc-linux-gnu ./build

This fetches all the dependencies, builds them and builds OpenVPN.

NOTE: The sources are cached in sources directory, a custom tarball can be put in sources directory in order to avoid download remote. The cached tarball will be used even if it is in different version.

To build only dependencies (helpful for developers):

$ DO_ONLY_DEPS=1 IMAGEROOT=`pwd`/deps-win32 CHOST=i686-w64-mingw32 \
    CBUILD=x86_64-pc-linux-gnu ./build

Most probably the following configuration is required for OpenVPN:

$ DEP=location of the dependencies
$ ./configure host=... \
    CFLAGS="-I$DEP/include" LDFLAGS="-L$DEB/lib" \
    --enable-lzo --enable-pkcs11 \
    PKCS11_HELPER_CFLAGS=" " PKCS11_HELPER_LIBS="-lpkcs11-helper"

MSVC build method

MSVC build was written with least dependencies in mind. You'll need only Perl and Visual Studio 2010.

First clone the openvpn-build repository, e.g. using Git Bash:

$ git clone https://github.com/alonbl/openvpn-build.git

Then at command prompt:

> cd openvpn-build\msvc
> build

This fetches all the dependencies, builds them and builds OpenVPN.

To build only dependencies (helpful for developers):

> set DO_ONLY_DEPS=true
> set TARGET=%cd%\deps
> build

At OpenVPN source root, create a file msvc-env-local.bat with:

set OPENVPN_DEPROOT=location of the dependencies

If you want, you can customize the location of dependencies by creating a new file, build-env-local.bat which sets the variables you need, e.g.

set OPENVPN_DEPROOT=c:\Users\JohnDoe\openvpn-build\build-deps
set OPENSSL_HOME=%OPENVPN_DEPROOT%\openssl-1.0.0g
set LZO_HOME=%OPENVPN_DEPROOT%\lzo-2.06
set PKCS11H_HOME=%OPENVPN_DEPROOT%\pkcs11-helper-1.10
set TAP_WINDOWS_HOME=%OPENVPN_DEPROOT%\tap-windows-9.9

This file gets sourced by build-env.bat. You can also switch from fetching an OpenVPN tarball by adding something like this:

set OPENVPN_GIT=git://openvpn.git.sourceforge.net/gitroot/openvpn/openvpn.git
set OPENVPN_SOURCE=git
set OPENVPN_BRANCH=master

You can also launch Visual Studio with

> msvc-dev

Creating a NSIS installer

You can use the buildsystem to create the NSIS installer for Windows, it uses the generic build system then create the installer, and osslsigncode if you would like to sign binaries.

NSIS must be available on system. If installed not in path or standard location set MAKENSIS environment variable. Same goes for OSSLSIGNCODE.

The process is as follows:

$ git clone https://github.com/alonbl/openvpn-build.git
$ cd openvpn-build/windows-nsis
$ ./build-complete

Refer to ./build-complete --help for more options.

NOTE: If makensis is not in path, set MAKENSIS environment to point to it.

NOTE: To make sure fresh tarballs are used, empty ../generic/sources directory before building.

TAP-Windows

Required software: Recent Windows DDK, NSIS.

First clone the openvpn-build repository, e.g. using Git Bash:

$ git clone https://github.com/alonbl/tap-windows

Then build:

> configure
> build

Customization can be done using config-local.m4 file which overrides variables, and environment variables which override auto detection code, for example DDK to specify DDK location, see configure --help.

External links

Alon's Git repositories

Installers and files

Attachments (1)

Download all attachments as: .zip