Difference between revisions of "Building LDC from source"

From D Wiki
Jump to: navigation, search
(Building LLVM manually)
m (Adapted cmake cmdline for build with llvm-8.0.0 instead of 6.0.1-3)
(28 intermediate revisions by 7 users not shown)
Line 1: Line 1:
This page gives an overview of what is required to build and install [[LDC]] on most Posix-like systems such as Linux or OS X. For building LDC on Windows, please see [[Building and hacking LDC on Windows using MSVC|the dedicated page]].
+
This page shows you how to build and install [[LDC]] on most Posix-like systems such as linux, macOS, BSD, or Android. For building LDC on Windows, please see [[Building and hacking LDC on Windows using MSVC|its dedicated page]].
 +
 
 +
== 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 [http://wiki.dlang.org/LDC_contributor%27s_guide#Continuous_Integration Continuous Integration] platforms: the Azure Pipelines scripts for [https://github.com/ldc-developers/ldc/blob/master/.azure-pipelines/posix.yml Ubuntu Linux and macOS] and [https://github.com/ldc-developers/ldc/blob/master/.azure-pipelines/windows.yml Windows] are always up-to-date with the latest build setup.
  
 
== Prerequisites ==
 
== Prerequisites ==
Line 5: Line 8:
 
* Git (for fetching the source code, if not using a tarball)
 
* Git (for fetching the source code, if not using a tarball)
 
* a C++ toolchain (GCC, Clang, …)
 
* a C++ toolchain (GCC, Clang, …)
* a D compiler (currently LDC and DMD are supported. LDC 0.17 is the last version that does not need a D compiler to build.)
+
* a D compiler (currently LDC and DMD are supported)
 +
** If you don't have a D compiler installed: LDC 0.17 is the last version that does not need a D compiler to be built. Thus for bootstrapping, you can first build 0.17, and then use that to build newer compiler versions. Our testing infrastructure explicitly tests that new LDC versions can be built with 0.17. The git branch is called <tt>ltsmaster</tt> or [https://github.com/ldc-developers/ldc/releases you can get the source for the latest 0.17 release].
 
* CMake 2.8+
 
* CMake 2.8+
* LLVM 3.5+
+
* Ninja or Make (Ninja is recommended as it supports parallel builds)
* libconfig++ and its header files (the <tt>-devel</tt> or <tt>-dev</tt> package for some Linux distributions, on OSX: <tt>sudo port install libconfig-hr</tt>)
+
* LLVM 3.9+
* libcurl-dev for building the D2 standard library and tests (various versions available, e.g. libcurl4-gnutls-dev on Ubuntu)
+
* For 0.17 ltsmaster, you need libconfig++ and its header files
 +
** Get the <tt>libconfig-devel</tt> or <tt>libconfig-dev</tt> package for some Linux distributions. On OSX, <tt>sudo port install libconfig-hr</tt>); on Android with the Termux app, <tt>apt install libconfig-dev</tt>
 +
* libcurl-dev for building the Phobos standard library and tests (various versions available, e.g. libcurl4-gnutls-dev on Ubuntu)
 
* libedit-dev
 
* libedit-dev
 
* zlib-dev (e.g. zlib1g-dev on Ubuntu)
 
* zlib-dev (e.g. zlib1g-dev on Ubuntu)
 
