Thread overview
Building DlangIde
Sep 23, 2017
Flaze07
Sep 23, 2017
Flaze07
Sep 28, 2017
Dmitry
Sep 26, 2017
Vadim Lopatin
September 23, 2017
hi, I am trying to build DlangIde for windows...(if Dlangide is not available for windows...well, I am terribly sorry)
and here is how it turns out
C:\Users\User\Documents\GitHub\dlangide>dub clean-caches

C:\Users\User\Documents\GitHub\dlangide>dub upgrade --force-remove
Upgrading project in C:\Users\User\Document

C:\Users\User\Documents\GitHub\dlangide>dub build -- force
Performing "debug" build using dmd for x86.
emsi_containers 0.5.3: building configuration "library"...
libdparse 0.7.1: building configuration "library"...
dsymbol 0.2.9: building configuration "library"...
msgpack-d 1.0.0-beta.6: building configuration "library"...
dcd 0.9.1: building configuration "library"...
derelict-util 2.0.6: building configuration "library"...
derelict-ft 1.1.3: building configuration "library"...
derelict-gl3 1.0.23: building configuration "library"...
derelict-sdl2 2.0.2: building configuration "library"...
dlangui 0.9.142: building configuration "default"...
dlangide ~master: building configuration "default"...
Linking...
Error: linker exited with status 1
dmd failed with exit code 1.

C:\Users\User\Documents\GitHub\dlangide>
September 23, 2017
On Saturday, 23 September 2017 at 14:43:15 UTC, Flaze07 wrote:
> hi, I am trying to build DlangIde for windows...(if Dlangide is not available for windows...well, I am terribly sorry)
oh and I didn't download DlangUI
September 24, 2017
On Saturday, 23 September 2017 at 14:43:15 UTC, Flaze07 wrote:
> hi, I am trying to build DlangIde for windows...(if Dlangide is not available for windows...well, I am terribly sorry)
> and here is how it turns out
> C:\Users\User\Documents\GitHub\dlangide>dub clean-caches
>
> C:\Users\User\Documents\GitHub\dlangide>dub upgrade --force-remove
> Upgrading project in C:\Users\User\Document
>
> C:\Users\User\Documents\GitHub\dlangide>dub build -- force
> Performing "debug" build using dmd for x86.
> emsi_containers 0.5.3: building configuration "library"...
> libdparse 0.7.1: building configuration "library"...
> dsymbol 0.2.9: building configuration "library"...
> msgpack-d 1.0.0-beta.6: building configuration "library"...
> dcd 0.9.1: building configuration "library"...
> derelict-util 2.0.6: building configuration "library"...
> derelict-ft 1.1.3: building configuration "library"...
> derelict-gl3 1.0.23: building configuration "library"...
> derelict-sdl2 2.0.2: building configuration "library"...
> dlangui 0.9.142: building configuration "default"...
> dlangide ~master: building configuration "default"...
> Linking...
> Error: linker exited with status 1
> dmd failed with exit code 1.
>
> C:\Users\User\Documents\GitHub\dlangide>

Hi Flaze,

In general, the best place to report issues and request and enhancements is on the specific page of each project, in this case: https://github.com/buggins/dlangide/issues

I wasn't able to compile DlangIDE via DMD and its Optlink linker, however LDC worked:

