cmake_minimum_required(VERSION 3.22) project(lumen-wallpaper VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(ECM 6.0.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) find_package(Qt6 6.6 REQUIRED COMPONENTS Core Gui Qml Quick) set(LUMEN_PACKAGE_ID dev.emil.lumen) set(LUMEN_INSTALL_DIR "${KDE_INSTALL_DATADIR}/plasma/wallpapers/${LUMEN_PACKAGE_ID}") set(LUMEN_RUST_LIBRARY "${CMAKE_BINARY_DIR}/cargo/release/liblumen_renderer.a") file(GLOB_RECURSE LUMEN_RUST_SOURCES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/renderer/*.rs" ) add_custom_command( OUTPUT "${LUMEN_RUST_LIBRARY}" COMMAND "${CMAKE_COMMAND}" -E env CARGO_TARGET_DIR=${CMAKE_BINARY_DIR}/cargo cargo build --release WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" DEPENDS ${LUMEN_RUST_SOURCES} "${CMAKE_SOURCE_DIR}/Cargo.toml" "${CMAKE_SOURCE_DIR}/Cargo.lock" COMMENT "Building the Rust Vulkan renderer" VERBATIM ) add_custom_target(lumen_renderer_build DEPENDS "${LUMEN_RUST_LIBRARY}") add_library(lumen_renderer STATIC IMPORTED GLOBAL) set_target_properties(lumen_renderer PROPERTIES IMPORTED_LOCATION "${LUMEN_RUST_LIBRARY}") add_dependencies(lumen_renderer lumen_renderer_build) add_library(lumenplugin MODULE src/plugin.cpp src/plugin.h src/wallpaperitem.cpp src/wallpaperitem.h src/rendernode.cpp src/rendernode.h src/lumen_ffi.h ) target_include_directories(lumenplugin PRIVATE "${CMAKE_SOURCE_DIR}/src") target_link_libraries(lumenplugin PRIVATE Qt6::Core Qt6::Gui Qt6::Qml Qt6::Quick lumen_renderer ${CMAKE_DL_LIBS} pthread m ) set_target_properties(lumenplugin PROPERTIES PREFIX "lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/package/contents/ui/lumen" ) install(DIRECTORY package/ DESTINATION "${LUMEN_INSTALL_DIR}") install(TARGETS lumenplugin LIBRARY DESTINATION "${LUMEN_INSTALL_DIR}/contents/ui/lumen" )