Please check the LLVM page on [http://www.llvm.org/docs/GettingStarted.html#broken-versions-of-gcc-and-other-tools broken versions of GCC and other tools] to make sure your toolchain is not known to be bad.
 
  
 
=== LLVM ===
 
=== LLVM ===
  
Many Linux distributions already provide recent binary LLVM packages, sometimes in the form of user-curated package repositories (PPA, …). If an recent LLVM pacakge is available, you might prefer to use it, as LLVM is a rather big project to build.
+
Many Linux distributions already provide recent binary LLVM packages, sometimes in the form of user-curated package repositories (PPA, …). If a recent LLVM package is available, you might prefer to use it, as LLVM is a rather big project to build.  Only the Android target requires building [https://github.com/ldc-developers/llvm/releases our lightly tweaked version of LLVM], which is what we'll use here. There are also pre-built binary tarballs of our tweaked LLVM at that link, but they don't always work in other build environments, so we lay out the steps below in case you can't use them.
  
 
==== Building LLVM manually ====
 
==== Building LLVM manually ====
  
We try to keep LDC up-to-date with LLVM trunk, but a release version of LLVM >= 3.5 is recommended for the least amount of trouble (with LLVM trunk, you will have to recompile LLVM often).
+
We try to keep LDC up-to-date with LLVM trunk, but the latest official release is recommended for the least amount of trouble (with LLVM trunk, you will have to recompile LLVM often). Download a [https://github.com/ldc-developers/llvm/releases lightly tweaked source tarball], extract the archive, configure and build:
Download [http://llvm.org/releases/3.7.1/llvm-3.7.1.src.tar.xz LLVM 3.7.0] with <tt>$ wget http://llvm.org/releases/3.7.1/llvm-3.7.1.src.tar.xz</tt>, extract the archive, and then run:
+
 
 +
<syntaxhighlight lang=bash>
 +
curl -L -O https://github.com/ldc-developers/llvm/releases/download/ldc-v8.0.0/llvm-8.0.0.src.tar.xz
 +
tar xf llvm-8.0.0.src.tar.xz
 +
cd llvm-8.0.0.src
 +
mkdir build && cd build
 +
 
 +
# remove `-G Ninja` to use Make instead
 +
cmake -G Ninja .. \
 +
  -DCMAKE_BUILD_TYPE=Release \
 +
  -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;Mips;MSP430;NVPTX;PowerPC;X86" \
 +
  -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV;WebAssembly" \
 +
  -DCOMPILER_RT_INCLUDE_TESTS=OFF
 +
ninja
  
<pre>$ ./configure --enable-optimized --disable-assertions --enable-targets=x86
+
cd ../..
$ make  # add -j&lt;n&gt; as appropriate depending on your system
+
</syntaxhighlight>
$ sudo make install</pre>
+
 
If you are planning to work on LDC itself, you might want to install a debug build of LLVM instead by using <tt>./configure --enable-assertions</tt>. Warning: This leads to a ''heavy'' slowdown!
+
If you are planning to work on LDC itself, you might want to install a debug build of LLVM instead by using <tt>-DCMAKE_BUILD_TYPE=Debug</tt>. Warning: This leads to a ''heavy'' slowdown!
 +
You can alternatively choose to use <tt>-DCMAKE_BUILD_TYPE=RelWithDebInfo</tt>. This results in less heavy build but with adequate debug info.
 +
 
 +
It is recommended that you install LLVM, with <tt>ninja install</tt>. To specify a path for the installation, use the <tt>CMAKE_INSTALL_PREFIX</tt> variable.
 +
 
 +
If you are building natively in Termux for Android, you'll want to add <tt>-DLLVM_DEFAULT_TARGET_TRIPLE=armv7-none-linux-android</tt>, because CMake cannot detect the Android platform yet.
  
 
== LDC ==
 
== LDC ==
  
Now, your system should be ready to build and install LDC from source.
+
Now that you're ready to build and install LDC from source, clone the [https://github.com/ldc-developers/ldc LDC GitHub repository] or get [https://github.com/ldc-developers/ldc/releases one of our official source releases]:
 
 
First, clone the [https://github.com/ldc-developers/ldc LDC GitHub repository]:
 
 
<pre>$ git clone --recursive https://github.com/ldc-developers/ldc.git</pre>
 
<pre>$ git clone --recursive https://github.com/ldc-developers/ldc.git</pre>
  
If you're behind a company firewall and cloning of the submodules fail, first configure git to use a different protocol, ex https:
+
If you're behind a company firewall and cloning of the submodules fails, first configure git to use a different protocol, ex https:
 
<pre>$ git config --global url."https://github".insteadOf git://github</pre>
 
<pre>$ git config --global url."https://github".insteadOf git://github</pre>
  
If you already have a local copy of the source tree, don’t forget to make sure your submodules are up to date by running <tt>git submodule update --init</tt>.
+
If you already have the git repo, don’t forget to make sure your submodules are up to date by running <tt>git submodule update --init</tt>.
 +
 
 +
Run the following commands to configure and build ldc and its runtime libraries (see the list of useful CMake switches below):
 +
 
 +
<syntaxhighlight lang=bash>
 +
cd ldc
 +
 
 +
# Make a working directory for the build (name/path arbitrary).
 +
mkdir build && cd build
 +
 
 +
# If host D compiler is not on path, explicitly specify dmd/ldmd2
 +
# (not required for ltsmaster/0.17.x).
 +
export DMD=/path/to/your/dmd2/bin/dmd
 +
 
 +
# Run CMake, giving path to top-level source directory. (Remove
 +
# -G Ninja to use default generator, i.e. make.)
 +
cmake -G Ninja -DLLVM_CONFIG=../../llvm-8.0.0.src/build/bin/llvm-config ..
 +
 
 +
# Build and install LDC. Use -j<n> to limit parallelism if running out of memory.
 +
ninja
 +
sudo ninja install
 +
</syntaxhighlight>
 +
The last step is optional; instead of installing it to the system, you can also choose to run LDC from the <tt>bin/</tt> directory in your CMake working tree.  If you're using an LLVM already installed in your system instead of the tweaked version we just compiled, you don't need to specify <tt>-DLLVM_CONFIG=..</tt>, because our CMake config should pick it up automatically.
 +
If it doesn't, set the <tt>LLVM_ROOT_DIR</tt> variable to the location where you installed it. That should be the location you set the <tt>CMAKE_INSTALL_PREFIX</tt> in the CMake command-line
 +
when configuring LLVM (see above).
 +
 
 +
You can specify install location for LDC too. Set again the <tt>CMAKE_INSTALL_PREFIX</tt> accordingly.
  
Then, just run the following commands as usual (see the list of useful CMake switches below):
+
If you don't need the experimental JIT functionality, you can use -DLDC_DYNAMIC_COMPILE=False in the CMake cmdline as it seems to have caused problems.
  
<pre>cd ldc
+
If you're planning to work on LDC, you can set <tt>-DCMAKE_BUILD_TYPE=RelWithDebInfo</tt> here too.
mkdir build &amp;&amp; cd build   # arbitrary working directory
+
 
cmake ..  
+
''Note'': When you issue <tt>ninja install</tt>, that installs LDC on your system and puts the binary e.g. in <tt>/local/bin/ldc</tt>. When you issue <tt>ninja</tt>, that generates a ldc2 binary in <tt>build/bin</tt>. You can config CMake with <tt>-DCMAKE_BUILD_TYPE=Release</tt> and issue <tt>ninja install</tt> to install LDC once. Then, you can delete the <tt>build</tt> directory,
make  # -j&lt;n&gt; as appropriate
+
and repeat the steps above but now use <tt>-DCMAKE_BUILD_TYPE=RelWithDebInfo</tt>. That way, while working on LDC, with <tt>ninja</tt>, you'll be getting a debug binary in <tt>build/bin</tt>
sudo make install</pre>
+
but have a release version in your system.
The last step is optional; instead of installing it to the system, you can also choose to run LDC from the <tt>bin/</tt> directory in your CMake working tree.
+
 
 +
If you want to target Android and are building ldc 1.4 or later, add <tt>-DLDC_TARGET_PRESET=Android-arm</tt> to the CMake config.
 +
 
 +
If cross-compiling the runtime libraries, you'll need to specify the C cross-compiler before running CMake
 +
 
 +
<pre>$ export CC=/home/david/android-ndk-r17b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang</pre>
 +
 
 +
and pass any C, D, or linker flags you need to CMake:
 +
 
 +
<pre>-DRT_CFLAGS="-target armv7-none-linux-gnueabihf -Os" -DD_FLAGS="-w;-mtriple=armv7-none-linux-gnueabihf" -DLD_FLAGS="-target armv7-none-linux-gnueabihf -fpie -pie"</pre>
  
 
=== Useful CMake variables ===
 
=== Useful CMake variables ===
Line 55: Line 110:
 
* '''CMAKE_INSTALL_PREFIX''': The installation prefix, <tt>/usr/local</tt> by default (e.g. <tt>-DCMAKE_INSTALL_PREFIX=/opt/ldc</tt>).
 
* '''CMAKE_INSTALL_PREFIX''': The installation prefix, <tt>/usr/local</tt> by default (e.g. <tt>-DCMAKE_INSTALL_PREFIX=/opt/ldc</tt>).
 
* '''INCLUDE_INSTALL_DIR''': The location the D modules for druntime and Phobos are installed to.
 
* '''INCLUDE_INSTALL_DIR''': The location the D modules for druntime and Phobos are installed to.
* '''RUNTIME_DIR''', '''PHOBOS2_DIR''': By default, druntime and Phobos are expected in <tt>runtime/</tt> as Git submodules. Should circumstances require it, these paths can be changed by setting the variables accordingly.
+
* '''RUNTIME_DIR''', '''PHOBOS2_DIR''': By default, druntime and Phobos are expected in <tt>runtime/</tt> as git submodules. Should circumstances require it, these paths can be changed by setting the variables accordingly.
* '''LLVM_ROOT_DIR''' and '''LLVM_CONFIG''': Allows you to specify the LLVM instance to use. LLVM_CONFIG specifies the path and name of the <tt>llvm-config</tt> binary to use. By default, it is assumed to be <tt>${LLVM_ROOT_DIR}/bin/llvm-config</tt>, otherwise it is searched for on default system paths.
+
* '''LLVM_ROOT_DIR''' and '''LLVM_CONFIG''': Allows you to specify the LLVM instance to use. LLVM_CONFIG specifies the path and name of the <tt>llvm-config</tt> binary to use. By default, it is assumed to be <tt>${LLVM_ROOT_DIR}/bin/llvm-config</tt>, otherwise it is searched for on default system paths. EDIT: https://github.com/ldc-developers/ldc/issues/1928#issuecomment-268421779 suggests we should just use `ccmake -DLLVM_ROOT_DIR=$homebrew_D/ ..` on ubuntu 14.04 even if /usr/bin/llvm-config-3.8 is available
* '''LIBCONFIG_LIBRARY''' and '''LIBCONFIG_INCLUDE_DIR''': These variables can be used to specify the location of the libconfig++ library files and the path to the corresponding header files.
+
* '''LIBCONFIG_LIBRARY''' and '''LIBCONFIG_INCLUDE_DIR''': Only for 0.17 ltsmaster, these variables can be used to specify the location of the libconfig++ library files and the path to the corresponding header files. NOTE: on error Could NOT find LibConfig (missing: LIBCONFIG_INCLUDE_DIR LIBCONFIG_LIBRARY) and using brew, use for eg: CMAKE_PREFIX_PATH=`brew --prefix` cmake .. [see https://github.com/ldc-developers/ldc/issues/952] or use `sudo apt-get install libconfig++`
 +
* '''D_COMPILER''': path to prebuilt D compiler, needed for anything newer than 0.17 ltsmaster
 +
* '''BUILD_LTO_LIBS''': Set this to <tt>'ON'</tt> to build phobos and druntime with LTO. Available on MacOS and Linux starting with LDC 1.9.0. Include <tt>D_FLAGS='-w;-flto=thin'</tt> to enable ThinLTO (so pass <tt>-DBUILD_LTO_LIBS=ON -DD_FLAGS='-w;-flto=thin'</tt> to cmake). In LDC 1.12.0 ThinLTO will be included automatically, so the <tt>D_FLAGS</tt> variable won't be necessary. LDC 1.12.0 will also support Win64 ([https://github.com/ldc-developers/ldc/pull/2774 PR 2774]).
 +
 
 +
NOTE: see https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/ldc.rb for brew's install
  
 
== Tips ==
 
== Tips ==
  
The Makefiles generated by CMake respect the <tt>DESTDIR</tt> variable for the <tt>install</tt> target. It is prepended to all the file installation targets. This can be useful for building packages: <tt>$ make install DESTDIR=&lt;your root directory&gt;</tt>
+
The Makefiles generated by CMake respect the <tt>DESTDIR</tt> variable for the <tt>install</tt> target. It is prepended to all the file installation targets. This can be useful for building packages:
  
 +
<tt>$ make install DESTDIR=&lt;your root directory&gt;</tt>
  
 
[[Category:LDC]]
 
[[Category:LDC]]

Revision as of 09:27, 12 September 2019

This page shows you how to build and install LDC on most Posix-like systems such as linux, macOS, BSD, or Android. For building LDC on Windows, please see its dedicated page.

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 Azure Pipelines scripts for Ubuntu Linux and macOS and Windows are always up-to-date with the latest build setup.

Prerequisites

  • Git (for fetching the source code, if not using a tarball)
  • a C++ toolchain (GCC, Clang, …)
  • a D compiler (currently LDC and DMD are supported)
    • If you don't have a D compiler installed: LDC 0.17 is the last version that does not need a D compiler to be built. Thus for bootstrapping, you can first build 0.17, and then use that to build newer compiler versions. Our testing infrastructure explicitly tests that new LDC versions can be built with 0.17. The git branch is called ltsmaster or you can get the source for the latest 0.17 release.
  • CMake 2.8+
  • Ninja or Make (Ninja is recommended as it supports parallel builds)
  • LLVM 3.9+
  • For 0.17 ltsmaster, you need libconfig++ and its header files
    • Get the libconfig-devel or libconfig-dev package for some Linux distributions. On OSX, sudo port install libconfig-hr); on Android with the Termux app, apt install libconfig-dev
  • libcurl-dev for building the Phobos standard library and tests (various versions available, e.g. libcurl4-gnutls-dev on Ubuntu)
  • libedit-dev
  • zlib-dev (e.g. zlib1g-dev on Ubuntu)

LLVM

Many Linux distributions already provide recent binary LLVM packages, sometimes in the form of user-curated package repositories (PPA, …). If a recent LLVM package is available, you might prefer to use it, as LLVM is a rather big project to build. Only the Android target requires building our lightly tweaked version of LLVM, which is what we'll use here. There are also pre-built binary tarballs of our tweaked LLVM at that link, but they don't always work in other build environments, so we lay out the steps below in case you can't use them.

Building LLVM manually

We try to keep LDC up-to-date with LLVM trunk, but the latest official release is recommended for the least amount of trouble (with LLVM trunk, you will have to recompile LLVM often). Download a lightly tweaked source tarball, extract the archive, configure and build:

curl -L -O https://github.com/ldc-developers/llvm/releases/download/ldc-v8.0.0/llvm-8.0.0.src.tar.xz
tar xf llvm-8.0.0.src.tar.xz
cd llvm-8.0.0.src
mkdir build && cd build

# remove `-G Ninja` to use Make instead
cmake -G Ninja .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;Mips;MSP430;NVPTX;PowerPC;X86" \
  -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV;WebAssembly" \
  -DCOMPILER_RT_INCLUDE_TESTS=OFF
ninja

cd ../..

If you are planning to work on LDC itself, you might want to install a debug build of LLVM instead by using -DCMAKE_BUILD_TYPE=Debug. Warning: This leads to a heavy slowdown! You can alternatively choose to use -DCMAKE_BUILD_TYPE=RelWithDebInfo. This results in less heavy build but with adequate debug info.

It is recommended that you install LLVM, with ninja install. To specify a path for the installation, use the CMAKE_INSTALL_PREFIX variable.

If you are building natively in Termux for Android, you'll want to add -DLLVM_DEFAULT_TARGET_TRIPLE=armv7-none-linux-android, because CMake cannot detect the Android platform yet.

LDC

Now that you're ready to build and install LDC from source, clone the LDC GitHub repository or get one of our official source releases:

$ git clone --recursive https://github.com/ldc-developers/ldc.git

If you're behind a company firewall and cloning of the submodules fails, first configure git to use a different protocol, ex https:

$ git config --global url."https://github".insteadOf git://github

If you already have the git repo, don’t forget to make sure your submodules are up to date by running git submodule update --init.

Run the following commands to configure and build ldc and its runtime libraries (see the list of useful CMake switches below):

cd ldc

# Make a working directory for the build (name/path arbitrary).
mkdir build && cd build

# If host D compiler is not on path, explicitly specify dmd/ldmd2
# (not required for ltsmaster/0.17.x).
export DMD=/path/to/your/dmd2/bin/dmd

# Run CMake, giving path to top-level source directory. (Remove
# -G Ninja to use default generator, i.e. make.)
cmake -G Ninja -DLLVM_CONFIG=../../llvm-8.0.0.src/build/bin/llvm-config ..

# Build and install LDC. Use -j<n> to limit parallelism if running out of memory.
ninja
sudo ninja install

The last step is optional; instead of installing it to the system, you can also choose to run LDC from the bin/ directory in your CMake working tree. If you're using an LLVM already installed in your system instead of the tweaked version we just compiled, you don't need to specify -DLLVM_CONFIG=.., because our CMake config should pick it up automatically. If it doesn't, set the LLVM_ROOT_DIR variable to the location where you installed it. That should be the location you set the CMAKE_INSTALL_PREFIX in the CMake command-line when configuring LLVM (see above).

You can specify install location for LDC too. Set again the CMAKE_INSTALL_PREFIX accordingly.

If you don't need the experimental JIT functionality, you can use -DLDC_DYNAMIC_COMPILE=False in the CMake cmdline as it seems to have caused problems.

If you're planning to work on LDC, you can set -DCMAKE_BUILD_TYPE=RelWithDebInfo here too.

Note: When you issue ninja install, that installs LDC on your system and puts the binary e.g. in /local/bin/ldc. When you issue ninja, that generates a ldc2 binary in build/bin. You can config CMake with -DCMAKE_BUILD_TYPE=Release and issue ninja install to install LDC once. Then, you can delete the build directory, and repeat the steps above but now use -DCMAKE_BUILD_TYPE=RelWithDebInfo. That way, while working on LDC, with ninja, you'll be getting a debug binary in build/bin but have a release version in your system.

If you want to target Android and are building ldc 1.4 or later, add -DLDC_TARGET_PRESET=Android-arm to the CMake config.

If cross-compiling the runtime libraries, you'll need to specify the C cross-compiler before running CMake

$ export CC=/home/david/android-ndk-r17b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang

and pass any C, D, or linker flags you need to CMake:

-DRT_CFLAGS="-target armv7-none-linux-gnueabihf -Os" -DD_FLAGS="-w;-mtriple=armv7-none-linux-gnueabihf" -DLD_FLAGS="-target armv7-none-linux-gnueabihf -fpie -pie"

Useful CMake variables

  • LIB_SUFFIX: Some Linux distributions, such as Fedora, expect 64 bit libraries in /usr/lib64 instead of /usr/lib. In this case, the installation directory can be adjusted using -DLIB_SUFFIX=64.
  • CMAKE_INSTALL_PREFIX: The installation prefix, /usr/local by default (e.g. -DCMAKE_INSTALL_PREFIX=/opt/ldc).
  • INCLUDE_INSTALL_DIR: The location the D modules for druntime and Phobos are installed to.
  • RUNTIME_DIR, PHOBOS2_DIR: By default, druntime and Phobos are expected in runtime/ as git submodules. Should circumstances require it, these paths can be changed by setting the variables accordingly.
  • LLVM_ROOT_DIR and LLVM_CONFIG: Allows you to specify the LLVM instance to use. LLVM_CONFIG specifies the path and name of the llvm-config binary to use. By default, it is assumed to be ${LLVM_ROOT_DIR}/bin/llvm-config, otherwise it is searched for on default system paths. EDIT: https://github.com/ldc-developers/ldc/issues/1928#issuecomment-268421779 suggests we should just use `ccmake -DLLVM_ROOT_DIR=$homebrew_D/ ..` on ubuntu 14.04 even if /usr/bin/llvm-config-3.8 is available
  • LIBCONFIG_LIBRARY and LIBCONFIG_INCLUDE_DIR: Only for 0.17 ltsmaster, these variables can be used to specify the location of the libconfig++ library files and the path to the corresponding header files. NOTE: on error Could NOT find LibConfig (missing: LIBCONFIG_INCLUDE_DIR LIBCONFIG_LIBRARY) and using brew, use for eg: CMAKE_PREFIX_PATH=`brew --prefix` cmake .. [see https://github.com/ldc-developers/ldc/issues/952] or use `sudo apt-get install libconfig++`
  • D_COMPILER: path to prebuilt D compiler, needed for anything newer than 0.17 ltsmaster
  • BUILD_LTO_LIBS: Set this to 'ON' to build phobos and druntime with LTO. Available on MacOS and Linux starting with LDC 1.9.0. Include D_FLAGS='-w;-flto=thin' to enable ThinLTO (so pass -DBUILD_LTO_LIBS=ON -DD_FLAGS='-w;-flto=thin' to cmake). In LDC 1.12.0 ThinLTO will be included automatically, so the D_FLAGS variable won't be necessary. LDC 1.12.0 will also support Win64 (PR 2774).

NOTE: see https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/ldc.rb for brew's install

Tips

The Makefiles generated by CMake respect the DESTDIR variable for the install target. It is prepended to all the file installation targets. This can be useful for building packages:

$ make install DESTDIR=<your root directory>