Difference between revisions of "GDC/Installation/Generic"
m (add breadcrumb menu) |
|||
(7 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ParentArticle|[[GDC]] > [[GDC/Installation|Installation]]}} | {{ParentArticle|[[GDC]] > [[GDC/Installation|Installation]]}} | ||
+ | == Introduction == | ||
This page describes the generic installation process which should be valid for every system but does not include system specific details and tweaks. Please use the system specific installation guides for your system if available. | This page describes the generic installation process which should be valid for every system but does not include system specific details and tweaks. Please use the system specific installation guides for your system if available. | ||
− | |||
== Prerequesites == | == Prerequesites == | ||
Line 30: | Line 30: | ||
− | '''NOTE: '''Master branch contains GDC compatible with '''GCC | + | '''NOTE: '''Master branch contains GDC compatible with '''GCC 6'''. In order to build GDC against a previous version, pick the relevant branch e.g. '''GCC 4.9.x''' pick ''gdc-4.9'': |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git checkout gdc-4. | + | git checkout gdc-4.9 |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 44: | Line 44: | ||
− | Grab GCC sources from [http://gcc.gnu.org/mirrors.html a mirror]. You will need the full gcc archives. Unpack the archives in the ''gdc'' dir. This creates something like ''gdc/gcc-4. | + | Grab GCC sources from [http://gcc.gnu.org/mirrors.html a mirror]. You will need the full gcc archives. Unpack the archives in the ''gdc'' dir. This creates something like ''gdc/gcc-4.9.0''. Run these commands: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd gdc/dev | cd gdc/dev | ||
− | ./setup-gcc.sh ../gcc-4. | + | ./setup-gcc.sh ../gcc-4.9.0 |
mkdir ../objdir | mkdir ../objdir | ||
cd ../objdir | cd ../objdir | ||
− | ../gcc-4. | + | ../gcc-4.9.0/configure --enable-languages=d --disable-bootstrap \ |
--prefix=/opt/gdc \ | --prefix=/opt/gdc \ | ||
− | --with-bugurl="http://gdcproject.org | + | --with-bugurl="http://bugzilla.gdcproject.org" \ |
--enable-checking=yes | --enable-checking=yes | ||
make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument | make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument | ||
Line 72: | Line 72: | ||
--[enable|disable]-multilib # Allow building both 32-bit and 64-bit apps/libs. | --[enable|disable]-multilib # Allow building both 32-bit and 64-bit apps/libs. | ||
--[enable|disable]-shared # Build shared libraries. | --[enable|disable]-shared # Build shared libraries. | ||
+ | --with-multilib-list=mXX,mYY # Select multilibs, eg: --with-multilib-list=m32,m64,mx32 (AArch64 and x86-64 only) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 86: | Line 87: | ||
goshawk@jupiter:/$ gdc -v | goshawk@jupiter:/$ gdc -v | ||
Using built-in specs. | Using built-in specs. | ||
− | COLLECT_GCC=gdc | + | COLLECT_GCC=/opt/gdc/bin/gdc |
− | COLLECT_LTO_WRAPPER=/opt/gdc | + | COLLECT_LTO_WRAPPER=/opt/gdc/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper |
Target: x86_64-unknown-linux-gnu | Target: x86_64-unknown-linux-gnu | ||
− | Configured with: ../configure --enable-languages=d | + | Configured with: ../gcc-4.8.1/configure --enable-languages=d --disable-bootstrap --prefix=/opt/gdc --with-bugurl=http://gdcproject.org/bugzilla --enable-checking=yes |
Thread model: posix | Thread model: posix | ||
− | gcc version 4. | + | gcc version 4.8.1 (GCC) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 109: | Line 102: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd gdc/dev | cd gdc/dev | ||
− | ./setup-gcc.sh --update ../gcc-4. | + | ./setup-gcc.sh --update ../gcc-4.9.0 |
cd ../objdir | cd ../objdir | ||
make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument | make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument | ||
make install | make install | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | == Building GDC without building Druntime/Phobos == | ||
+ | The gdc compiler will build for most (hopefully all) configurations supported by GCC. Druntime and Phobos on the other hand only build for very few systems. If you want to use a custom runtime or you are porting druntime and phobos and will built these later on, it might be useful to disable Druntime/Phobos: | ||
+ | |||
+ | Simply pass ''--disable-libphobos'' when configuring GCC. This will disable both libphobos and libdruntime. | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | ../gcc-4.9.0/configure --enable-languages=d --disable-bootstrap \ | ||
+ | --prefix=/opt/gdc \ | ||
+ | --with-bugurl="http://bugzilla.gdcproject.org" \ | ||
+ | --enable-checking=yes \ | ||
+ | --disable-libphobos | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Building only Druntime/Phobos == | ||
+ | It is possible to build only a new libdruntime/libphobos with an existing GCC compiler. You still need the full GCC sources and you'll have to setup the GCC sources as explained in the GDC compile instructions. After you've executed ''./setup-gcc.sh'', execute these commands: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkdir -p ../objdir-phobos/main | ||
+ | cd ../objdir-phobos/main | ||
+ | ../../gcc-4.9.0/libphobos/configure --prefix=/opt/gdc | ||
+ | make | ||
+ | sudo make install | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Note: We created a two-level build directory ''objdir-phobos/main''. For multilib builds configure will setup more variants such as ''objdir-phobos/32'' in the parent folder and you don't want these outside of your objdir directory. | ||
+ | |||
+ | You can also use cross compilers: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkdir -p ../objdir-phobos/main | ||
+ | cd ../objdir-phobos/main | ||
+ | ../../gcc-4.9.0/libphobos/configure --prefix=/opt/gdc --host=arm-linux-gnueabi | ||
+ | make | ||
+ | sudo make install | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | To build druntime with libbacktrace support: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkdir objdir-bt && cd objdir-bt | ||
+ | ../gcc-4.9.0/libbacktrace/configure --host=arm-linux-gnueabi | ||
+ | make | ||
+ | |||
+ | mkdir ../objdir-phobos && cd ../objdir-phobos | ||
+ | ../gcc-4.9.0/libphobos/configure --host=arm-linux-gnueabi --with-libbacktrace=/mnt/hdd/GDC/objdir-bt | ||
+ | make && make install | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | [[Category:GDC Compiler]] |
Latest revision as of 20:06, 1 September 2015
Contents
Introduction
This page describes the generic installation process which should be valid for every system but does not include system specific details and tweaks. Please use the system specific installation guides for your system if available.
Prerequesites
The minimum system requirements you need to obtain and build GDC are:
- gcc and g++
- libmpc-dev
- libmpfr-dev
- libgmp3-dev
- autoconf and automake
- flex and bison
- patch
- git
For cross-compiling/multilib builds, you should also have installed:
- gcc-multilib
- (maybe g++-multilib)
Building
Run these commands in a terminal:
mkdir -p gdc/dev
git clone https://github.com/D-Programming-GDC/GDC.git gdc/dev
NOTE: Master branch contains GDC compatible with GCC 6. In order to build GDC against a previous version, pick the relevant branch e.g. GCC 4.9.x pick gdc-4.9:
git checkout gdc-4.9
To build the D1 Compiler:
cd gdc/dev
git checkout gdc-1.x
cd ../
Grab GCC sources from a mirror. You will need the full gcc archives. Unpack the archives in the gdc dir. This creates something like gdc/gcc-4.9.0. Run these commands:
cd gdc/dev
./setup-gcc.sh ../gcc-4.9.0
mkdir ../objdir
cd ../objdir
../gcc-4.9.0/configure --enable-languages=d --disable-bootstrap \
--prefix=/opt/gdc \
--with-bugurl="http://bugzilla.gdcproject.org" \
--enable-checking=yes
make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument
make install
export PATH=$PATH:/opt/gdc/bin
If you want to compile a release version drop --disable-bootstrap and use --enable-checking=release. Other configure arguments you might want to use:
--[enable|disable]-nls # Native language support (NLS). Lets GDC output diagnostics in languages other than English.
--[enable|disable]-libgomp # Build GCC with OMP support. This is not used by GDC.
--[enable|disable]-libmudflap # Build GCC with Mudflap pointer debugging support. This is not used by GDC.
--[enable|disable]-libquadmath # Build GCC with 128-bit floating point support. This is not used by GDC.
--[enable|disable|-libssp # Build GCC with stack smashing protection.
--[enable|disable]-lto # Support link-time optimization.
--[enable|disable]-ld # Build the ld linker.
--[enable|disable]-gold # Build the gold linker.
--[enable|disable]-multilib # Allow building both 32-bit and 64-bit apps/libs.
--[enable|disable]-shared # Build shared libraries.
--with-multilib-list=mXX,mYY # Select multilibs, eg: --with-multilib-list=m32,m64,mx32 (AArch64 and x86-64 only)
If you get compile errors in Ubuntu (at least x64 version) configure it with multilib (and install gcc-multilib of course).
The make command will perform the build. make install will install the compiled GDC. Use make install-strip to automatically strip symbols from the huge executables.
Since prefix is set to /opt/gdc you will install GDC there so it will not mess up with the installed GCC. Go in /opt/gdc/bin to find the gdc executable. With this source structure it will be easy to do modifications of the sources. To do changes, just modify files in gdc/d directory, it will be visible by the GCC sources. The objdir directory is used for configuration so that the GCC sources remains unmodified.
After following the instructions you can do a quick test:
goshawk@jupiter:/$ gdc -v
Using built-in specs.
COLLECT_GCC=/opt/gdc/bin/gdc
COLLECT_LTO_WRAPPER=/opt/gdc/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.8.1/configure --enable-languages=d --disable-bootstrap --prefix=/opt/gdc --with-bugurl=http://gdcproject.org/bugzilla --enable-checking=yes
Thread model: posix
gcc version 4.8.1 (GCC)
As you can see your current shell session will start using the newly compiled GCC and GDC, overriding but not overwriting the system default.
Updating an existing build
If you have a setup as described above and want to build a newer gdc version you don't have to do all steps again:
cd gdc/dev
./setup-gcc.sh --update ../gcc-4.9.0
cd ../objdir
make -j2 2>&1 | tee build.log # insert your number of cores in the -j argument
make install
Building GDC without building Druntime/Phobos
The gdc compiler will build for most (hopefully all) configurations supported by GCC. Druntime and Phobos on the other hand only build for very few systems. If you want to use a custom runtime or you are porting druntime and phobos and will built these later on, it might be useful to disable Druntime/Phobos:
Simply pass --disable-libphobos when configuring GCC. This will disable both libphobos and libdruntime.
../gcc-4.9.0/configure --enable-languages=d --disable-bootstrap \
--prefix=/opt/gdc \
--with-bugurl="http://bugzilla.gdcproject.org" \
--enable-checking=yes \
--disable-libphobos
Building only Druntime/Phobos
It is possible to build only a new libdruntime/libphobos with an existing GCC compiler. You still need the full GCC sources and you'll have to setup the GCC sources as explained in the GDC compile instructions. After you've executed ./setup-gcc.sh, execute these commands:
mkdir -p ../objdir-phobos/main
cd ../objdir-phobos/main
../../gcc-4.9.0/libphobos/configure --prefix=/opt/gdc
make
sudo make install
Note: We created a two-level build directory objdir-phobos/main. For multilib builds configure will setup more variants such as objdir-phobos/32 in the parent folder and you don't want these outside of your objdir directory.
You can also use cross compilers:
mkdir -p ../objdir-phobos/main
cd ../objdir-phobos/main
../../gcc-4.9.0/libphobos/configure --prefix=/opt/gdc --host=arm-linux-gnueabi
make
sudo make install
To build druntime with libbacktrace support:
mkdir objdir-bt && cd objdir-bt
../gcc-4.9.0/libbacktrace/configure --host=arm-linux-gnueabi
make
mkdir ../objdir-phobos && cd ../objdir-phobos
../gcc-4.9.0/libphobos/configure --host=arm-linux-gnueabi --with-libbacktrace=/mnt/hdd/GDC/objdir-bt
make && make install