cmake_minimum_required(VERSION 3.20) project(hcie-qt-app VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_SOURCE_DIR}/ui) find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets OpenGL OpenGLWidgets) # ── Engine static library (built by Cargo) ────────────────────────────────── # The Rust engine produces a C-compatible static library at: # ../target/debug/libhcie_engine_api.a (Linux/macOS) # ../target/debug/hcie_engine_api.lib (Windows MSVC) # Build it first with: cargo build -p hcie-engine-api set(ENGINE_LIB_DIR "${CMAKE_SOURCE_DIR}/../target/debug") if(WIN32) set(ENGINE_STATIC_LIB "${ENGINE_LIB_DIR}/hcie_engine_api.lib") set(ENGINE_DLL_DIR "${ENGINE_LIB_DIR}") else() set(ENGINE_STATIC_LIB "${ENGINE_LIB_DIR}/libhcie_engine_api.a") endif() # ── Sources ───────────────────────────────────────────────────────────────── set(HCIE_QT_SOURCES src/main.cpp src/mainwindow.cpp src/canvas_widget.cpp src/hcie_engine_wrapper.cpp src/panels/tools_panel.cpp src/panels/layers_panel.cpp src/panels/colors_panel.cpp src/panels/brushes_panel.cpp src/panels/history_panel.cpp src/panels/properties_panel.cpp src/panels/filters_panel.cpp src/panels/ai_chat_panel.cpp src/panels/layer_styles_panel.cpp src/panels/layer_details_panel.cpp src/dialogs/new_image_dialog.cpp src/dialogs/filter_dialog.cpp src/dialogs/preferences_dialog.cpp ) set(HCIE_QT_HEADERS src/mainwindow.h src/canvas_widget.h src/hcie_engine_wrapper.h src/panels/tools_panel.h src/panels/layers_panel.h src/panels/colors_panel.h src/panels/brushes_panel.h src/panels/history_panel.h src/panels/properties_panel.h src/panels/filters_panel.h src/panels/ai_chat_panel.h src/panels/layer_styles_panel.h src/panels/layer_details_panel.h src/dialogs/new_image_dialog.h src/dialogs/filter_dialog.h src/dialogs/preferences_dialog.h ) set(HCIE_QT_UIS ui/mainwindow.ui ui/new_image_dialog.ui ui/filter_dialog.ui ui/preferences_dialog.ui # Panel UI files (Qt Designer editable) ui/layers_panel.ui ui/brushes_panel.ui ui/filters_panel.ui ui/history_panel.ui ui/properties_panel.ui ) set(HCIE_QT_RESOURCES resources/resources.qrc ) # ── Target ────────────────────────────────────────────────────────────────── add_executable(hcie-qt ${HCIE_QT_SOURCES} ${HCIE_QT_HEADERS} ${HCIE_QT_UIS} ${HCIE_QT_RESOURCES} ) target_include_directories(hcie-qt PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR} # for AUTOUIC generated headers ) target_link_libraries(hcie-qt PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::OpenGL Qt6::OpenGLWidgets ${ENGINE_STATIC_LIB} ) # ── Platform-specific link flags ──────────────────────────────────────────── if(UNIX AND NOT APPLE) target_link_libraries(hcie-qt PRIVATE pthread dl m rt ) # dav1d (AVIF codec) — may need explicit versioned .so link set(DAV1D_LIB_PATH "/usr/lib/x86_64-linux-gnu/libdav1d.so.7") if(EXISTS "${DAV1D_LIB_PATH}") target_link_libraries(hcie-qt PRIVATE ${DAV1D_LIB_PATH}) else() target_link_libraries(hcie-qt PRIVATE dav1d) endif() target_link_options(hcie-qt PRIVATE -rdynamic) endif() if(APPLE) target_link_libraries(hcie-qt PRIVATE pthread dl m "-framework OpenGL" "-framework CoreFoundation" "-framework Security" "-framework SystemConfiguration" "-framework CoreGraphics" "-framework CoreText" "-framework AppKit" ) endif() if(WIN32) target_link_libraries(hcie-qt PRIVATE ws2_32 userenv bcrypt ntdll advapi32 opengl32 ) # Copy Qt DLLs to output directory (handled by windeployqt at install time) endif() # ── Install ───────────────────────────────────────────────────────────────── install(TARGETS hcie-qt RUNTIME DESTINATION bin)