Troubleshooting DUB invocations

Sebastiaan Koppe mail at skoppe.eu
Mon Nov 18 19:35:13 UTC 2019


On Wednesday, 13 November 2019 at 18:10:15 UTC, Dukc wrote:
> On Wednesday, 13 November 2019 at 15:41:01 UTC, Sebastiaan 
> Koppe wrote:
>> It has been on the back of my mind since 1.18-beta came out. I 
>> am going to reserve a little time tomorrow to work on it.
>
> Regarding that, perhaps I can save you a bit trouble if you 
> also try to get 1.19 working: if you get compile errors related 
> to SortedRange, the fix is 
> https://github.com/dlang/phobos/pull/7266.

I have had some time today to look into this. About the 
--no-as-needed:

TL;DR: add `--build-mode=allAtOnce` to the dub command.

Kinke made some changes in dub to facilitate separate linking for 
ldc. I am not aware of all the details but the major benefit is 
that it allows cross compilation with dub and ldc.

Because of the separate linking the --no-as-needed turned up. As 
far as I can see it is only needed when compiling for linux.

Which brings up the question, why linux? Aren't we compiling for 
wasm?

Well yes. But that is just the way things worked up until now, 
ldc and dub just pick the host machine.

Luckily there is the new dub `--arch` argument that can take a 
llvm triple, in our case wasm32-unknown-unknown-wasm. This causes 
dub not to add the `--no-as-needed`.

Except, that it also passes the triple upwards the dependency 
tree. Now all the dependencies of spasm get compiled targeting 
wasm. This is a good thing, except that the optional package 
which spasm depends on fails to compile with it. There is a newer 
version that fixes the configuration, but that one fails because 
of the `from.std` import idiom (it imports the std package from 
phobos which doesn't recognise wasm and fails with "Unknown OS").

In the end it is all caused by phobos and druntime not knowing 
anything about wasm. Which I am currently working on behind the 
scenes to fix.

In the meantime I am going to make a PR for the optional package 
to avoid the `from.std` idiom. Although I might end up playing 
whack-a-mole here, as there might be more dependencies that need 
a fix now.

Another workaround that you can use right now is by adding the 
`--build-mode=allAtOnce` argument to dub. It effectively gets you 
the old behaviour. It is what I am using in my CI to get it to go 
green again.


More information about the Digitalmars-d-learn mailing list