From 692bb17d44e885ef5af81396302c5816206f2aa9 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Mon, 11 Aug 2025 22:01:28 +0200 Subject: [PATCH] feat(cmake): move to qt6 --- cmake/FindQScintilla6.cmake | 56 +++++++++++++++++ editor/CMakeLists.txt | 121 ++---------------------------------- 2 files changed, 61 insertions(+), 116 deletions(-) create mode 100644 cmake/FindQScintilla6.cmake diff --git a/cmake/FindQScintilla6.cmake b/cmake/FindQScintilla6.cmake new file mode 100644 index 0000000..e183a87 --- /dev/null +++ b/cmake/FindQScintilla6.cmake @@ -0,0 +1,56 @@ +# Modified from QGIS' FindQScintilla.cmake by Thomas Moenicke, Larry Schaffer + +add_library(QScintilla::QScintilla UNKNOWN IMPORTED) + +### NECESSARY TO PREVENT staticMetaObject ERROR!!! See qscintilla.prf AKA qmake config +if(WIN32) + add_compile_definitions(QSCINTILLA_DLL) +endif() + +FIND_PATH(QSCINTILLA_INCLUDE_DIR + NAMES Qsci/qsciglobal.h + PATHS + ${Qt6Core_INCLUDE_DIRS} + $ENV{LIB_DIR}/include + /usr/local/include + /usr/include + ${VCPKG_INSTALLED_DIR}/x64-windows/include + PATH_SUFFIXES ${QSCINTILLA_PATH_SUFFIXES} +) + +set(QSCINTILLA_LIBRARY_NAMES + qscintilla2-qt6 + qscintilla2_qt6 + libqt6scintilla2 + libqscintilla2-qt6 + qt6scintilla2 + libqscintilla2-qt6.dylib + qscintilla2 +) + + +find_library(QSCINTILLA_LIBRARY +NAMES ${QSCINTILLA_LIBRARY_NAMES} +PATHS + "${QT_LIBRARY_DIR}" + $ENV{LIB_DIR}/lib + /usr/local/lib + /usr/local/lib/qt6 + /usr/lib + ${VCPKG_INSTALLED_DIR}/x64-windows/lib +) + +get_filename_component(QSCINTILLA_LIB_DIR ${QSCINTILLA_LIBRARY} DIRECTORY) +list(TRANSFORM QSCINTILLA_LIBRARY_NAMES APPEND ".dll" OUTPUT_VARIABLE QSCINTILLA_DLL_NAMES) + +find_file(QSCINTILLA_DLLS +NAMES ${QSCINTILLA_DLL_NAMES} +PATHS + "${QT_LIBRARY_DIR}" + $ENV{LIB_DIR}/lib + /usr/local/lib + /usr/local/lib/qt6 + /usr/lib + ${QSCINTILLA_LIB_DIR} + ${VCPKG_INSTALLED_DIR}/x64-windows/lib +) \ No newline at end of file diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt index c92c622..089c5be 100644 --- a/editor/CMakeLists.txt +++ b/editor/CMakeLists.txt @@ -1,21 +1,9 @@ -cmake_minimum_required(VERSION 3.30.0) - -project(editor VERSION 0.1 LANGUAGES CXX) - set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Multimedia LinguistTools) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Multimedia LinguistTools) -find_package(QScintilla REQUIRED) - -set(TS_FILES editor_en_US.ts) +find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia OpenGLWidgets REQUIRED) +find_package(QScintilla6 REQUIRED) set(PROJECT_SOURCES main.cpp @@ -47,105 +35,6 @@ set(PROJECT_SOURCES ${TS_FILES} ) -if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) - qt_add_executable(editor - MANUAL_FINALIZATION - ${PROJECT_SOURCES} - ) -# Define target properties for Android with Qt 6 as: -# set_property(TARGET editor APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR -# ${CMAKE_CURRENT_SOURCE_DIR}/android) -# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation - - qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) -else() - if(ANDROID) - add_library(editor SHARED - ${PROJECT_SOURCES} - ) -# Define properties for Android with Qt 5 after find_package() calls as: -# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") - else() - add_executable(editor - ${PROJECT_SOURCES} - mainglwidget.h mainglwidget.cpp - ) - endif() - - qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) -endif() - -target_include_directories(editor PUBLIC "../core/src" "../include" ${QSCINTILLA_INCLUDE_DIR}) -target_link_libraries(editor PRIVATE openblocks Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Multimedia ${QSCINTILLA_LIBRARY}) -add_dependencies(editor openblocks) - -# Qt6 does not include QOpenGLWidgets as part of Widgets base anymore, so -# we have to include it manually -if (${QT_VERSION} GREATER_EQUAL 6) - find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGL OpenGLWidgets) - find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGL OpenGLWidgets) - - target_include_directories(editor PUBLIC Qt6::OpenGL Qt6::OpenGLWidgets) - target_link_libraries(editor PRIVATE Qt6::OpenGL Qt6::OpenGLWidgets) -endif() - -# Copy assets -add_custom_command( - TARGET editor POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_SOURCE_DIR}/assets - $/assets) - -# Copy Qt files -if (WIN32) - #include("${QT_DEPLOY_SUPPORT}") - - # Copy over QScintilla DLLs - # TODO: Use a better approach? - add_custom_command( - TARGET editor POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${QSCINTILLA_DLLS} $ - ) - - # TODO: Add other translations - add_custom_command( - TARGET editor POST_BUILD - COMMAND ${WINDEPLOYQT_EXECUTABLE} $ ${QSCINTILLA_DLLS} --release --dir $ --translations en --no-compiler-runtime --no-opengl-sw --no-system-d3d-compiler --plugindir $/qtplugins - ) - # No sense adding opengl-sw given that hardware acceleration is necessary, anyway - # Also don't want to clutter with plugins, add only needed ones - - - # Copy qt.conf to override default plugins location - add_custom_command( - TARGET editor POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/qt.conf $/qt.conf - ) -endif () - -# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. -# If you are developing for iOS or macOS you should consider setting an -# explicit, fixed bundle identifier manually though. -if(${QT_VERSION} VERSION_LESS 6.1.0) - set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.qtbasic) -endif() -set_target_properties(editor PROPERTIES - ${BUNDLE_ID_OPTION} - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} - MACOSX_BUNDLE TRUE - WIN32_EXECUTABLE TRUE -) - -include(GNUInstallDirs) -install(TARGETS editor - BUNDLE DESTINATION . - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) - -install(FILES $ TYPE BIN) - -if(QT_VERSION_MAJOR EQUAL 6) - qt_finalize_executable(editor) -endif() \ No newline at end of file +qt_add_executable(editor ${PROJECT_SOURCES}) +target_include_directories(editor PRIVATE .) +target_link_libraries(editor PRIVATE openblocks Qt6::Widgets Qt6::Multimedia Qt6::OpenGLWidgets ${QSCINTILLA_LIBRARY}) \ No newline at end of file