Skip to content

Commit

Permalink
Add build system for compiling under MSVC x64
Browse files Browse the repository at this point in the history
This patch adds the modifications needed to compile under x64 under
Windows:
- created a new macro for testing if we are compiling under x64.
this will define the linker flag: "/MACHINE:X64" as per documentation
(https://msdn.microsoft.com/en-us/library/9yb4317s.aspx).

- added x64 pthread libraries under the pthread defines

- add documentation on how to build under x64

Signed-off-by: Alin Gabriel Serdean <[email protected]>
Signed-off-by: Gurucharan Shetty <[email protected]>
  • Loading branch information
Alin Serdean authored and shettyg committed Sep 29, 2015
1 parent 34e1211 commit 1cb3649
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 6 deletions.
15 changes: 12 additions & 3 deletions INSTALL.Windows.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,20 @@ binaries. In addition to that, if you want to compile the kernel module you
will also need to install Windows Driver Kit (WDK) 8.1 Update.

It is important to get the Visual Studio related environment variables and to
have the $PATH inside the bash to point to the proper compiler and linker. One
easy way to achieve this is to get into the "Developer Command prompt for visual
studio" and through it enter into the bash shell available from msys by typing
have the $PATH inside the bash to point to the proper compiler and linker. One
easy way to achieve this for VS2013 is to get into the "VS2013 x86 Native
Tools Command Prompt" (in a default installation of Visual Studio 2013 this can
be found under the following location:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts)
and through it enter into the bash shell available from msys by typing
'bash --login'.

There is support for generating 64 bit binaries too. To compile under x64,
open the "VS2013 x64 Native Tools Command Prompt" (if your current running OS
is 64 bit) or "VS2013 x64 Cross Tools Command Prompt" (if your current running
OS is not 64 bit) instead of opening its x86 variant. This will point the
compiler and the linker to their 64 bit equivalent.

If after the above step, a 'which link' inside MSYS's bash says,
"/bin/link.exe", rename /bin/link.exe to something else so that the
Visual studio's linker is used. You should also see a 'which sort' report
Expand Down
1 change: 1 addition & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ AM_CPPFLAGS += -I $(top_srcdir)/datapath-windows/include
AM_CPPFLAGS += $(PTHREAD_INCLUDES)
AM_CPPFLAGS += $(MSVC_CFLAGS)
AM_LDFLAGS += $(PTHREAD_LDFLAGS)
AM_LDFLAGS += $(MSVC64_LDFLAGS)
endif

AM_CPPFLAGS += -I $(top_srcdir)/include
Expand Down
1 change: 1 addition & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ AC_SEARCH_LIBS([pthread_create], [pthread])
AC_FUNC_STRERROR_R

OVS_CHECK_ESX
OVS_CHECK_WIN64
OVS_CHECK_WIN32
OVS_CHECK_VISUAL_STUDIO_DDK
OVS_CHECK_COVERAGE
Expand Down
33 changes: 31 additions & 2 deletions m4/openvswitch.m4
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,22 @@ AC_DEFUN([OVS_CHECK_ESX],
AC_DEFINE([ESX], [1], [Define to 1 if building on ESX.])
fi])

dnl Checks for MSVC x64 compiler.
AC_DEFUN([OVS_CHECK_WIN64],
[AC_CACHE_CHECK(
[for MSVC x64 compiler],
[cl_cv_x64],
[dnl "cl" writes x64 output to stdin:
if (cl) 2>&1 | grep 'x64' >/dev/null 2>&1; then
cl_cv_x64=yes
MSVC64_LDFLAGS=" /MACHINE:X64 "
else
cl_cv_x64=no
MSVC64_LDFLAGS=""
fi])
AC_SUBST([MSVC64_LDFLAGS])
])

dnl Checks for WINDOWS.
AC_DEFUN([OVS_CHECK_WIN32],
[AC_CHECK_HEADER([windows.h],
Expand All @@ -86,11 +102,24 @@ AC_DEFUN([OVS_CHECK_WIN32],
AC_MSG_ERROR([Invalid --with-pthread value])
;;
*)
PTHREAD_WIN32_DIR=$withval/lib/x86
PTHREAD_WIN32_DIR_DLL=/${withval/:/}/dll/x86
if (cl) 2>&1 | grep 'x64' >/dev/null 2>&1; then
cl_cv_x64=yes
else
cl_cv_x64=no
fi
if test "$cl_cv_x64" = yes; then
PTHREAD_WIN32_DIR=$withval/lib/x64
PTHREAD_WIN32_DIR_DLL=/${withval/:/}/dll/x64
PTHREAD_WIN32_DIR_DLL_WIN_FORM=$withval/dll/x64
else
PTHREAD_WIN32_DIR=$withval/lib/x86
PTHREAD_WIN32_DIR_DLL=/${withval/:/}/dll/x86
PTHREAD_WIN32_DIR_DLL_WIN_FORM=$withval/dll/x86
fi
PTHREAD_INCLUDES=-I$withval/include
PTHREAD_LDFLAGS=-L$PTHREAD_WIN32_DIR
PTHREAD_LIBS="-lpthreadVC2"
AC_SUBST([PTHREAD_WIN32_DIR_DLL_WIN_FORM])
AC_SUBST([PTHREAD_WIN32_DIR_DLL])
AC_SUBST([PTHREAD_INCLUDES])
AC_SUBST([PTHREAD_LDFLAGS])
Expand Down
2 changes: 1 addition & 1 deletion windows/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ windows_installer: all
cp -f $(top_srcdir)/ovsdb/ovsdb-client.pdb windows/ovs-windows-installer/Symbols/
cp -f $(top_srcdir)/ovsdb/ovsdb-tool.pdb windows/ovs-windows-installer/Symbols/
#Third party files needed by the installer
cp -f $(PTHREAD_TEMP_DIR)/../../dll/x86/*.dll windows/ovs-windows-installer/Binaries/
cp -f $(PTHREAD_WIN32_DIR_DLL_WIN_FORM)/*.dll windows/ovs-windows-installer/Binaries/
cp -f "/c/Program Files (x86)/Common Files/Merge Modules/Microsoft_VC120_CRT_x86.msm" windows/ovs-windows-installer/Redist/Microsoft_VC120_CRT_x86.msm
#Forwarding extension files needed for the installer
cp -f $(top_srcdir)/datapath-windows/x64/Win8$(VSTUDIO_CONFIG)/package/ovsext.cat windows/ovs-windows-installer/Driver/Win8/ovsext.cat
Expand Down

0 comments on commit 1cb3649

Please sign in to comment.