From fb1165155e9942a72c9e8aabbf10b95c16ec79d6 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Fri, 27 Dec 2024 10:32:54 -0500 Subject: [PATCH 1/7] WIP Port to CMake --- CMakeLists.txt | 37 +++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 +++ cpp/main.cpp | 3 +++ src/lib.rs | 5 +++++ 4 files changed, 48 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cpp/main.cpp create mode 100644 src/lib.rs diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e2ac77a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.19) +project(Sukai) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(ECM ${KF_MIN_VERSION} NO_MODULE REQUIRED) +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) + +find_package(Qt6 COMPONENTS Core Gui Qml QuickControls2 QuickTest Test Widgets Quick Network REQUIRED) +find_package(KF6CoreAddons REQUIRED) +find_package(OpenSSL REQUIRED) + +find_package(CxxQt QUIET) +if(NOT CxxQt_FOUND) + include(FetchContent) + FetchContent_Declare( + CxxQt + GIT_REPOSITORY https://github.com/kdab/cxx-qt-cmake.git + GIT_TAG main + ) + + FetchContent_MakeAvailable(CxxQt) +endif() + +cxx_qt_import_crate( + MANIFEST_PATH Cargo.toml + CRATES Sukai + QT_MODULES Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2 Qt::Widgets Qt::Quick Qt::Network) + +cxx_qt_import_qml_module(sukai_module + URI "com.redstrate.sukai" + SOURCE_CRATE Sukai) + +add_executable(sukai cpp/main.cpp) +target_link_libraries(sukai PRIVATE sukai_module OpenSSL::Crypto OpenSSL::SSL) \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index f3962eb..99a7d12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,9 @@ name = "Sukai" version = "0.1.0" edition = "2021" +[lib] +crate-type = ["staticlib"] + [build-dependencies] cxx-qt-build = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string"} diff --git a/cpp/main.cpp b/cpp/main.cpp new file mode 100644 index 0000000..30014d9 --- /dev/null +++ b/cpp/main.cpp @@ -0,0 +1,3 @@ +int main(int argc, char *argv[]) { + return 0; +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..ab875f3 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,5 @@ +mod accountmanager; +mod entities; +mod models; +mod navigation; +mod serde_utilities; From b4edc8ad503ac5f3ef91bd04a5aa8e03c4759633 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 13:33:26 -0500 Subject: [PATCH 2/7] test --- Cargo.toml | 10 +++++----- src/main.rs | 4 ++-- src/serde_utilities.rs | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 99a7d12..f48100a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,14 +7,14 @@ edition = "2021" crate-type = ["staticlib"] [build-dependencies] -cxx-qt-build = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string"} +cxx-qt-build = { version = "0.7.0" } [dependencies] cxx = "1.0.121" -cxx-qt = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string" } -cxx-qt-lib = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } -cxx-kde-frameworks = { path = "/home/josh/sources/cxx-kde-frameworks" } +cxx-qt = { version = "0.7.0" } +cxx-qt-lib = { version = "0.7.0", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } +cxx-kde-frameworks = { git = "https://invent.kde.org/libraries/cxx-kde-frameworks" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tokio = "1.41.1" -reqwest = "0.12.9" \ No newline at end of file +reqwest = "0.12.9" diff --git a/src/main.rs b/src/main.rs index 0c5b2d7..62ef406 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,7 +56,7 @@ fn main() { .as_mut() .load(&QUrl::from("qrc:/qt/qml/com/redstrate/sukai/ui/Main.qml")); - unsafe { + /*unsafe { let account_manager = engine .singleton_instance::( QAnyStringView::from("com.redstrate.sukai"), @@ -65,7 +65,7 @@ fn main() { .unwrap(); let mut pin: Pin<&mut AccountManager> = Pin::new_unchecked(account_manager); pin.as_mut().load_from_settings(); - } + }*/ } if let Some(app) = app.as_mut() { diff --git a/src/serde_utilities.rs b/src/serde_utilities.rs index 8cc5477..3239ef5 100644 --- a/src/serde_utilities.rs +++ b/src/serde_utilities.rs @@ -28,7 +28,8 @@ where D: Deserializer<'de>, { let s = QString::deserialize(deserializer)?; - Ok(QDateTime::from_string(&s, DateFormat::ISODate).unwrap()) + //Ok(QDateTime::from_string(&s, DateFormat::ISODate).unwrap()) + Ok(QDateTime::default()) } pub fn parse_datetime_optional<'de, D>(deserializer: D) -> Result, D::Error> From 3f9d348987b8493c40e295ad6c3744f7ea6a317c Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 14:22:43 -0500 Subject: [PATCH 3/7] fix craft --- CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2ac77a..401e92e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,14 +24,18 @@ if(NOT CxxQt_FOUND) FetchContent_MakeAvailable(CxxQt) endif() +# Needed for Craft Android, otherwise it tries to use native tooling which is wrong +get_target_property(QMAKE_PATH Qt::qmake LOCATION) + cxx_qt_import_crate( MANIFEST_PATH Cargo.toml CRATES Sukai - QT_MODULES Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2 Qt::Widgets Qt::Quick Qt::Network) + QT_MODULES Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2 Qt::Widgets Qt::Quick Qt::Network + QMAKE ${QMAKE_PATH}) cxx_qt_import_qml_module(sukai_module URI "com.redstrate.sukai" SOURCE_CRATE Sukai) add_executable(sukai cpp/main.cpp) -target_link_libraries(sukai PRIVATE sukai_module OpenSSL::Crypto OpenSSL::SSL) \ No newline at end of file +target_link_libraries(sukai PRIVATE sukai_module OpenSSL::Crypto OpenSSL::SSL) From be72812f068f3be119c27a3a39fd2e69b6bd0e67 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 14:24:23 -0500 Subject: [PATCH 4/7] fix craft test again --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 401e92e..3f140e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ endif() # Needed for Craft Android, otherwise it tries to use native tooling which is wrong get_target_property(QMAKE_PATH Qt::qmake LOCATION) +message("Using ${QMAKE_PATH}") cxx_qt_import_crate( MANIFEST_PATH Cargo.toml From d51c9fff754092da65c4ec1c8c1327afb3dd827f Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 14:28:22 -0500 Subject: [PATCH 5/7] whatever craft --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f140e8..eb0d2bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,8 @@ if(NOT CxxQt_FOUND) endif() # Needed for Craft Android, otherwise it tries to use native tooling which is wrong -get_target_property(QMAKE_PATH Qt::qmake LOCATION) +#get_target_property(QMAKE_PATH Qt::qmake LOCATION) +set(QMAKE_PATH "/home/user/CraftRoot/build/libs/qt6/qtbase/image-MinSizeRel-6.8.0/bin/qmake") message("Using ${QMAKE_PATH}") cxx_qt_import_crate( From 3f7c4e7f820fa589844dd857cfe7d19144d64ace Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 15:08:50 -0500 Subject: [PATCH 6/7] build fix --- build.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.rs b/build.rs index e28235f..42f6e43 100644 --- a/build.rs +++ b/build.rs @@ -7,6 +7,9 @@ fn main() { CxxQtBuilder::new() .qt_module("Quick") .qt_module("Network") + // TODO: why are these needed explicitly on Android? + .qt_module("Qml") + .qt_module("QuickControls2") .qml_module(QmlModule::<&str, &str> { uri: "com.redstrate.sukai.models", rust_files: &["src/models/timelinemodel.rs"], From 1a18776937284b420fa516270df2dbf85689f084 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 30 Dec 2024 16:15:18 -0500 Subject: [PATCH 7/7] build fix --- Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f48100a..5600b78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,13 +7,13 @@ edition = "2021" crate-type = ["staticlib"] [build-dependencies] -cxx-qt-build = { version = "0.7.0" } +cxx-qt-build = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules" } [dependencies] cxx = "1.0.121" -cxx-qt = { version = "0.7.0" } -cxx-qt-lib = { version = "0.7.0", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } -cxx-kde-frameworks = { git = "https://invent.kde.org/libraries/cxx-kde-frameworks" } +cxx-qt = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules" } +cxx-qt-lib = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } +cxx-kde-frameworks = { git = "https://invent.kde.org/libraries/cxx-kde-frameworks", branch = "work/redstrate/cmake-qt-modules" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tokio = "1.41.1"