Difference between revisions of "Building and hacking LDC on Windows using MSVC"

From D Wiki
Jump to: navigation, search
m (Running the dmd-testsuite tests)
m (Required software)
(35 intermediate revisions by 3 users not shown)
Line 1: Line 1:
LDC on Windows is work in progress. This page documents how to build, test and hack LDC2 on Windows x64.
+
Windows MSVC x86/x64 are now first class targets for LDC. This page documents how to build, test and hack LDC2 on Windows.
  
== Pre-built LDC ==
+
== LDC binaries ==
  
If you just want to download the very latest pre-built LDC for Win64, head over to [[Latest pre-built LDC for Win64]].
+
If you just want to download the very latest LDC binaries, head over to [[Latest LDC binaries for Windows]].
  
 
== Advice ==
 
== Advice ==
Line 12: Line 12:
 
=== Required software ===
 
=== Required software ===
  
* Windows x64, of course!
+
* Windows, of course!
* Visual Studio (e.g. [https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx VS Community 2015])
+
* Visual Studio ≥ 2013, e.g. [https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx VS Community 2015]. VS 2015 is greatly encouraged due to improved C99 support. Make sure to install the C++ toolchain.
* a D compiler (currently only [http://dlang.org/download.html#dmd DMD] works to build LDC on Windows. LDC 0.17 is the last version that does not need a D compiler to build.)
+
* A D compiler (the <tt>ltsmaster</tt> branch does not need a D compiler to build).
* [http://git-scm.com/download/win git 1.8+] (I use [https://code.google.com/r/chen2008cj-gitclone/source/browse/PortableGit-1.8.1.2-preview20130201.7z PortableGit])
+
* [https://git-scm.com/download/win git 2.0+] (I use PortableGit)
 
* [http://python.org/download/ Python 2.7.x or Python 3.3.x] (I use [http://portablepython.com/wiki/Download/ Portable Python])
 
* [http://python.org/download/ Python 2.7.x or Python 3.3.x] (I use [http://portablepython.com/wiki/Download/ Portable Python])
 
* [http://www.cmake.org/download/ CMake 2.8+]
 
* [http://www.cmake.org/download/ CMake 2.8+]
 
* [https://github.com/ninja-build/ninja/releases Ninja], a neat little and fast build system
 
* [https://github.com/ninja-build/ninja/releases Ninja], a neat little and fast build system
 
* [http://wiki.dlang.org/Curl_on_Windows Curl library] (just use a precompiled one)
 
* [http://wiki.dlang.org/Curl_on_Windows Curl library] (just use a precompiled one)
** Put 64-bit <tt>curl.lib</tt> in a LIB/LIBPATH directory (e.g., <tt>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64</tt>)...
+
** Put the 64/32-bit <tt>libcurl.dll</tt> in a PATH directory (e.g., <tt>C:\LDC\LDC-x64\bin</tt>).
** ... and 64-bit <tt>libcurl.dll</tt> in a PATH directory (e.g., <tt>C:\LDC\LDC-x64\bin</tt>).
 
  
 
=== Shell environment ===
 
=== Shell environment ===
Line 31: Line 30:
 
<pre>
 
<pre>
 
@echo off
 
@echo off
set PATH=%~dp0LDC-x64\bin;%~dp0LLVM-x64\bin;%~dp0Tools\Ninja 1.6.0;%~dp0Tools\make-3.81\bin;%~dp0Tools\PortableGit-1.8.1.2-preview20130201\bin;%~dp0Tools\cmake-3.3.0-win32-x86\bin;%~dp0Tools\Portable Python 2.7.5.1\App;%PATH%
+
set PATH=%~dp0LDC-x64\bin;%~dp0LLVM-x64\bin;%~dp0Tools\Ninja 1.6.0;%~dp0Tools\PortableGit-2.9.3.2-64-bit\usr\bin;%~dp0Tools\PortableGit-2.9.3.2-64-bit\bin;%~dp0Tools\make-4.2.1;%~dp0Tools\cmake-3.3.0-win32-x86\bin;%~dp0Tools\Portable Python 2.7.5.1\App;%PATH%
 +
set DMD=%~dp0dmd2\windows\bin\dmd.exe
 
if not exist "%TERM%" set TERM=msys
 
if not exist "%TERM%" set TERM=msys
 
start /belownormal %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
 
start /belownormal %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
 
</pre>
 
</pre>
 +
 +
Use <tt>x86</tt> instead of <tt>amd64</tt> as argument to <tt>vcvarsall.bat</tt> if you want to build a 32-bit LDC.
  
 
Open a shell by executing the batch file.
 
Open a shell by executing the batch file.
Line 50: Line 52:
 
<ul>
 
<ul>
 
<li>Get the source: <tt>git clone http://llvm.org/git/llvm.git llvm</tt></li>
 
<li>Get the source: <tt>git clone http://llvm.org/git/llvm.git llvm</tt></li>
<li>Check out the LLVM 3.7 branch: <tt>git checkout release_37</tt></li>
+
<li>A post-3.8 version is currently required, so branch <tt>release_39</tt> (<tt>git checkout release_39</tt>) is currently recommended.</li>
 
<li>Create a build directory: <tt>md build-llvm-x64</tt></li>
 
<li>Create a build directory: <tt>md build-llvm-x64</tt></li>
 
<li>Change into it: <tt>cd build-llvm-x64</tt></li>
 
<li>Change into it: <tt>cd build-llvm-x64</tt></li>
 
<li><p>Use a command like this (in one line) to create the Ninja build files:</p>
 
<li><p>Use a command like this (in one line) to create the Ninja build files:</p>
<pre>cmake -G Ninja -DCMAKE_INSTALL_PREFIX=&quot;C:\LDC\LLVM-x64&quot; -DCMAKE_BUILD_TYPE=&quot;RelWithDebInfo&quot;
+
<pre>cmake -G Ninja -DCMAKE_INSTALL_PREFIX=&quot;C:\LDC\LLVM-x64&quot; -DCMAKE_BUILD_TYPE=RelWithDebInfo
 
       -DPYTHON_EXECUTABLE=&quot;C:\LDC\Tools\Portable Python 2.7.5.1\App\python.exe&quot;
 
       -DPYTHON_EXECUTABLE=&quot;C:\LDC\Tools\Portable Python 2.7.5.1\App\python.exe&quot;
       -DLLVM_TARGETS_TO_BUILD=&quot;X86&quot; -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF
+
       -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF
       -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_APPEND_VC_REV=ON ..\llvm</pre>
+
       -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_APPEND_VC_REV=ON -DLLVM_INSTALL_UTILS=ON ..\llvm</pre>
 
<p>Omit the <tt>CMAKE_BUILD_TYPE</tt> definition to build a debug version. The [http://llvm.org/docs/CMake.html#id10 LLVM page on CMake] documents other variables you can change. The most common is to add more targets. E.g. to build a target for ARM you change the targets to build to <tt>-DLLVM_TARGETS_TO_BUILD=&quot;X86;ARM&quot;</tt>.</p></li>
 
<p>Omit the <tt>CMAKE_BUILD_TYPE</tt> definition to build a debug version. The [http://llvm.org/docs/CMake.html#id10 LLVM page on CMake] documents other variables you can change. The most common is to add more targets. E.g. to build a target for ARM you change the targets to build to <tt>-DLLVM_TARGETS_TO_BUILD=&quot;X86;ARM&quot;</tt>.</p></li>
 
<li>Build LLVM: <tt>ninja</tt></li>
 
<li>Build LLVM: <tt>ninja</tt></li>
Line 64: Line 66:
  
 
=== Build libconfig ===
 
=== Build libconfig ===
 +
 +
Latest confirmed working revision: <tt>7585cf6</tt>
 +
Feel free to try the latest version, if it fails you can fall back on this one.
  
 
* <tt>cd C:\LDC</tt>
 
* <tt>cd C:\LDC</tt>
 
* <tt>git clone https://github.com/hyperrealm/libconfig.git libconfig</tt>
 
* <tt>git clone https://github.com/hyperrealm/libconfig.git libconfig</tt>
 
* <tt>cd libconfig</tt>
 
* <tt>cd libconfig</tt>
 +
* <tt>git checkout 7585cf6</tt>
 
* Build the static C library: <tt>msbuild lib\libconfig.vcxproj /t:Rebuild /p:Configuration=ReleaseStatic /p:Platform=x64</tt>
 
* Build the static C library: <tt>msbuild lib\libconfig.vcxproj /t:Rebuild /p:Configuration=ReleaseStatic /p:Platform=x64</tt>
 
** Use configuration <tt>DebugStatic</tt> for debug LDC builds to ensure we link against the same runtime library
 
** Use configuration <tt>DebugStatic</tt> for debug LDC builds to ensure we link against the same runtime library
Line 80: Line 86:
 
<li><p>Set environment variable to which D compiler should be used to build LDC:</p> <tt>set DMD=c:\path\to\dmd\bin\dmd.exe</tt></li>
 
<li><p>Set environment variable to which D compiler should be used to build LDC:</p> <tt>set DMD=c:\path\to\dmd\bin\dmd.exe</tt></li>
 
<li><p>Use a command like this (in one line):</p>
 
<li><p>Use a command like this (in one line):</p>
<pre>cmake -G Ninja -DCMAKE_INSTALL_PREFIX=&quot;C:\LDC\LDC-x64&quot; -DCMAKE_BUILD_TYPE=&quot;RelWithDebInfo&quot;
+
<pre>cmake -G Ninja -DCMAKE_INSTALL_PREFIX=&quot;C:\LDC\LDC-x64&quot; -DCMAKE_BUILD_TYPE=RelWithDebInfo
 
       -DLLVM_ROOT_DIR=&quot;C:/LDC/LLVM-x64&quot; -DLIBCONFIG_INCLUDE_DIR=&quot;C:/LDC/libconfig/lib&quot;
 
       -DLLVM_ROOT_DIR=&quot;C:/LDC/LLVM-x64&quot; -DLIBCONFIG_INCLUDE_DIR=&quot;C:/LDC/libconfig/lib&quot;
 
       -DLIBCONFIG_LIBRARY=&quot;C:/LDC/libconfig/lib/x64/ReleaseStatic/libconfig.lib&quot; ..\ldc</pre>
 
       -DLIBCONFIG_LIBRARY=&quot;C:/LDC/libconfig/lib/x64/ReleaseStatic/libconfig.lib&quot; ..\ldc</pre>
Line 90: Line 96:
  
 
=== Running the LIT-based tests ===
 
=== Running the LIT-based tests ===
* You'll need to have [https://pypi.python.org/pypi/lit lit] installed for Python.
+
You'll need to have [https://pypi.python.org/pypi/lit lit] installed for Python. To run the tests from your build dir you can do:
 +
* <tt>cd C:\LDC\build-ldc-x64</tt>
 +
* <tt>ctest --output-on-failure -R lit-tests</tt>
 +
or you can go to the tests folder inside your build dir, and run the runlit.py script.
 
* <tt>cd C:\LDC\build-ldc-x64\tests</tt>
 
* <tt>cd C:\LDC\build-ldc-x64\tests</tt>
 
* <tt>python runlit.py -v .</tt>
 
* <tt>python runlit.py -v .</tt>
 +
The second way is convenient for running individual tests:
 +
* <tt>python runlit.py -v codegen/align.d</tt>
  
 
=== Running the runtime unit tests ===
 
=== Running the runtime unit tests ===
Line 98: Line 109:
 
* <tt>cd C:\LDC\build-ldc-x64</tt>
 
* <tt>cd C:\LDC\build-ldc-x64</tt>
 
* Build the unit tests: <tt>ninja druntime-ldc-unittest druntime-ldc-unittest-debug phobos2-ldc-unittest phobos2-ldc-unittest-debug</tt>
 
* Build the unit tests: <tt>ninja druntime-ldc-unittest druntime-ldc-unittest-debug phobos2-ldc-unittest phobos2-ldc-unittest-debug</tt>
* Run the tests, excluding the dmd-testsuite ones: <tt>ctest -E dmd-testsuite</tt>
+
* Run the tests, excluding dmd-testsuite and the LIT tests: <tt>ctest --output-on-failure -E &quot;dmd-testsuite|lit-tests&quot;</tt>
  
 
For troubleshooting be sure to examine the file <tt>C:\LDC\build-ldc-x64\Testing\Temporary\LastTest.log</tt>.
 
For troubleshooting be sure to examine the file <tt>C:\LDC\build-ldc-x64\Testing\Temporary\LastTest.log</tt>.
Line 104: Line 115:
 
=== Running the dmd-testsuite tests ===
 
=== Running the dmd-testsuite tests ===
  
dmd-testsuite requires a minimalistic GNU environment. bash is shipped with git. Additionally, we need GNU make and reasonably recent GNU diffutils and coreutils:
+
dmd-testsuite requires a minimalistic GNU environment. bash and a lot of GNU utilities are shipped with git. Additionally, we need [https://www.gnu.org/software/make/ GNU make].
  
* Download [http://gnuwin32.sourceforge.net/packages/make.htm GNU make for Windows]: [http://gnuwin32.sourceforge.net/downlinks/make-bin-zip.php binary] + [http://gnuwin32.sourceforge.net/downlinks/make-dep-zip.php dependencies]
+
* Either build GNU make from source yourself (they ship with a Visual Studio solution) or download [https://dl.dropboxusercontent.com/s/4y36f5ydgrk4p5g/make-4.2.1.7z?dl=0 this pre-built one (v4.2.1)].
* Download [http://gnuwin32.sourceforge.net/packages/diffutils.htm GNU diffutils for Windows]: [http://gnuwin32.sourceforge.net/downlinks/diffutils-bin-zip.php binaries] (same dependencies as make)
+
* Edit your shell batch script and add the directory containing your <tt>make.exe</tt> to your PATH, e.g., <tt>set PATH=%~dp0Tools\make;%PATH%</tt>
* Download [http://gnuwin32.sourceforge.net/packages/coreutils.htm GNU coreutils for Windows]: [http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php binaries] (same dependencies as make)
 
* Extract all 4 ZIP archives into a common root folder, e.g., <tt>C:\LDC\Tools\make</tt>
 
* Edit your shell batch script and add the bin subdirectory to your PATH, e.g., <tt>set PATH=%~dp0Tools\make\bin;%PATH%</tt>
 
** Make sure that directory preceeds the git bin directory in the PATH environment variable, so that the more recent executables in <tt>C:\LDC\Tools\make\bin</tt> are preferred over the (in my case, ancient) versions shipped with git.
 
 
* Spawn a new shell and make sure <tt>make --version</tt> prints its banner.
 
* Spawn a new shell and make sure <tt>make --version</tt> prints its banner.
  
Now that we have extended our LDC build environment, you'll probably need to [https://github.com/ldc-developers/dmd-testsuite/tree/windows patch] the <tt>dmd-testsuite</tt> repository.
+
Now that we have extended our LDC build environment, we're able to run the dmd-testsuite tests:
Then we're finally able to run the dmd-testsuite tests:
 
  
 
* <tt>cd C:\LDC\build-ldc-x64</tt>
 
* <tt>cd C:\LDC\build-ldc-x64</tt>
 +
* Set some environment variables for dmd-testsuite's Makefile:
 +
** <tt>OS</tt>
 +
*** 32-bit: <tt>set OS=Win_32</tt>
 +
*** 64-bit: <tt>set OS=Win_64</tt>
 +
** <tt>DMD_TESTSUITE_MAKE_ARGS</tt> enables parallel execution, e.g.
 +
*** <tt>set DMD_TESTSUITE_MAKE_ARGS=-j4</tt>
 
* <tt>ctest --verbose -R dmd-testsuite</tt>
 
* <tt>ctest --verbose -R dmd-testsuite</tt>
 
** Debug only: <tt>ctest --verbose -R dmd-testsuite-debug</tt>
 
** Debug only: <tt>ctest --verbose -R dmd-testsuite-debug</tt>
Line 128: Line 140:
 
* <tt>cd vs-ldc-x64</tt>
 
* <tt>cd vs-ldc-x64</tt>
 
* Use the cmake command from the Build LDC section, but use the VS generator instead of Ninja this time: <tt>cmake -G "Visual Studio 14 Win64" ...</tt>
 
* Use the cmake command from the Build LDC section, but use the VS generator instead of Ninja this time: <tt>cmake -G "Visual Studio 14 Win64" ...</tt>
* This creates the VS solution <tt>C:\LDC\vs-ldc-x64\ldc.sln</tt>.
 
  
 +
This creates the VS 2015 solution <tt>C:\LDC\vs-ldc-x64\ldc.sln</tt>.
 
A Visual Studio solution for LLVM can be created the same way.
 
A Visual Studio solution for LLVM can be created the same way.
 
== Known bugs/limitations ==
 
 
* Structured Exception Handling is only available for LLVM 3.7. Support in <tt>ldc.eh.win64</tt> has still alpha quality and is known to crash your application under certain circumstances. LLVM is getting [http://llvm.org/docs/ExceptionHandling.html#exception-handling-using-the-windows-runtime native support for MSVCRT exceptions], so we'll wait for that.
 
* Visual Studio 2015 is greatly encouraged due to improved C99 support.
 
* State as of September 26th 2015: [https://github.com/ldc-developers/ldc/issues/1103 4 issues left in runtime unittests and dmd-testsuite]
 
  
 
== Example ==
 
== Example ==
Line 153: Line 159:
 
<pre>
 
<pre>
 
ldc2 -c hello.d
 
ldc2 -c hello.d
link hello2.obj phobos-ldc.lib shell32.lib
+
ldc2 hello.obj
 
</pre>
 
</pre>
  
 
or simply with: <tt>ldc2 hello.d</tt>
 
or simply with: <tt>ldc2 hello.d</tt>
 
The resulting <tt>hello.exe</tt> produces the expected output.
 
  
  

Revision as of 18:56, 4 September 2016

Windows MSVC x86/x64 are now first class targets for LDC. This page documents how to build, test and hack LDC2 on Windows.

LDC binaries

If you just want to download the very latest LDC binaries, head over to Latest LDC binaries for Windows.

Advice

It is hard for us to keep these wiki pages up-to-date. If you run into trouble, have a look at the build scripts for our Continuous Integration platforms: the files .travis.yml (Ubuntu Linux and OSX) and appveyor.yml (Windows) are always up-to-date with the latest build setup.

Building LDC

Required software

  • Windows, of course!
  • Visual Studio ≥ 2013, e.g. VS Community 2015. VS 2015 is greatly encouraged due to improved C99 support. Make sure to install the C++ toolchain.
  • A D compiler (the ltsmaster branch does not need a D compiler to build).
  • git 2.0+ (I use PortableGit)
  • Python 2.7.x or Python 3.3.x (I use Portable Python)
  • CMake 2.8+
  • Ninja, a neat little and fast build system
  • Curl library (just use a precompiled one)
    • Put the 64/32-bit libcurl.dll in a PATH directory (e.g., C:\LDC\LDC-x64\bin).

Shell environment

I use a little batch file to set up my LDC build environment. It's located in the root of my LDC environment: C:\LDC\shell.cmd. It sets up the PATH environment variable (I've installed the portable tools into C:\LDC\Tools) and then spawns a new VS 2015 x64 Native Tools Command Prompt with a below-normal process priority, so that my system stays responsive while building. I use a shortcut on my desktop to this batch file. Please adjust it to your needs (and note that %~dp0 is the directory containing the script, i.e., C:\LDC\).

@echo off
set PATH=%~dp0LDC-x64\bin;%~dp0LLVM-x64\bin;%~dp0Tools\Ninja 1.6.0;%~dp0Tools\PortableGit-2.9.3.2-64-bit\usr\bin;%~dp0Tools\PortableGit-2.9.3.2-64-bit\bin;%~dp0Tools\make-4.2.1;%~dp0Tools\cmake-3.3.0-win32-x86\bin;%~dp0Tools\Portable Python 2.7.5.1\App;%PATH%
set DMD=%~dp0dmd2\windows\bin\dmd.exe
if not exist "%TERM%" set TERM=msys
start /belownormal %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64

Use x86 instead of amd64 as argument to vcvarsall.bat if you want to build a 32-bit LDC.

Open a shell by executing the batch file.

  • Running cl should display the banner from the MS compiler.
  • Running git --version should display the banner from git.
  • Running python --version should display the banner from python.
  • Running cmake --version should display the banner from cmake.
  • Running ninja --version should display the ninja version.

Build LLVM

To build LLVM from the command line, just execute the following steps (from C:\LDC):

  • Get the source: git clone http://llvm.org/git/llvm.git llvm
  • A post-3.8 version is currently required, so branch release_39 (git checkout release_39) is currently recommended.
  • Create a build directory: md build-llvm-x64
  • Change into it: cd build-llvm-x64
  • Use a command like this (in one line) to create the Ninja build files:

    cmake -G Ninja -DCMAKE_INSTALL_PREFIX="C:\LDC\LLVM-x64" -DCMAKE_BUILD_TYPE=RelWithDebInfo
          -DPYTHON_EXECUTABLE="C:\LDC\Tools\Portable Python 2.7.5.1\App\python.exe"
          -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF
          -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_APPEND_VC_REV=ON -DLLVM_INSTALL_UTILS=ON ..\llvm

    Omit the CMAKE_BUILD_TYPE definition to build a debug version. The LLVM page on CMake documents other variables you can change. The most common is to add more targets. E.g. to build a target for ARM you change the targets to build to -DLLVM_TARGETS_TO_BUILD="X86;ARM".

  • Build LLVM: ninja
  • Install it: ninja install

Build libconfig

Latest confirmed working revision: 7585cf6 Feel free to try the latest version, if it fails you can fall back on this one.

  • cd C:\LDC
  • git clone https://github.com/hyperrealm/libconfig.git libconfig
  • cd libconfig
  • git checkout 7585cf6
  • Build the static C library: msbuild lib\libconfig.vcxproj /t:Rebuild /p:Configuration=ReleaseStatic /p:Platform=x64
    • Use configuration DebugStatic for debug LDC builds to ensure we link against the same runtime library

Build LDC

  • cd C:\LDC
  • git clone --recursive git://github.com/ldc-developers/ldc.git ldc
  • md build-ldc-x64
  • cd build-ldc-x64
  • Set environment variable to which D compiler should be used to build LDC:

    set DMD=c:\path\to\dmd\bin\dmd.exe
  • Use a command like this (in one line):

    cmake -G Ninja -DCMAKE_INSTALL_PREFIX="C:\LDC\LDC-x64" -DCMAKE_BUILD_TYPE=RelWithDebInfo
          -DLLVM_ROOT_DIR="C:/LDC/LLVM-x64" -DLIBCONFIG_INCLUDE_DIR="C:/LDC/libconfig/lib"
          -DLIBCONFIG_LIBRARY="C:/LDC/libconfig/lib/x64/ReleaseStatic/libconfig.lib" ..\ldc
  • Build LDC and the runtimes: ninja
  • If you want to install it: ninja install

Tests

Running the LIT-based tests

You'll need to have lit installed for Python. To run the tests from your build dir you can do:

  • cd C:\LDC\build-ldc-x64
  • ctest --output-on-failure -R lit-tests

or you can go to the tests folder inside your build dir, and run the runlit.py script.

  • cd C:\LDC\build-ldc-x64\tests
  • python runlit.py -v .

The second way is convenient for running individual tests:

  • python runlit.py -v codegen/align.d

Running the runtime unit tests

  • cd C:\LDC\build-ldc-x64
  • Build the unit tests: ninja druntime-ldc-unittest druntime-ldc-unittest-debug phobos2-ldc-unittest phobos2-ldc-unittest-debug
  • Run the tests, excluding dmd-testsuite and the LIT tests: ctest --output-on-failure -E "dmd-testsuite|lit-tests"

For troubleshooting be sure to examine the file C:\LDC\build-ldc-x64\Testing\Temporary\LastTest.log.

Running the dmd-testsuite tests

dmd-testsuite requires a minimalistic GNU environment. bash and a lot of GNU utilities are shipped with git. Additionally, we need GNU make.

  • Either build GNU make from source yourself (they ship with a Visual Studio solution) or download this pre-built one (v4.2.1).
  • Edit your shell batch script and add the directory containing your make.exe to your PATH, e.g., set PATH=%~dp0Tools\make;%PATH%
  • Spawn a new shell and make sure make --version prints its banner.

Now that we have extended our LDC build environment, we're able to run the dmd-testsuite tests:

  • cd C:\LDC\build-ldc-x64
  • Set some environment variables for dmd-testsuite's Makefile:
    • OS
      • 32-bit: set OS=Win_32
      • 64-bit: set OS=Win_64
    • DMD_TESTSUITE_MAKE_ARGS enables parallel execution, e.g.
      • set DMD_TESTSUITE_MAKE_ARGS=-j4
  • ctest --verbose -R dmd-testsuite
    • Debug only: ctest --verbose -R dmd-testsuite-debug
    • Release only: ctest --verbose -R dmd-testsuite -E -debug

Developing/debugging LDC/LLVM with Visual Studio

  • cd C:\LDC
  • md vs-ldc-x64
  • cd vs-ldc-x64
  • Use the cmake command from the Build LDC section, but use the VS generator instead of Ninja this time: cmake -G "Visual Studio 14 Win64" ...

This creates the VS 2015 solution C:\LDC\vs-ldc-x64\ldc.sln. A Visual Studio solution for LLVM can be created the same way.

Example

The simple D program hello.d

import std.stdio;

int main()
{
    writefln("Hello LDC2");
    return 0;
}

can be compiled and linked with the commands:

ldc2 -c hello.d
ldc2 hello.obj

or simply with: ldc2 hello.d



Windows MSVC