Building on Windows - lanl/Draco GitHub Wiki
Introduction
- These are not meant to be instructions, but rather working notes while this process is standardized.
- I have not worked with the 64-bit flavor of these instructions. Assume everything is 32-bit.
Install required software and Third Party Libraries (TPLs)
Optional tools
Recommended Directory Layout
c:\work\vendors64
- Unzip or install Random123 and GSL here.
c:\work\draco
- This is the git controlled source directory
C:\work\vs2017_x64\d
- This is the build directory
C:\work\vs2017_x64\install
- This is the install location.
Adding Fortran Support
- Visual Studio does not provide native support for Fortran.
- The Draco build system has a modified version of
CMakeAddFortranSubdirectory
that allows the Fortran portions of the code to be built with gfortran
provided by msys2/mingw32.
- To enable Fortran support
- Install msys2/mingw32 and update the installation:
- start the msys64 shell
- Update the installation:
pacman -Syuu
(repeat as needed; might need to exit the shell and restart it.)
- Install mingw32:
pacman -S mingw-w64-i686-gcc
- Install mingw64:
pacman -S mingw-w64-x86_64-gcc
- Search for other packages:
pacman -Ss fortran
==> mingw-w64-i686-gcc-fortran
- Install 32-bit gfortran:
pacman -S mingw-w64-i686-gcc-fortran
- For the next step, you also need
gendef
: pacman -S mingw-w64-i686-tools
- To allow Microsoft MPI to work with mingw32's gfortran requires two extra steps:
- We must convert the
.dll
into a .a
:
- Start a mingw32 shell
cd /i/work/vendors
gendef /c/windows/system32/msmpi.dll
==> msmpi.def
dlltool -d msmpi.def -l libmsmpi.a -D msmpi.dll
==> libmsmpi.a
cp libmsmpi.a /c/program files/microsoft mpi/bin/.
rm msmpi.def
- We must modify
mpif.h
- Edit
C:\Program Files (x86)\Microsoft SDKs\MPI\Include\mpif.h
- Replace the single occurrence of
INT_PTR_KIND()
with 8
.
- CMakeAddFortranSubdirectory issues.
- There appears to be an issue with Visual Studio 2017 Community Edition. I posted the following to [email protected]:
I use the CMakeAddFortranSubdirectory feature in one of my projects. This appears to be broken under
Visual Studio 2017 Community Edition RC because CMake\share\cmake-3.8\Modules\Platform\GNUtoMS_lib.bat.in
generates a batch file that contains:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
and this batch function changes the current working directory to %USERPROFILE%/Source (unlike earlier
versions). Has anyone else seen this?
I have fixed the issue by replacing the cmake provided GNUtoMS_lib.bat.in with
@echo off
set CWD=%CD%
call "@CMAKE_GNUtoMS_BAT@"
cd /d %CWD%
lib /machine:"@CMAKE_GNUtoMS_ARCH@" %*
I'm not sure if CMake needs to make this change more permanent or if this is a bug in VS2017.
Setup the developer environment
- Create
c:\work\vendors\setup.bat
that contains something like this:
@echo off
set VENDOR_DIR=c:\work\vendors
set GSL_ROOT_DIR=%VENDOR_DIR%\gsl-1.16
set RANDOM123_INC_DIR=%VENDOR_DIR%\Random123-1.08\include
rem Mingw-w64 (gfortran)
set PATH=%PATH%;C:\msys64\mingw32\bin
rem CMake
set PATH=%PATH%;C:\Program Files\CMake\bin
rem Help cmake find vcvars32.bat
set PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
Clone draco
- Use Tortoise or Git for Windows to clone the Draco repository.
- Optional: configure your ssh keys and add the upstream repository.
Configure, Build and Test
- Start the Visual Studio Command Prompt. There should be a shortcut named
x86 Native Tools Command Prompt for VS 2017 RC
.
cd c:\work\vendors
setup.bat
- Start cmake:
cmake-gui
- Sources:
c:\work\draco
- Binaries:
c:\work\vs2017\d
- Configure
- Generate
- Open Project
- Right click on Solution Explorer --> CMakePredefinedTargets --> All_Build and select Build
- Tests can be run from the Command Prompt for Visual Studio:
ctest -C Debug -j 4