Jump to page: 1 2 3
Thread overview
Building LDC for the first time
Aug 22, 2014
Daniel N
Aug 22, 2014
Kai Nacke
Aug 24, 2014
Daniel N
Aug 24, 2014
Kai Nacke
Aug 25, 2014
Daniel N
Aug 25, 2014
Kai Nacke
Aug 26, 2014
Daniel N
Aug 26, 2014
Daniel N
Aug 26, 2014
Kai Nacke
Aug 26, 2014
Daniel N
Aug 26, 2014
Kai Nacke
Aug 27, 2014
Daniel N
Aug 27, 2014
Daniel N
Aug 27, 2014
Kai Nacke
Aug 28, 2014
Daniel N
Sep 02, 2014
David Nadlinger
Sep 02, 2014
Daniel N
Sep 02, 2014
Kai Nacke
Sep 03, 2014
David Nadlinger
Sep 03, 2014
Daniel N
Sep 04, 2014
Kai Nacke
Sep 02, 2014
David Nadlinger
Sep 02, 2014
Kai Nacke
Aug 26, 2014
Joakim
Aug 27, 2014
Daniel N
August 22, 2014
Dear All,

I downloaded ldc-0.14.0-src.tar.gz and tried following the instructions located at:
http://wiki.dlang.org/Building_LDC_on_MinGW_x86

I was only partially successful.

$ uname
MINGW32_NT-6.1

My version:
LDC - the LLVM D compiler (0.14.0):
  based on DMD v2.065 and LLVM 3.5.0svn
  Default target: i686-pc-windows-gnu

Official version:
LDC - the LLVM D compiler (0.14.0):
  based on DMD v2.065 and LLVM 3.4.2
  Default target: i686-pc-mingw32

I realize I used too new LLVM, but nevertheless there's two things puzzling me:

1) My targetTriple.getOS() == llvm::Triple::Win32 which results in my compiler invoking the Visual Studio Linker, which isn't necessarily a bad thing, but it was unexpected, because the official build uses ld from MinGW.

2) The compiler builds fine, but the Druntime/Phobos doesn't.
"ldc/import\core\stdc\math.d(672): Error: undefined identifier isnan, did you mean function nan?" I guess that's a consequence of my compiler having an identity crisis, using the wrong version code-path...

The combination of these two issues, is a problem since the official build uses a different toolchain so I cannot use the libs from it together with the MS linker, which means I'm stuck.

I also tried using VS Express 2013:
http://wiki.dlang.org/Building_and_hacking_LDC_on_Windows_using_MSVC

But I can't get it to build either... my stdlib.h already defines:
long double strtold(const char *p,char **endp);
(even if long double is just 8 bytes)

But the workaround in \dmd2\root\longdouble.h redefines it as:
longdouble strtold(const char *p,char **endp);

I didn't find a clean way to solve it, every workaround resulted in a new error down the road until I gave up and switched to using MinGW...

Any advice for me? (I can't switch OS right now).
August 22, 2014
Hi Daniel!

On Friday, 22 August 2014 at 02:24:10 UTC, Daniel N wrote:
> Dear All,
>
> I downloaded ldc-0.14.0-src.tar.gz and tried following the instructions located at:
> http://wiki.dlang.org/Building_LDC_on_MinGW_x86

Thanks for trying LDC!

> I was only partially successful.
>
> $ uname
> MINGW32_NT-6.1
>
> My version:
> LDC - the LLVM D compiler (0.14.0):
>   based on DMD v2.065 and LLVM 3.5.0svn
>   Default target: i686-pc-windows-gnu
>
> Official version:
> LDC - the LLVM D compiler (0.14.0):
>   based on DMD v2.065 and LLVM 3.4.2
>   Default target: i686-pc-mingw32
>
> I realize I used too new LLVM, but nevertheless there's two things puzzling me:

In general, LLVM 3.5 should work, too. But I did not check on MingW.

> 1) My targetTriple.getOS() == llvm::Triple::Win32 which results in my compiler invoking the Visual Studio Linker, which isn't necessarily a bad thing, but it was unexpected, because the official build uses ld from MinGW.

If you look at the default target triple, you notice the change from mingw32 to windows-gnu. I think I missed to change the linker invocation, too. I'll check this.

> 2) The compiler builds fine, but the Druntime/Phobos doesn't.
> "ldc/import\core\stdc\math.d(672): Error: undefined identifier isnan, did you mean function nan?" I guess that's a consequence of my compiler having an identity crisis, using the wrong version code-path...

I'll check this, too. Sounds like a bug.

