raylib-d icon indicating copy to clipboard operation
raylib-d copied to clipboard

unneserry imports hurt wasm compatibility

Open crazymonkyyy opened this issue 1 year ago • 5 comments

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

crazymonkyyy avatar Dec 01 '23 19:12 crazymonkyyy

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

schveiguy avatar Dec 01 '23 19:12 schveiguy

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 avatar Dec 01 '23 19:12 crazymonkyyy

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;
}

crazymonkyyy avatar Dec 01 '23 19:12 crazymonkyyy

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)

schveiguy avatar Dec 01 '23 19:12 schveiguy

https://github.com/schveiguy/raylib-d/blob/07f79053b471efa674b20f1bee9e81edfb92eb58/source/raylib/raymathext.d#L5

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

crazymonkyyy avatar May 23 '24 04:05 crazymonkyyy