@@ -26,17 +26,18 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
2626set (CMAKE_CXX_STANDARD 17)
2727file (TO_CMAKE_PATH "${REACTNATIVE_DIR} " REACTNATIVE_DIR_CMAKE )
2828
29+ set (REACT_NATIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /../../../react-native)
30+ set (input_SRC src/main/cpp/BabylonNativeInterop.cpp ${SHARED_SOURCES} )
31+ include (${REACT_NATIVE_DIR} /ReactAndroid/cmake-utils/ReactNative-application.cmake )
32+
2933# Configure Babylon Native to use JSI
3034set (NAPI_JAVASCRIPT_ENGINE "JSI" CACHE STRING "The JavaScript engine to power N-API" )
31- add_subdirectory (${REACTNATIVE_DIR_CMAKE} /ReactCommon/jsi/jsi ${CMAKE_CURRENT_BINARY_DIR} /jsi )
32- target_include_directories (jsi INTERFACE ${REACTNATIVE_DIR_CMAKE} /ReactCommon/jsi )
33- target_include_directories (jsi INTERFACE ${REACTNATIVE_DIR_CMAKE} /ReactAndroid/src/main/jni/react/turbomodule )
34- target_include_directories (jsi INTERFACE ${REACTNATIVE_DIR_CMAKE} /ReactCommon/callinvoker )
3535
3636list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR} /src/" )
3737
3838set (BABYLON_NATIVE_BUILD_APPS OFF CACHE BOOL "" )
3939set (BABYLON_REACT_NATIVE_SHARED_DIR "${CMAKE_CURRENT_LIST_DIR} /../shared" )
40+ set (BABYLON_NATIVE_PLUGIN_NATIVEENGINE_WEBP OFF CACHE BOOL "" )
4041add_subdirectory (${BABYLON_REACT_NATIVE_SHARED_DIR} ${CMAKE_CURRENT_BINARY_DIR} /shared )
4142
4243if (TARGET NativeXr)
@@ -57,92 +58,130 @@ disable_warnings(Scheduling) # deprecated stl
5758disable_warnings (Canvas )
5859disable_warnings (Window )
5960
60- add_library (fbjni SHARED IMPORTED )
61- set_target_properties (fbjni PROPERTIES
62- IMPORTED_LOCATION ${FBJNI_LIBPATH} /${ANDROID_ABI}/libfbjni.so
63- INTERFACE_INCLUDE_DIRECTORIES ${FBJNI_INCPATH} )
64-
65- add_library (BabylonNative SHARED
66- src/main/cpp/BabylonNativeInterop.cpp
67- ${SHARED_SOURCES} )
68-
69- disable_warnings (BabylonNative ) # deprecated stl
70-
71- # >= React Native 0.71 with prefabs
72- include (${REACTNATIVE_DIR_CMAKE} /ReactAndroid/cmake-utils/folly-flags.cmake )
73-
74- # We configured the REACT_COMMON_DIR variable as it's commonly used to reference
75- # shared C++ code in other targets.
76- set (REACT_COMMON_DIR ${REACT_ANDROID_DIR} /../ReactCommon)
77-
78- # If you have ccache installed, we're going to honor it.
79- find_program (CCACHE_FOUND ccache )
80- if (CCACHE_FOUND)
81- set_property (GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache )
82- set_property (GLOBAL PROPERTY RULE_LAUNCH_LINK ccache )
83- endif (CCACHE_FOUND )
8461
85- set (BUILD_DIR ${PROJECT_BUILD_DIR} )
86- # When building on Windows, PROJECT_BUILD_DIR might be empty. If it is, then the build breaks because of string replace
87- if (CMAKE_HOST_WIN32 AND NOT "${PROJECT_BUILD_DIR} " STREQUAL "" )
88- string (REPLACE "\\ " "/" BUILD_DIR ${BUILD_DIR} )
62+ add_library (BabylonNativeShared STATIC ${SHARED_SOURCES} )
63+ disable_warnings (${CMAKE_PROJECT_NAME} ) # deprecated stl
64+ disable_warnings (BabylonNativeShared )
65+ target_include_directories (BabylonNativeShared PRIVATE ${BABYLON_REACT_NATIVE_SHARED_DIR} )
66+
67+ target_link_libraries (${CMAKE_PROJECT_NAME} BabylonNativeShared )
68+
69+ set (TURBOMODULE_DIR "${REACTNATIVE_DIR_CMAKE} /ReactAndroid/src/main/jni/react/turbomodule/" )
70+ if (EXISTS "${TURBOMODULE_DIR} /CMakeLists.txt" )
71+ # >= React Native 0.71 with prefabs
72+ include (${REACTNATIVE_DIR_CMAKE} /ReactAndroid/cmake-utils/folly-flags.cmake )
73+
74+ # We configured the REACT_COMMON_DIR variable as it's commonly used to reference
75+ # shared C++ code in other targets.
76+ set (REACT_COMMON_DIR ${REACT_ANDROID_DIR} /../ReactCommon)
77+
78+ # If you have ccache installed, we're going to honor it.
79+ find_program (CCACHE_FOUND ccache )
80+ if (CCACHE_FOUND)
81+ set_property (GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache )
82+ set_property (GLOBAL PROPERTY RULE_LAUNCH_LINK ccache )
83+ endif (CCACHE_FOUND )
84+
85+ set (BUILD_DIR ${PROJECT_BUILD_DIR} )
86+ # When building on Windows, PROJECT_BUILD_DIR might be empty. If it is, then the build breaks because of string replace
87+ if (CMAKE_HOST_WIN32 AND NOT "${PROJECT_BUILD_DIR} " STREQUAL "" )
88+ string (REPLACE "\\ " "/" BUILD_DIR ${BUILD_DIR} )
89+ endif ()
90+
91+ target_include_directories (${CMAKE_PROJECT_NAME}
92+ PUBLIC
93+ ${CMAKE_CURRENT_SOURCE_DIR}
94+ ${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni )
95+
96+ target_compile_options (${CMAKE_PROJECT_NAME} PRIVATE -Wall -Werror -fexceptions -frtti -std=c++17 -DWITH_INSPECTOR=1 -DLOG_TAG= \"ReactNative\" )
97+
98+ find_package(fbjni REQUIRED CONFIG)
99+ add_library(fbjni ALIAS fbjni::fbjni)
100+
101+ target_link_libraries(BabylonNativeShared
102+ GLESv3
103+ android
104+ EGL
105+ log
106+ -lz
107+ arcana
108+ fbjni # via 3rd party prefab
109+ AndroidExtensions
110+ GraphicsDevice
111+ JsRuntime
112+ NativeCapture
113+ MachineIndependent
114+ NativeEngine
115+ NativeInput
116+ NativeOptimizations
117+ NativeTracing
118+ Window
119+ XMLHttpRequest
120+ Canvas
121+
122+ ${ADDITIONAL_LIBRARIES} )
123+
124+ # We use an interface target to propagate flags to all the generated targets
125+ # such as the folly flags or others.
126+ #add_library(common_flags INTERFACE)
127+ #target_compile_options(common_flags INTERFACE ${folly_FLAGS} )
128+ #target_link_libraries(ReactAndroid::react_codegen_rncore INTERFACE common_flags)
129+
130+ # If project is on RN CLI v9, then we can use the following lines to link against the autolinked 3rd party libraries.
131+ if(EXISTS ${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni/Android-rncli.cmake)
132+ include(${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni/Android-rncli.cmake)
133+ target_link_libraries(${CMAKE_PROJECT_NAME} ${AUTOLINKED_LIBRARIES} )
134+ foreach(autolinked_library ${AUTOLINKED_LIBRARIES} )
135+ target_link_libraries(${autolinked_library} common_flags)
136+ endforeach()
137+ endif()
138+
139+ # If project is running codegen at the app level, we want to link and build the generated library.
140+ if(EXISTS ${PROJECT_BUILD_DIR} /generated/source/codegen/jni/CMakeLists.txt)
141+ add_subdirectory(${PROJECT_BUILD_DIR} /generated/source/codegen/jni/ codegen_app_build)
142+ get_property(APP_CODEGEN_TARGET DIRECTORY ${PROJECT_BUILD_DIR} /generated/source/codegen/jni/ PROPERTY BUILDSYSTEM_TARGETS)
143+ target_link_libraries(${CMAKE_PROJECT_NAME} ${APP_CODEGEN_TARGET} )
144+ target_link_libraries(${APP_CODEGEN_TARGET} common_flags)
145+ endif()
146+
147+ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${SHARED_INCLUDES} )
148+ else()
149+ message(FATAL_ERROR " <= React Native 0.70 not supported anymore ")
150+ # <= React Native 0.70
151+ # Define a minimal version of libturbomodulejsijni.so that includes CallInvokerHolder.cpp.
152+ # This is the only part of the TurboModule system we need for now. Eventually when TurboModule
153+ # support ships with React Native, we'll need to strip this back out.
154+
155+ list(APPEND TURBOMODULE_INC_DIRS " ${REACTNATIVE_DIR_CMAKE} /ReactCommon/callinvoker ")
156+ list(APPEND TURBOMODULE_INC_DIRS " ${REACTNATIVE_DIR_CMAKE} /ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni ")
157+ add_library(turbomodulejsijni SHARED ${REACTNATIVE_DIR_CMAKE} /ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CallInvokerHolder.cpp)
158+ target_include_directories(turbomodulejsijni PUBLIC " ${TURBOMODULE_INC_DIRS} ")
159+ target_link_libraries(turbomodulejsijni fbjni)
160+
161+ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${SHARED_INCLUDES} )
162+
163+ target_link_libraries(BabylonNativeShared
164+ GLESv3
165+ android
166+ EGL
167+ log
168+ -lz
169+ arcana
170+ jsi
171+ #turbomodulejsijni
172+ AndroidExtensions
173+ GraphicsDevice
174+ JsRuntime
175+ NativeCapture
176+ NativeEngine
177+ NativeInput
178+ NativeOptimizations
179+ NativeTracing
180+ Window
181+ XMLHttpRequest
182+ Canvas
183+ ${ADDITIONAL_LIBRARIES} )
89184endif()
90185
91- target_include_directories (BabylonNative
92- PUBLIC
93- ${CMAKE_CURRENT_SOURCE_DIR}
94- ${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni )
95-
96- target_compile_options (BabylonNative PRIVATE -Wall -Werror -fexceptions -frtti -std=c++17 -DWITH_INSPECTOR=1 -DLOG_TAG= \"ReactNative\" )
97-
98- find_package(fbjni REQUIRED CONFIG)
99- add_library(fbjni ALIAS fbjni::fbjni)
100-
101- target_link_libraries(BabylonNative
102- GLESv3
103- android
104- EGL
105- log
106- -lz
107- arcana
108- fbjni # via 3rd party prefab
109- AndroidExtensions
110- GraphicsDevice
111- JsRuntime
112- NativeCapture
113- NativeEngine
114- NativeInput
115- NativeOptimizations
116- NativeTracing
117- Window
118- XMLHttpRequest
119- Canvas
120- ${ADDITIONAL_LIBRARIES} )
121-
122- # We use an interface target to propagate flags to all the generated targets
123- # such as the folly flags or others.
124- #add_library(common_flags INTERFACE)
125- #target_compile_options(common_flags INTERFACE ${folly_FLAGS} )
126- #target_link_libraries(ReactAndroid::react_codegen_rncore INTERFACE common_flags)
127-
128- # If project is on RN CLI v9, then we can use the following lines to link against the autolinked 3rd party libraries.
129- if(EXISTS ${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni/Android-rncli.cmake)
130- include(${PROJECT_BUILD_DIR} /generated/rncli/src/main/jni/Android-rncli.cmake)
131- target_link_libraries(${CMAKE_PROJECT_NAME} ${AUTOLINKED_LIBRARIES} )
132- foreach(autolinked_library ${AUTOLINKED_LIBRARIES} )
133- target_link_libraries(${autolinked_library} common_flags)
134- endforeach()
135- endif()
136-
137- # If project is running codegen at the app level, we want to link and build the generated library.
138- if(EXISTS ${PROJECT_BUILD_DIR} /generated/source/codegen/jni/CMakeLists.txt)
139- add_subdirectory(${PROJECT_BUILD_DIR} /generated/source/codegen/jni/ codegen_app_build)
140- get_property(APP_CODEGEN_TARGET DIRECTORY ${PROJECT_BUILD_DIR} /generated/source/codegen/jni/ PROPERTY BUILDSYSTEM_TARGETS)
141- target_link_libraries(${CMAKE_PROJECT_NAME} ${APP_CODEGEN_TARGET} )
142- target_link_libraries(${APP_CODEGEN_TARGET} common_flags)
143- endif()
144-
145- target_include_directories(BabylonNative PRIVATE ${SHARED_INCLUDES} )
146-
147- target_compile_definitions(BabylonNative PRIVATE BABYLON_NATIVE_PLUGIN_NATIVEXR=${BABYLON_NATIVE_PLUGIN_NATIVEXR} )
148- target_compile_definitions(BabylonNative PRIVATE BABYLON_NATIVE_PLUGIN_NATIVECAMERA=${BABYLON_NATIVE_PLUGIN_NATIVECAMERA} )
186+ target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE BABYLON_NATIVE_PLUGIN_NATIVEXR=${BABYLON_NATIVE_PLUGIN_NATIVEXR} )
187+ target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE BABYLON_NATIVE_PLUGIN_NATIVECAMERA=${BABYLON_NATIVE_PLUGIN_NATIVECAMERA} )
0 commit comments