Skip to content

Commit 166dd3e

Browse files
android react-native stub
1 parent 835c06e commit 166dd3e

2 files changed

Lines changed: 132 additions & 90 deletions

File tree

Modules/@babylonjs/react-native/android/CMakeLists.txt

Lines changed: 129 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,18 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
2626
set(CMAKE_CXX_STANDARD 17)
2727
file(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
3034
set(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

3636
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/src/")
3737

3838
set(BABYLON_NATIVE_BUILD_APPS OFF CACHE BOOL "")
3939
set(BABYLON_REACT_NATIVE_SHARED_DIR "${CMAKE_CURRENT_LIST_DIR}/../shared")
40+
set(BABYLON_NATIVE_PLUGIN_NATIVEENGINE_WEBP OFF CACHE BOOL "")
4041
add_subdirectory(${BABYLON_REACT_NATIVE_SHARED_DIR} ${CMAKE_CURRENT_BINARY_DIR}/shared)
4142

4243
if (TARGET NativeXr)
@@ -57,92 +58,130 @@ disable_warnings(Scheduling) # deprecated stl
5758
disable_warnings(Canvas)
5859
disable_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})
89184
endif()
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})
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// react-native cmake script get only *.cpp from current directory
2+
//
3+
#include "src/main/cpp/BabylonNativeInterop.cpp"

0 commit comments

Comments
 (0)