Jump to page: 1 2
Thread overview
So what is the state of cross-compilation in D?
Jan 17, 2018
Rel
Jan 17, 2018
Kagamin
Jan 19, 2018
Rel
Jan 19, 2018
Jonathan M Davis
Jan 19, 2018
rikki cattermole
Jan 19, 2018
Joakim
Jan 19, 2018
Jacob Carlborg
Jan 19, 2018
Kagamin
Jan 17, 2018
Andre Pany
Jul 28, 2018
Mike Franklin
Jul 28, 2018
Andre Pany
Jan 17, 2018
Nicholas Wilson
Jan 17, 2018
Jacob Carlborg
Jan 17, 2018
Jacob Carlborg
January 17, 2018
Well, to be completely honest with you the only one
thing I like about the Go programming language is the
ability to easily cross-compile your Go program from
any supported OS to any supported OS.

So I was wondering what is the story of cross-compilation
for different D language compilers? Is it possible to some
extent now? Do you guys have interest in it?

Basically as far as I understood what makes Go suitable
for cross-compilation is their own linker implementation,
and D compilers use current system linker.
January 17, 2018
https://wiki.dlang.org/Build_D_for_Android
https://wiki.dlang.org/Building_LDC_runtime_libraries
https://github.com/ldc-developers/ldc/pull/2142#issuecomment-304472412
January 17, 2018
On Wednesday, 17 January 2018 at 12:06:23 UTC, Rel wrote:
> Well, to be completely honest with you the only one
> thing I like about the Go programming language is the
> ability to easily cross-compile your Go program from
> any supported OS to any supported OS.
>
> So I was wondering what is the story of cross-compilation
> for different D language compilers? Is it possible to some
> extent now? Do you guys have interest in it?
>
> Basically as far as I understood what makes Go suitable
> for cross-compilation is their own linker implementation,
> and D compilers use current system linker.

Cross compiling from Windows to raspberry pi: http://d-land.sepany.de/einstieg-in-die-raspberry-pi-entwicklung-mit-ldc.html

Kind regards
Andre
January 17, 2018
On Wednesday, 17 January 2018 at 12:06:23 UTC, Rel wrote:
> Well, to be completely honest with you the only one
> thing I like about the Go programming language is the
> ability to easily cross-compile your Go program from
> any supported OS to any supported OS.
>
> So I was wondering what is the story of cross-compilation
> for different D language compilers? Is it possible to some
> extent now? Do you guys have interest in it?
>
> Basically as far as I understood what makes Go suitable
> for cross-compilation is their own linker implementation,
> and D compilers use current system linker.

LDC is a cross compiler by default.
the `-mtriple` flag tells LDC what arch, OS and cpu to target.
`-linker=lld-link` or `-linker=lld` (not really sure of the difference) will use LLVM crosslinker, so provided you have the appropriate libraries to link against it should work
January 17, 2018
On 2018-01-17 13:06, Rel wrote:
> Well, to be completely honest with you the only one
> thing I like about the Go programming language is the
> ability to easily cross-compile your Go program from
> any supported OS to any supported OS.
> 
> So I was wondering what is the story of cross-compilation
> for different D language compilers? Is it possible to some
> extent now? 

Yes, it works with LDC.

> Do you guys have interest in it?

Yes.

> Basically as far as I understood what makes Go suitable
> for cross-compilation is their own linker implementation,
> and D compilers use current system linker.

If the system linker supports cross-compilation it's no problem. Here's a Dockerfile [1] with LDC that cross-compiles to macOS.

[1] https://github.com/jacob-carlborg/docker-ldc-darwin/blob/master/Dockerfile

-- 
/Jacob Carlborg
January 17, 2018
On 2018-01-17 14:28, Nicholas Wilson wrote:

> LDC is a cross compiler by default.
> the `-mtriple` flag tells LDC what arch, OS and cpu to target.
> `-linker=lld-link` or `-linker=lld` (not really sure of the difference) will use LLVM crosslinker, so provided you have the appropriate libraries to link against it should work

