Files
Lumen-wallpaper/CMakeLists.txt
T

69 lines
2.1 KiB
CMake

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"
)