Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unneserry imports hurt wasm compatibility #44

Open
crazymonkyyy opened this issue Dec 1, 2023 · 5 comments
Open

unneserry imports hurt wasm compatibility #44

crazymonkyyy opened this issue Dec 1, 2023 · 5 comments

Comments

@crazymonkyyy
Copy link

for whatever reason wasm doesn't have c_long, so ive been hunting down those imports

reasing line 87; narrow to import core.stdc.math:sinf,cosf,sqrtf,powf;

raymathext line 4 import core.stdc.math:cos,sin,atan2,sqrt;

raygui line 17

alias c_long=long
alias c_ulong=ulong

theres probably others and my other modification may have moved the lines around

@schveiguy
Copy link
Owner

Is there a version I can use to only do this for WASM?

@crazymonkyyy
Copy link
Author

I'm using this command in a lazily reargended folder
ldc2 -I./raylib -c -betterC -mtriple=wasm32-unknown-unknown-wasm app.d to get the errors
Im not going to be using dub since I have no reason to think it will be remotely easy to convince it to run enscription; but like some of my edits of "official style guide" approved; ill probably publish my raylib "fork" when I get a hello world running both locally and on wasm

@crazymonkyyy
Copy link
Author

crazymonkyyy commented Dec 1, 2023

version

my hello world that works on both passed to a c compiler and dmd
... its hell honestly, wasmstd is going to be an ugly hack on ugly hack

version(D_BetterC){
	import wasmstd; 
	enum betterc=true;
	extern(C) void main()=>main_;
} else {
	import std;
	enum betterc=false;
	void main()=>main_;
}
void main_(){
	betterc.writeln;
	"hello".writeln;
}

@schveiguy
Copy link
Owner

Note that all the files are generated by dstep, so probably these "changes" would have to go in as manual steps (see the generating.md document)

@crazymonkyyy
Copy link
Author

import std.traits : FieldNameTuple;

template FieldNameTuple(T)
{
    static if (is(T == struct) || is(T == union))
        alias FieldNameTuple = staticMap!(NameOf, T.tupleof[0 .. $ - isNested!T]);
    else static if (is(T == class) || is(T == interface))
        alias FieldNameTuple = staticMap!(NameOf, T.tupleof);
    else
        alias FieldNameTuple = AliasSeq!"";
}
template staticMap(alias fun, args...)
{
    alias staticMap = AliasSeq!();
    static foreach (arg; args)
        staticMap = AliasSeq!(staticMap, fun!arg);
}

I think this is the only place phoboes is used, and this is very easy to replace code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants