emscripten-core/emsdk

em++ hangs when run

Matt-DESTROYER opened this issue · 2 comments

Trying to build a simple C++ file as part of a mini experiment/project. I might be doing something completely wrong, I'm not sure, but essentially when I try to compile the below C++ file with the below command, it just hangs everytime (I keep waiting around ten minutes and getting nothing, I assume it probably shouldn't take that long regardless).
Compute.cpp

#ifndef __int64
#define __int64 long long
#endif

extern "C" {
	__int64  piBBP(__int64 offset, __int64 digits);
}

long double decMod(long double x, long double y) {
	while (x >= y) {
		x -= y;
	}
	return x;
}

__int64 modPow(__int64 b, __int64 e, __int64 m) {
	b = b % m;
	__int64 y = 1;
	while (e > 0) {
		if (e & 1) {
			y = (y * b) % m;
		}
		b = (b * b) % m;
		e >>= 1;
	}
	return y;
}

long double mod(long double x, long double n) {
	x = decMod(x, n);
	return x < 0 ? x + n : x;
}

long double S(__int64 j, __int64 n) {
	long double left = 0;
	for (__int64 k = 0; k <= n; k++) {
		__int64 r = 8 * k + j;
		left = mod(left + (long double)modPow(16, n - k, r) / r, 1);
	}

	long double right = 0;
	for (__int64 k = n + 1; ; k++) {
		long double rnew = right + pow(16, (n - k)) / (8 * k + j);
		if (right == rnew) {
			break;
		}
		right = rnew;
	}
	return left + right;
}

__int64 pow(__int64 x, __int64 y) {
	__int64 res = 1;
	for (;;) {
		if (y & 1) {
			res *= x;
		}
		y >>= 1;
		if (!y) {
			break;
		}
		x *= x;
	}
	return res;
}

__int64  piBBP(__int64 offset, __int64 digits) {
	return (__int64)(pow(16, digits) * mod(4 * S(1, offset) - 2 * S(4, offset)- S(5, offset) - S(6, offset), 1));
}

(I was previously using the cmath header, but even without this it still fails.)
CMD

em++ Compute.cpp -O2 -s EXPORTED_FUNCTIONS=_piBPP --no-entry -o Compute.wasm

Eventually, on one attempt I got this warning:

cache:WARNING: Accessing the Emscripten cache at "C:\Program Files\emsdk\upstream\emscripten\cache" (for "sanity") is taking a long time, another process should be writing to it. If there are none and you suspect this process has deadlocked, try deleting the lock file "C:\Program Files\emsdk\upstream\emscripten\cache\cache.lock" and try again. If this occurs deterministically, consider filing a bug.

A quick look in the folder C:\Program Files\emsdk\upstream\emscripten\cache\ shows there is no such file as cache.lock...

It did seem to work previously and my C++ file would compile (although at the time I hadn't figured out how to configure it properly so it basically output an essentially empty WASM file), but I have not been able to get this working since. I even tried completely deleting and reinstalling emsdk and that didn't seem to work.

Note:
This is on x64 Windows 11.

Possibly this is a windows issue of some kind, but the first thing I would try is manually delete that cache/ directory entirely. Emscripten will recreate it and perhaps that will fix the issue for you.

Thanks, that seemed to work!