> The combination of these two issues, is a problem since the official build uses a different toolchain so I cannot use the libs from it together with the MS linker, which means I'm stuck.
>
> I also tried using VS Express 2013:
> http://wiki.dlang.org/Building_and_hacking_LDC_on_Windows_using_MSVC
>
> But I can't get it to build either... my stdlib.h already defines:
> long double strtold(const char *p,char **endp);
> (even if long double is just 8 bytes)
>
> But the workaround in \dmd2\root\longdouble.h redefines it as:
> longdouble strtold(const char *p,char **endp);
>
> I didn't find a clean way to solve it, every workaround resulted in a new error down the road until I gave up and switched to using MinGW...
>
> Any advice for me? (I can't switch OS right now).

I am still using VisualStudio 2012. But I try to fix this, too.

I'll give you a hint when I fixes the mingw problems. Then you can use master branch from GitHub instead of the source distribution.

Regards,
Kai
August 24, 2014
On Friday, 22 August 2014 at 06:13:07 UTC, Kai Nacke wrote:
> I am still using VisualStudio 2012. But I try to fix this, too.
>
> I'll give you a hint when I fixes the mingw problems. Then you can use master branch from GitHub instead of the source distribution.
>
> Regards,
> Kai

Hi Kai,

Awesome, thanks for confirming the bugs!

Best Regards,
Daniel N
August 24, 2014
On Sunday, 24 August 2014 at 16:08:02 UTC, Daniel N wrote:
> On Friday, 22 August 2014 at 06:13:07 UTC, Kai Nacke wrote:
>> I am still using VisualStudio 2012. But I try to fix this, too.
>>
>> I'll give you a hint when I fixes the mingw problems. Then you can use master branch from GitHub instead of the source distribution.
>>
>> Regards,
>> Kai
>
> Hi Kai,
>
> Awesome, thanks for confirming the bugs!
>
> Best Regards,
> Daniel N

Hi Daniel!

The linker issue is fixed now in master branch.

Regards,
Kai
August 25, 2014
On Sunday, 24 August 2014 at 17:24:22 UTC, Kai Nacke wrote:
>
> Hi Daniel!
>
> The linker issue is fixed now in master branch.
>
> Regards,
> Kai

Hi Kai,

verified, now it behaves as expected. :)

Thanks for the super fast support!
Daniel N
August 25, 2014
On Monday, 25 August 2014 at 14:45:49 UTC, Daniel N wrote:
> On Sunday, 24 August 2014 at 17:24:22 UTC, Kai Nacke wrote:
>>
>> Hi Daniel!
>>
>> The linker issue is fixed now in master branch.
>>
>> Regards,
>> Kai
>
> Hi Kai,
>
> verified, now it behaves as expected. :)
>
> Thanks for the super fast support!
> Daniel N

Hi Daniel,

I could not verify the second issue - but I only tried after fixing the linker issue. I have to use VS 2013 soon as LLVM project discusses to raise the minimum VS version to 2013 for version 3.6

Regards,
Kai
August 26, 2014
On Monday, 25 August 2014 at 16:26:33 UTC, Kai Nacke wrote:
> Hi Daniel,
>
> I could not verify the second issue - but I only tried after fixing the linker issue. I have to use VS 2013 soon as LLVM project discusses to raise the minimum VS version to 2013 for version 3.6
>
> Regards,
> Kai

Dear Kai,

I made some progress in identifying the Runtime build issue.

Basically version(LDC) && version(Win32) is true, but version(MinGW) isn't.

I tried a workaround, but MinGW is reserved I was not allowed to set it.
version( LDC )
{
//  version( Win32 )
//      version = MinGW;
    version( Win64 )
        version = MSVC_RUNTIME;
}

If I hack the file, so that the MinGW codepath is taken, then it compiles perfectly(until I hit the same issue in another file).

I haven't backtracked how 'version' is implemented yet, I guess the issue could originate all the way from cmake?

Best Regards,
Daniel N

PS Is there a switch to print the built-in versions? I couldn't find it.
August 26, 2014
On Tuesday, 26 August 2014 at 08:06:40 UTC, Daniel N wrote:
> On Monday, 25 August 2014 at 16:26:33 UTC, Kai Nacke wrote:
>> Hi Daniel,
>>
>> I could not verify the second issue - but I only tried after fixing the linker issue. I have to use VS 2013 soon as LLVM project discusses to raise the minimum VS version to 2013 for version 3.6
>>
>> Regards,
>> Kai

PS I found the bug:
\ldc_master\driver\main.cpp

OLD Code:
#if LDC_LLVM_VER >= 306
            if (global.params.targetTriple.isWindowsGNUEnvironment())
            {
                VersionCondition::addPredefinedGlobalIdent("mingw32"); // For backwards compatibility.
                VersionCondition::addPredefinedGlobalIdent("MinGW");
            }
Working Code:
#if LDC_LLVM_VER >= 305

Best Regards,
Daniel N

August 26, 2014
On Tuesday, 26 August 2014 at 08:36:26 UTC, Daniel N wrote:
> On Tuesday, 26 August 2014 at 08:06:40 UTC, Daniel N wrote:
>> On Monday, 25 August 2014 at 16:26:33 UTC, Kai Nacke wrote:
>>> Hi Daniel,
>>>
>>> I could not verify the second issue - but I only tried after fixing the linker issue. I have to use VS 2013 soon as LLVM project discusses to raise the minimum VS version to 2013 for version 3.6
>>>
>>> Regards,
>>> Kai
>
> PS I found the bug:
> \ldc_master\driver\main.cpp
>
> OLD Code:
> #if LDC_LLVM_VER >= 306
>             if (global.params.targetTriple.isWindowsGNUEnvironment())
>             {
>                 VersionCondition::addPredefinedGlobalIdent("mingw32"); // For backwards compatibility.
>                 VersionCondition::addPredefinedGlobalIdent("MinGW");
>             }
> Working Code:
> #if LDC_LLVM_VER >= 305
>
> Best Regards,
> Daniel N

Thanks for debugging! I commit this asap.

Regards,
Kai
August 26, 2014
On Tuesday, 26 August 2014 at 08:06:40 UTC, Daniel N wrote:
> PS Is there a switch to print the built-in versions? I couldn't find it.
If you just want a list of all of them, it's in dmd2/cond.c:

https://github.com/ldc-developers/ldc/blob/master/dmd2/cond.c#L153

If you want to know what's currently enabled for any particular invocation of the compiler, add the -v flag and it'll show them at the top.
« First   ‹ Prev
1 2 3