Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 38a5fd7e rédigé par Kubat's avatar Kubat
Parcourir les fichiers

RUST: Should be able to link Rust code in lektord

parent 79f4661d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!192Resolve "FEATURE: Use time stamp from kurisu in update process"
Pipeline #3191 en échec
Ce commit fait partie de la requête de fusion !192. Les commentaires créés ici seront créés dans le contexte de cette requête de fusion.
......@@ -19,6 +19,7 @@ set(CMAKE_COLOR_MAKEFILE ON)
include(TestBigEndian) # Needed for endianness tests
include(FindOpenMP) # Test OpenMP support
include(GNUInstallDirs) # Needed for installation things
include(ExternalProject) # Enable ExternalProject CMake module
### ###
# TEST OPENMP #
......@@ -100,6 +101,7 @@ set(CMAKE_AUTORCC ON)
find_program(MKVPROPEDIT mkvpropedit REQUIRED) # To DL karas and apply metadata
find_program(XXD xxd REQUIRED) # To embed the sqlite db schemas into the binary
find_program(CARGO cargo REQUIRED) # For rust things
message(STATUS "The installation prefix is ${CMAKE_INSTALL_PREFIX}")
......@@ -333,17 +335,10 @@ target_include_directories(lektord PRIVATE
${CURL_INCLUDE_DIRS}
)
target_link_libraries(lektord PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_compile_definitions(lektord PRIVATE ${common_DEFINITIONS})
target_compile_definitions(lkt PRIVATE ${common_DEFINITIONS})
target_compile_definitions(luka PRIVATE ${common_DEFINITIONS})
# TODO: The common header should be the OS header...
# target_precompile_headers(lektord PRIVATE ${common_HEADERS})
# target_precompile_headers(lkt PRIVATE ${common_HEADERS})
# target_precompile_headers(luka PRIVATE ${common_HEADERS})
target_compile_options(lektord PRIVATE ${COMMON_C_FLAGS} ${${CMAKE_C_COMPILER_ID}_C_FLAGS} ${${CMAKE_CXX_COMPILER_ID}_CXX_FLAGS})
target_compile_definitions(lektord PRIVATE
QT_DISABLE_DEPRECATED_BEFORE=0x050F00
......@@ -358,6 +353,29 @@ target_compile_options(luka PRIVATE ${COMMON_C_FLAGS} ${${CMAKE_C_COMPILER_ID}_C
set_property(TARGET lektord PROPERTY CXX_STANDARD 20)
set_property(TARGET luka PROPERTY CXX_STANDARD 20)
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/Rust)
ExternalProject_Add(liblektor_rs
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/rust/liblektor-rs"
BUILD_COMMAND "${CARGO}" build
COMMAND "${CARGO}" build
INSTALL_COMMAND ""
BUILD_BYPRODUCTS "${CMAKE_SOURCE_DIR}/src/rust/liblektor-rs/target/debug/liblektor_rs.a"
BUILD_ALWAYS 1
BUILD_IN_SOURCE 1
LOG_BUILD 1
)
add_dependencies(lektord liblektor_rs)
target_link_libraries(lektord
PRIVATE
"${CMAKE_SOURCE_DIR}/src/rust/liblektor-rs/target/debug/liblektor_rs.a"
Qt${QT_VERSION_MAJOR}::Widgets
)
### ###
# THE INSTALL DIRECTIVES #
### ###
......
target/
.rustc_info.json
Cargo.lock
[build]
target-dir = "target"
\ No newline at end of file
[package]
name = "lektor-rs"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["staticlib"]
[dependencies]
libc = "0.2.0"
use crate::*;
pub(crate) type LktDbPtr = *mut c_void;
#[repr(C)]
pub(crate) struct LktQueueState {
volume: c_int,
paused: c_int,
random: c_int,
repeat: c_int,
single: c_int,
current: c_int,
duration: c_int,
consume: c_int,
length: c_int,
}
extern "C" {
pub(crate) fn database_queue_toggle_pause(db: LktDbPtr) -> c_void;
/* Update stuff */
pub(crate) fn database_get_update(
db: LktDbPtr,
timestamp: *mut c_long,
job: *mut c_long,
current: *mut c_int,
) -> c_void;
pub(crate) fn database_stamp(db: LktDbPtr) -> c_void;
pub(crate) fn database_updated(db: LktDbPtr) -> c_void;
pub(crate) fn database_deleted_kara(
db: LktDbPtr,
kara_id: *mut *mut c_int,
len: *mut size_t,
) -> c_void;
pub(crate) fn database_total_playtime(db: LktDbPtr, seconds: *mut u64) -> c_void;
/* Get information on the queue and currently playing kara */
pub(crate) fn database_queue_state(db: LktDbPtr, res: *mut LktQueueState) -> bool;
pub(crate) fn database_queue_current_kara(
db: LktDbPtr,
res: *mut mkv::LktKaraMetadata,
id: *mut c_int,
) -> bool;
pub(crate) fn database_queue_playtime(db: LktDbPtr, seconds: *mut u64) -> c_void;
}
#![allow(dead_code)]
mod database;
mod mkv;
pub(crate) use libc::{c_char, c_int, c_long, c_void, size_t};
pub const LEKTOR_TAG_MAX: usize = 256;
use crate::*;
#[repr(C)]
pub(crate) struct LktKaraMetadata {
song_name: [c_char; LEKTOR_TAG_MAX],
source_name: [c_char; LEKTOR_TAG_MAX],
category: [c_char; LEKTOR_TAG_MAX],
language: [c_char; LEKTOR_TAG_MAX],
author_name: [c_char; LEKTOR_TAG_MAX],
song_type: [c_char; LEKTOR_TAG_MAX],
song_number: c_int,
}
[build]
target-dir = "target"
\ No newline at end of file
[package]
name = "rs_repo"
version = "0.1.0"
edition = "2021"
[dependencies]
lib_lkt_rs = { path = "../lektord-rs" }
libc = "0.2.0"
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
let result = 2 + 2;
assert_eq!(result, 4);
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter