Skip to content

Commit d50b04d

Browse files
committed
Rag refactored to match rn
1 parent a70155c commit d50b04d

14 files changed

Lines changed: 25816 additions & 402 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
cmake_minimum_required(VERSION 3.18)
2+
project(flutter_rag_bridge)
3+
4+
set(CMAKE_CXX_STANDARD 17)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6+
7+
# Source directory (shared between iOS and Android)
8+
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src)
9+
10+
# Bridge source files
11+
add_library(flutter_rag_bridge SHARED
12+
${SRC_DIR}/flutter_rag_bridge.cpp
13+
)
14+
15+
# Include paths: bridge headers + nlohmann/json
16+
target_include_directories(flutter_rag_bridge PRIVATE
17+
${SRC_DIR}
18+
${SRC_DIR}/third_party
19+
)
20+
21+
# Link against prebuilt librac_commons.so
22+
# The .so files are downloaded by build.gradle into build/jniLibs/ or src/main/jniLibs/
23+
# We find them relative to the current ABI
24+
set(JNILIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build/jniLibs/${ANDROID_ABI})
25+
set(JNILIB_DIR_LOCAL ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
26+
27+
# Try build dir first (remote mode), then local dir
28+
if(EXISTS "${JNILIB_DIR}/librac_commons.so")
29+
set(RAC_LIB_DIR ${JNILIB_DIR})
30+
elseif(EXISTS "${JNILIB_DIR_LOCAL}/librac_commons.so")
31+
set(RAC_LIB_DIR ${JNILIB_DIR_LOCAL})
32+
else()
33+
message(WARNING "librac_commons.so not found for ${ANDROID_ABI} - bridge will have unresolved symbols until runtime")
34+
set(RAC_LIB_DIR ${JNILIB_DIR})
35+
endif()
36+
37+
# Import prebuilt rac_commons
38+
add_library(rac_commons SHARED IMPORTED)
39+
set_target_properties(rac_commons PROPERTIES
40+
IMPORTED_LOCATION "${RAC_LIB_DIR}/librac_commons.so"
41+
)
42+
43+
target_link_libraries(flutter_rag_bridge
44+
rac_commons
45+
log
46+
)

sdk/runanywhere-flutter/packages/runanywhere/android/build.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@ android {
5050

5151
// Consumer proguard rules
5252
consumerProguardFiles 'proguard-rules.pro'
53+
54+
// C++ RAG bridge compilation
55+
externalNativeBuild {
56+
cmake {
57+
cppFlags '-std=c++17'
58+
arguments '-DANDROID_STL=c++_shared'
59+
}
60+
}
61+
}
62+
63+
// CMake build for the C++ RAG bridge
64+
externalNativeBuild {
65+
cmake {
66+
path 'CMakeLists.txt'
67+
}
5368
}
5469

5570
compileOptions {

sdk/runanywhere-flutter/packages/runanywhere/ios/Classes/RACommons.exports

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,3 +568,12 @@ _rac_embeddings_destroy
568568
_rac_embeddings_result_free
569569
_rac_backend_onnx_embeddings_register
570570
_rac_backend_onnx_embeddings_unregister
571+
_flutter_rag_create_pipeline_json
572+
_flutter_rag_destroy_pipeline
573+
_flutter_rag_add_document
574+
_flutter_rag_add_documents_batch_json
575+
_flutter_rag_query_json
576+
_flutter_rag_clear_documents
577+
_flutter_rag_get_document_count
578+
_flutter_rag_get_statistics_json
579+
_flutter_rag_free_string
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../src/flutter_rag_bridge.cpp
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../src/flutter_rag_bridge.h

sdk/runanywhere-flutter/packages/runanywhere/ios/runanywhere.podspec

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ https://github.com/RunanywhereAI/runanywhere-sdks
4848
s.ios.deployment_target = '14.0'
4949
s.swift_version = '5.0'
5050

51-
# Source files (minimal - main logic is in the xcframework)
51+
# Source files: plugin code + C++ RAG bridge (symlinked from ../src/ into Classes/)
5252
s.source_files = 'Classes/**/*'
5353

5454
# Flutter dependency
@@ -124,8 +124,6 @@ https://github.com/RunanywhereAI/runanywhere-sdks
124124
]
125125
end
126126

127-
s.preserve_paths = 'Frameworks/**/*'
128-
129127
# Required frameworks
130128
s.frameworks = [
131129
'Foundation',
@@ -146,14 +144,20 @@ https://github.com/RunanywhereAI/runanywhere-sdks
146144
# Note: -all_load forces all symbols from static libraries to be loaded
147145
# With static linkage (use_frameworks! :linkage => :static in Podfile),
148146
# all symbols from RACommons.xcframework will be available in the final app
147+
# C++ bridge needs nlohmann/json headers and C++17
149148
s.pod_target_xcconfig = {
150149
'DEFINES_MODULE' => 'YES',
151150
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386',
152151
'OTHER_LDFLAGS' => '-lc++ -larchive -lbz2',
153152
'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
154153
'ENABLE_BITCODE' => 'NO',
154+
'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17',
155+
'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/Classes" "${PODS_TARGET_SRCROOT}/Classes/third_party" "${PODS_TARGET_SRCROOT}/../src" "${PODS_TARGET_SRCROOT}/../src/third_party"',
156+
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited)',
155157
}
156158

159+
s.preserve_paths = ['Frameworks/**/*', '../src/**/*', 'Classes/third_party/**/*']
160+
157161
# CRITICAL: These flags propagate to the main app target to ensure all symbols
158162
# from vendored static frameworks are linked AND EXPORTED in the final binary.
159163
#

0 commit comments

Comments
 (0)