Skip to content

Commit 06ed524

Browse files
feat: resolve objectbox at build time (#5)
* fix:alacrity-terminal dependency * feat: resolve objectbox at build time
1 parent c9e0c0d commit 06ed524

5 files changed

Lines changed: 73 additions & 8 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ LD_LIBRARY_PATH=./lib ./mechanix_terminal -b . -s 1 -w 540 -h 620
113113
you need to manually cross-compile the Rust library for ARM64 and ensure it is placed in the lib/ directory of your deployment bundle.
114114
cd mechanix_terminal/rust
115115

116-
## Use CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER to point to your cross-compiler
116+
#### Use CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER to point to your cross-compiler
117117

118118
```bash
119-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
119+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
120120
cargo build --release --target aarch64-unknown-linux-gnu
121121
```

elinux/CMakeLists.txt

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,66 @@ endif()
105105
# Install the Rust library for eLinux
106106
set(RUST_LIB_NAME "librust_lib_mechanix_terminal.so")
107107

108+
# --- ObjectBox Library Setup ---
109+
set(OBX_VERSION "5.3.2")
110+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
111+
set(OBX_ARCH "aarch64")
112+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
113+
set(OBX_ARCH "x64")
114+
else()
115+
message(FATAL_ERROR "Unsupported architecture for ObjectBox: ${CMAKE_SYSTEM_PROCESSOR}")
116+
endif()
117+
118+
set(OBX_NAME "objectbox-linux-${OBX_ARCH}")
119+
set(OBX_TARBALL "${OBX_NAME}.tar.gz")
120+
set(OBX_URL "https://github.com/objectbox/objectbox-c/releases/download/v${OBX_VERSION}/${OBX_TARBALL}")
121+
122+
# Version-scoped cache dir so a version bump always triggers a fresh download
123+
set(OBX_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/objectbox-${OBX_VERSION}-${OBX_ARCH}")
124+
set(OBX_SO_FILE "${OBX_LIB_DIR}/lib/libobjectbox.so")
125+
126+
if(NOT EXISTS "${OBX_SO_FILE}")
127+
message(STATUS "Downloading ObjectBox ${OBX_VERSION} for ${OBX_ARCH}...")
128+
129+
set(OBX_TARBALL_PATH "${CMAKE_CURRENT_BINARY_DIR}/${OBX_TARBALL}")
130+
131+
file(DOWNLOAD "${OBX_URL}" "${OBX_TARBALL_PATH}"
132+
SHOW_PROGRESS
133+
STATUS OBX_DL_STATUS
134+
TLS_VERIFY ON
135+
TIMEOUT 120
136+
)
137+
138+
list(GET OBX_DL_STATUS 0 OBX_DL_ERR)
139+
list(GET OBX_DL_STATUS 1 OBX_DL_MSG)
140+
if(OBX_DL_ERR)
141+
file(REMOVE "${OBX_TARBALL_PATH}")
142+
message(FATAL_ERROR "Failed to download ObjectBox from ${OBX_URL}: ${OBX_DL_MSG}")
143+
endif()
144+
145+
file(MAKE_DIRECTORY "${OBX_LIB_DIR}")
146+
execute_process(
147+
COMMAND ${CMAKE_COMMAND} -E tar xzf "${OBX_TARBALL_PATH}"
148+
WORKING_DIRECTORY "${OBX_LIB_DIR}"
149+
RESULT_VARIABLE OBX_TAR_ERR
150+
)
151+
if(OBX_TAR_ERR)
152+
message(FATAL_ERROR "Failed to extract ObjectBox tarball")
153+
endif()
154+
155+
file(REMOVE "${OBX_TARBALL_PATH}")
156+
157+
if(NOT EXISTS "${OBX_SO_FILE}")
158+
message(FATAL_ERROR "ObjectBox archive extracted but ${OBX_SO_FILE} was not found")
159+
endif()
160+
endif()
161+
162+
# Expose as a proper imported target instead of a raw path
163+
add_library(objectbox SHARED IMPORTED GLOBAL)
164+
set_target_properties(objectbox PROPERTIES
165+
IMPORTED_LOCATION "${OBX_SO_FILE}"
166+
INTERFACE_INCLUDE_DIRECTORIES "${OBX_LIB_DIR}/include"
167+
)
108168
# Check if we are cross-compiling for ARM64
109169
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_LIBRARY_ARCHITECTURE STREQUAL "aarch64-linux-gnu")
110170
set(RUST_TARGET "aarch64-unknown-linux-gnu")
@@ -119,3 +179,6 @@ else()
119179
endif()
120180

121181
install(FILES "${RUST_LIB_SOURCE}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime)
182+
183+
# Add ObjectBox library installation
184+
install(FILES "${OBX_SO_FILE}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime)

lib/core/utils/app_theme.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:flutter/cupertino.dart';
12
import 'package:flutter/material.dart';
23

34
class AppTheme {

pubspec.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -371,10 +371,10 @@ packages:
371371
dependency: transitive
372372
description:
373373
name: matcher
374-
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
374+
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
375375
url: "https://pub.dev"
376376
source: hosted
377-
version: "0.12.18"
377+
version: "0.12.19"
378378
material_color_utilities:
379379
dependency: transitive
380380
description:
@@ -387,10 +387,10 @@ packages:
387387
dependency: transitive
388388
description:
389389
name: meta
390-
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
390+
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
391391
url: "https://pub.dev"
392392
source: hosted
393-
version: "1.17.0"
393+
version: "1.18.0"
394394
mime:
395395
dependency: transitive
396396
description:
@@ -584,10 +584,10 @@ packages:
584584
dependency: transitive
585585
description:
586586
name: test_api
587-
sha256: "19a78f63e83d3a61f00826d09bc2f60e191bf3504183c001262be6ac75589fb8"
587+
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
588588
url: "https://pub.dev"
589589
source: hosted
590-
version: "0.7.8"
590+
version: "0.7.11"
591591
typed_data:
592592
dependency: transitive
593593
description:

rust/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)