On Windows 10 x64, with C++ toolchain installed via MS Visual Studio 2017 Community (CL Version 19.11.25506; https://docs.microsoft.com/en-us/visualstudio/install/install-visual-studio) and LDC 1.4 (https://github.com/ldc-developers/ldc/releases/download/v1.4.0/ldc2-1.4.0-win64-msvc.zip) extracted to "C:\D\ldc2-1.4.0-win64-msvc" and "C:\D\ldc2-1.4.0-win64-msvc\bin" added to the Path environment variable, I was able to get DlangIDE to run via the following two commands:

dub fetch dlangide
dub run dlangide --compiler=ldc2

(Same as "C:\D\ldc2-1.4.0-win64-msvc\bin\dub" run dlangide --compiler="C:\D\ldc2-1.4.0-win64-msvc\bin\ldc2.exe", if you haven't added ldc's bin folder to your path.)

Applications that are available on code.dlang.org (such as http://code.dlang.org/packages/dlangide) can be download via dub, so no need to use git.
After you fetch them, 'dub run' will look for them in its packages folder (e.g. "%APPDATA%\dub\packages\" on Windows and "~/.dub/packages/" on Linux), download all their dependencies, compile them and then compile and link the application with them.

DMD 2.076.0 (installed via the installer) + VS 2017 C++ toolchain also worked:

(I removed %APPDATA%\dub just for illustration. A simple 'dub run' followed by a different compiler and architecture should just work without any manual intervention, as dub puts the output files in different directories per each different setting.)

C:\Users\ZombineDev>dub fetch dlangide
Fetching dlangide 0.7.89...
Please note that you need to use `dub run <pkgname>` or add it to dependencies of your package to actually use/run it. dub does not do actual installation of packages outside of its own ecosystem.

C:\Users\ZombineDev>dub run dlangide --compiler=dmd --arch=x86_64
Building package dlangide in C:\Users\ZombineDev\AppData\Roaming\dub\packages\dlangide-0.7.89\dlangide\
Fetching dcd 0.9.1 (getting selected version)...
Fetching msgpack-d 1.0.0-beta.6 (getting selected version)...
Fetching dsfml 2.1.1 (getting selected version)...
Fetching libdparse 0.7.1 (getting selected version)...
Fetching dsymbol 0.2.9 (getting selected version)...
Fetching dlangui 0.9.142 (getting selected version)...
Fetching derelict-util 2.0.6 (getting selected version)...
Fetching x11 1.0.19 (getting selected version)...
Fetching derelict-gl3 1.0.23 (getting selected version)...
Fetching derelict-ft 1.1.3 (getting selected version)...
Fetching derelict-sdl2 2.0.2 (getting selected version)...
Fetching emsi_containers 0.5.3 (getting selected version)...
Performing "debug" build using dmd for x86_64.
emsi_containers 0.5.3: building configuration "library"...
libdparse 0.7.1: building configuration "library"...
dsymbol 0.2.9: building configuration "library"...
msgpack-d 1.0.0-beta.6: building configuration "library"...
dcd 0.9.1: building configuration "library"...
derelict-util 2.0.6: building configuration "library"...
derelict-ft 1.1.3: building configuration "library"...
derelict-gl3 1.0.23: building configuration "library"...
derelict-sdl2 2.0.2: building configuration "library"...
dlangui 0.9.142: building configuration "default"...
dlangide 0.7.89: building configuration "default"...
Linking...
Copying files for dlangui...
Copying files for dlangide...
Running .\AppData\Roaming\dub\packages\dlangide-0.7.89\dlangide\bin\dlangide.exe

Getting the code via git should work just as well:

C:\code>git clone https://github.com/buggins/dlangide
Cloning into 'dlangide'...
remote: Counting objects: 5445, done.
remote: Compressing objects: 100% (167/167), done.
remote: Total 5445 (delta 180), reused 174 (delta 95), pack-reused 5173
Receiving objects: 100% (5445/5445), 6.62 MiB | 1.14 MiB/s, done.
Resolving deltas: 100% (3267/3267), done.

C:\code>cd dlangide

C:\code\dlangide>dub run --compiler=dmd --arch=x86_64
Performing "debug" build using dmd for x86_64.
emsi_containers 0.5.3: target for configuration "library" is up to date.
libdparse 0.7.1: target for configuration "library" is up to date.
dsymbol 0.2.9: target for configuration "library" is up to date.
msgpack-d 1.0.0-beta.6: target for configuration "library" is up to date.
dcd 0.9.1: target for configuration "library" is up to date.
derelict-util 2.0.6: target for configuration "library" is up to date.
derelict-ft 1.1.3: target for configuration "library" is up to date.
derelict-gl3 1.0.23: target for configuration "library" is up to date.
derelict-sdl2 2.0.2: target for configuration "library" is up to date.
dlangui 0.9.142: building configuration "default"...
dlangide 0.7.89: building configuration "default"...
Linking...
To force a rebuild of up-to-date targets, run again with --force.
Copying files for dlangui...
Copying files for dlangide...
Running .\bin\dlangide.exe

So in summary, make sure to have VS 2017 Community C++ toolchain installed and build either with LDC, or DMD, but in 'x86_64' mode or 'x86_mscoff'. The 'x86' arch causes dmd to use its Optlink linker, which for some reason has a problem with DlangIDE. Since LDC doesn't support Optlink, there's no 'x86_mscoff' dub arch and you have to use just 'x86'.
So working combinations are:

dub run --compiler=dmd --arch=x86_mscoff
dub run --compiler=dmd --arch=x86_64

dub run --compiler=ldc2 --arch=x86
dub run --compiler=ldc2 --arch=x86_64
September 26, 2017
On Saturday, 23 September 2017 at 14:43:15 UTC, Flaze07 wrote:
> hi, I am trying to build DlangIde for windows...(if Dlangide is not available for windows...well, I am terribly sorry)
> and here is how it turns out
> C:\Users\User\Documents\GitHub\dlangide>dub clean-caches
>
> C:\Users\User\Documents\GitHub\dlangide>dub upgrade --force-remove
> Upgrading project in C:\Users\User\Document
>
> C:\Users\User\Documents\GitHub\dlangide>dub build -- force
> Performing "debug" build using dmd for x86.
> emsi_containers 0.5.3: building configuration "library"...
> libdparse 0.7.1: building configuration "library"...
> dsymbol 0.2.9: building configuration "library"...
> msgpack-d 1.0.0-beta.6: building configuration "library"...
> dcd 0.9.1: building configuration "library"...
> derelict-util 2.0.6: building configuration "library"...
> derelict-ft 1.1.3: building configuration "library"...
> derelict-gl3 1.0.23: building configuration "library"...
> derelict-sdl2 2.0.2: building configuration "library"...
> dlangui 0.9.142: building configuration "default"...
> dlangide ~master: building configuration "default"...
> Linking...
> Error: linker exited with status 1
> dmd failed with exit code 1.
>
> C:\Users\User\Documents\GitHub\dlangide>

For me, it builds ok.
I have Visual Studio 2015 Community Edition installed.

BTW, there are prebuilt win32 binaries available on https://github.com/buggins/dlangide/releases

September 28, 2017
On Sunday, 24 September 2017 at 11:14:46 UTC, Petar Kirov [ZombineDev] wrote:
> The 'x86' arch causes dmd to use its Optlink linker, which for some
> reason has a problem with DlangIDE.

With previous versions of DlangIDE it was work fine. With current version I got "Unexepted OPTLINK Termination" ( https://www.dropbox.com/s/yq1raqh8huiko5j/error.png?dl=0 ).
If the problem is in Optlink then why dub uses it by default? Why not x86_64 for example?

(and yep, dub run --compiler=dmd --arch=x86_64 solved this)

September 28, 2017
On Thursday, 28 September 2017 at 09:13:30 UTC, Dmitry wrote:
> On Sunday, 24 September 2017 at 11:14:46 UTC, Petar Kirov [ZombineDev] wrote:
>> The 'x86' arch causes dmd to use its Optlink linker, which for some
>> reason has a problem with DlangIDE.
>
> With previous versions of DlangIDE it was work fine. With current version I got "Unexepted OPTLINK Termination" ( https://www.dropbox.com/s/yq1raqh8huiko5j/error.png?dl=0 ).
> If the problem is in Optlink then why dub uses it by default? Why not x86_64 for example?
>
> (and yep, dub run --compiler=dmd --arch=x86_64 solved this)

Both object file formats, OMF (dmd -m32) - used by Optlink and COFF (dmd -m32mscoff and dmd -m64) - used by Visual Studio C++, and their respective linkers have different pros and cons.  So you have the option to choose between either of them with DMD. Since COFF support was added after OMF historically it was the more unstable of the two, AFAIK. It just happens that for this particular case it is the better option, or at least will be until this bug is fixed. Also, since Optlink is bundled with the DMD installation, and VS is a separate large download, Dub users are more likely to only have Optlink, which is why its the default one.