1*4440fb50SKudo Chien #include "ReanimatedRuntime.h"
2*4440fb50SKudo Chien 
3*4440fb50SKudo Chien #include <cxxreact/MessageQueueThread.h>
4*4440fb50SKudo Chien #include <jsi/jsi.h>
5*4440fb50SKudo Chien 
6*4440fb50SKudo Chien #include <memory>
7*4440fb50SKudo Chien #include <utility>
8*4440fb50SKudo Chien 
9*4440fb50SKudo Chien #if JS_RUNTIME_HERMES
10*4440fb50SKudo Chien #include "ReanimatedHermesRuntime.h"
11*4440fb50SKudo Chien #elif JS_RUNTIME_V8
12*4440fb50SKudo Chien #include <v8runtime/V8RuntimeFactory.h>
13*4440fb50SKudo Chien #else
14*4440fb50SKudo Chien #if REACT_NATIVE_MINOR_VERSION >= 71
15*4440fb50SKudo Chien #include <jsc/JSCRuntime.h>
16*4440fb50SKudo Chien #else
17*4440fb50SKudo Chien #include <jsi/JSCRuntime.h>
18*4440fb50SKudo Chien #endif // REACT_NATIVE_MINOR_VERSION
19*4440fb50SKudo Chien #endif // JS_RUNTIME
20*4440fb50SKudo Chien 
21*4440fb50SKudo Chien namespace reanimated {
22*4440fb50SKudo Chien 
23*4440fb50SKudo Chien using namespace facebook;
24*4440fb50SKudo Chien using namespace react;
25*4440fb50SKudo Chien 
make(jsi::Runtime * rnRuntime,std::shared_ptr<MessageQueueThread> jsQueue)26*4440fb50SKudo Chien std::shared_ptr<jsi::Runtime> ReanimatedRuntime::make(
27*4440fb50SKudo Chien     jsi::Runtime *rnRuntime,
28*4440fb50SKudo Chien     std::shared_ptr<MessageQueueThread> jsQueue) {
29*4440fb50SKudo Chien #if JS_RUNTIME_HERMES
30*4440fb50SKudo Chien   std::unique_ptr<facebook::hermes::HermesRuntime> runtime =
31*4440fb50SKudo Chien       facebook::hermes::makeHermesRuntime();
32*4440fb50SKudo Chien 
33*4440fb50SKudo Chien   // We don't call `jsQueue->quitSynchronous()` here, since it will be done
34*4440fb50SKudo Chien   // later in ReanimatedHermesRuntime
35*4440fb50SKudo Chien 
36*4440fb50SKudo Chien   return std::make_shared<ReanimatedHermesRuntime>(std::move(runtime), jsQueue);
37*4440fb50SKudo Chien #elif JS_RUNTIME_V8
38*4440fb50SKudo Chien   // This is required by iOS, because there is an assertion in the destructor
39*4440fb50SKudo Chien   // that the thread was indeed `quit` before.
40*4440fb50SKudo Chien   jsQueue->quitSynchronous();
41*4440fb50SKudo Chien 
42*4440fb50SKudo Chien   auto config = std::make_unique<rnv8::V8RuntimeConfig>();
43*4440fb50SKudo Chien   config->enableInspector = false;
44*4440fb50SKudo Chien   config->appName = "reanimated";
45*4440fb50SKudo Chien   return rnv8::createSharedV8Runtime(rnRuntime, std::move(config));
46*4440fb50SKudo Chien #else
47*4440fb50SKudo Chien   // This is required by iOS, because there is an assertion in the destructor
48*4440fb50SKudo Chien   // that the thread was indeed `quit` before
49*4440fb50SKudo Chien   jsQueue->quitSynchronous();
50*4440fb50SKudo Chien 
51*4440fb50SKudo Chien   return facebook::jsc::makeJSCRuntime();
52*4440fb50SKudo Chien #endif
53*4440fb50SKudo Chien }
54*4440fb50SKudo Chien 
55*4440fb50SKudo Chien } // namespace reanimated
56