Unfortunately LLD is not ready yet for all targets, but for those targets it is ready it should work.

-- 
/Jacob Carlborg
January 19, 2018
On Wednesday, 17 January 2018 at 12:31:35 UTC, Kagamin wrote:
> https://wiki.dlang.org/Build_D_for_Android
> https://wiki.dlang.org/Building_LDC_runtime_libraries
> https://github.com/ldc-developers/ldc/pull/2142#issuecomment-304472412

As far as I understand I will need a C toolchain that
allows cross-compilation to target OS in order to build
runtime libraries, is it correct? Why is D's runtime library
is written in C? I thought that D is pretty much capable to
have runtime libraries written in D, especially after the
introduction of -betterC flag.

I'd like to cross-compile from Windows machine to Linux and
Mac OSX. Where can I get C toolchain that will allow me to
cross-compile D's runtime libraries from Windows to Linux
and Mac OSX?
January 19, 2018
On Friday, January 19, 2018 06:53:16 Rel via Digitalmars-d wrote:
> On Wednesday, 17 January 2018 at 12:31:35 UTC, Kagamin wrote:
> > https://wiki.dlang.org/Build_D_for_Android https://wiki.dlang.org/Building_LDC_runtime_libraries https://github.com/ldc-developers/ldc/pull/2142#issuecomment-304472412
>
> As far as I understand I will need a C toolchain that allows cross-compilation to target OS in order to build runtime libraries, is it correct? Why is D's runtime library is written in C? I thought that D is pretty much capable to have runtime libraries written in D, especially after the introduction of -betterC flag.

D's runtime is not written in C. It's written in D. However, the C linker is used to link, and by default, it's used by calling the C/C++ compiler (at least, that's what dmd does). ldc would be using LLVM's linker and possibly using it through clang.

However, D's runtime does _call_ into various C functions, because they're part of the OS' API, and that means that D is ultimately using the C runtime in addition to its own. So, C is also used in that way even though none of D's runtime is written in C.

- Jonathan M Davis

January 19, 2018
On 2018-01-19 07:53, Rel wrote:

> I'd like to cross-compile from Windows machine to Linux and
> Mac OSX. Where can I get C toolchain that will allow me to
> cross-compile D's runtime libraries from Windows to Linux
> and Mac OSX?

Here's a Dockerfile that cross-compiles to macOS:

https://github.com/jacob-carlborg/docker-ldc-darwin/blob/master/Dockerfile

-- 
/Jacob Carlborg
January 19, 2018
On 19/01/2018 8:08 AM, Jonathan M Davis wrote:
> On Friday, January 19, 2018 06:53:16 Rel via Digitalmars-d wrote:
>> On Wednesday, 17 January 2018 at 12:31:35 UTC, Kagamin wrote:
>>> https://wiki.dlang.org/Build_D_for_Android
>>> https://wiki.dlang.org/Building_LDC_runtime_libraries
>>> https://github.com/ldc-developers/ldc/pull/2142#issuecomment-304472412
>>
>> As far as I understand I will need a C toolchain that
>> allows cross-compilation to target OS in order to build
>> runtime libraries, is it correct? Why is D's runtime library
>> is written in C? I thought that D is pretty much capable to
>> have runtime libraries written in D, especially after the
>> introduction of -betterC flag.
> 
> D's runtime is not written in C. It's written in D. However, the C linker is
> used to link, and by default, it's used by calling the C/C++ compiler (at
> least, that's what dmd does). ldc would be using LLVM's linker and possibly
> using it through clang.

It's in built into LLVM. No requirements on having clang (we already have it on offer).

> However, D's runtime does _call_ into various C functions, because they're
> part of the OS' API, and that means that D is ultimately using the C runtime
> in addition to its own. So, C is also used in that way even though none of
> D's runtime is written in C.
> 
> - Jonathan M Davis
> 

« First   ‹ Prev
1 2