Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I conditionally compile code for emscripten?

Working with a codebase which supports building for multiple Operating Systems, it is only sensible, where modifications for Emscripten are required, to integrate them into the same codebase, with the assistance of conditional compilation to let it continue to work in other environments.

There doesn't seem to be any documentation on the topic, though, which seems very poor to me, nor can I find any questions about it, which seems very surprising to me—I expected it to be well-trodden and -documented territory.

How can I do this?

(I have looked at tools/shared.py, this seems to suggest that #ifdef EMSCRIPTEN or #ifdef __EMSCRIPTEN__ could be used; I'm still asking this question to determine if I am correct, if this is the correct way of doing it, perhaps even which should be used.)

like image 386
Chris Morgan Avatar asked Jun 12 '13 07:06

Chris Morgan


2 Answers

According to Detecting Emscripten in preprocessor, the correct define to use is __EMSCRIPTEN__.

In October 2016, a strict build mode was introduced which, when enabled, removes the EMSCRIPTEN define. Therefore it is not recommended to use EMSCRIPTEN even though it still works in non-strict build mode.

like image 177
Smi Avatar answered Sep 17 '22 13:09

Smi


#ifdef EMSCRIPTEN is the prefered way AFAIK.

Before cluttering your source code with #ifdefs, think about whether it would not make more sense to have certain platform dependent files and let the build tool do the work.

Also, emscripten already defines LINUX, because it handles very much like a Linux system. Normally this behavior already fixes most of the need for platform handling.

like image 39
abergmeier Avatar answered Sep 17 '22 13:09

abergmeier