How to build x64 libgit2 and LibGit2Sharp - libgit2/libgit2sharp GitHub Wiki
How to build x64 libgit2 and LibGit2Sharp on Windows
Also see: https://github.com/libgit2/libgit2/blob/master/README.md
Prerequisites:
- Visual Studio 2010 SP1 with VC++
- CMake 2.8.5
- git version 1.7.5.1 (cygwin 1.7.9)
- 64-Bit Visual C++ Toolset (also available as part of the Windows SDK)
Step 1: Fetch the source code
> git clone git://github.com/libgit2/libgit2.git
Step 2: Set up the building environment
Start the Visual Studio 2010 x64 Win64 Command Prompt.
Add the path to the CMake binaries to the PATH environment variable:
> set PATH=c:\path\to\your\cmake2.8\bin;%PATH%
Step 3: Modify CMakeLists.txt
Currently, building libgit2 against VS2010 x64 raises lots of warnings which makes the build fail. Indeed, libgit2 is not LLP64 compliant (see this Wikipedia article for further information about specific C language models).
An issue has been raised in order to deal with this topic. Meanwhile, as a workaround, one can change /WX
compiler option into /WX-
in order to instruct the linker not to consider warnings as errors.
$ git diff CMakeLists.txt
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7655e0b..e2cf729 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,7 +55,7 @@ IF (MSVC)
# Not using __stdcall with the CRT causes problems
OPTION (STDCALL "Buildl libgit2 with the __stdcall convention" ON)
- SET(CMAKE_C_FLAGS "/W4 /nologo /Zi ${CMAKE_C_FLAGS}")
+ SET(CMAKE_C_FLAGS "/W4 /wd4244 /wd4267 /nologo /Zi ${CMAKE_C_FLAGS}")
IF (STDCALL)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz")
ENDIF ()
Step 4: Generate the Visual Studio Project
> cd libgit2
> mkdir buildx64
> cd buildx64
> cmake -G "Visual Studio 10 Win64" ..
-- Check for working C compiler using: Visual Studio 10 Win64
-- Check for working C compiler using: Visual Studio 10 Win64 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: path/to/your/libgit2/buildx64
Step 5: Build libgit2
> cmake --build .
Warnings C4244 and C4267 will be raised... and ignored thanks to the patching/hacking of the CMakeLists.txt.
Step 6: Build LibGit2Sharp
Change project target from x86 to AnyCPU
$ git diff LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
diff --git a/LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj b/LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
index ddf10df..8ed5884 100644
--- a/LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
+++ b/LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
@@ -21,7 +21,7 @@
<DefineConstants>TRACE;DEBUG;NET35</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
- <PlatformTarget>x86</PlatformTarget>
+ <PlatformTarget>AnyCPU</PlatformTarget>
<DocumentationFile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
$ git diff LibGit2Sharp/LibGit2Sharp.csproj
diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj
index e38804e..060bd99 100644
--- a/LibGit2Sharp/LibGit2Sharp.csproj
+++ b/LibGit2Sharp/LibGit2Sharp.csproj
@@ -24,7 +24,7 @@
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <PlatformTarget>x86</PlatformTarget>
+ <PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Step 7: Run LibGit2Sharp.Test
415 passed, 0 failed, 1 skipped