From 6a7c4936e11d6053daea5d80cbc89a28c3893eb0 Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Thu, 15 Feb 2024 01:12:40 +0900 Subject: [PATCH] BUILD: misc cmake changes --- CMakeLists.txt | 69 +++++++++--- PreCompiledHeaders.cmake | 152 --------------------------- src/UI/DocumentViews/MpvContainer.cc | 2 - utils/scripts/count-lines.sh | 5 + 4 files changed, 58 insertions(+), 170 deletions(-) delete mode 100644 PreCompiledHeaders.cmake create mode 100755 utils/scripts/count-lines.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index f2b4bdf3..08e07772 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,35 +1,41 @@ cmake_minimum_required(VERSION 3.17) -# Alpho Vivy, CXX only +# Alpha Vivy, CXX only project(Vivy VERSION 0.1 LANGUAGES CXX) cmake_policy(SET CMP0100 NEW) # Let cmake use moc and uic for .hh files cmake_policy(SET CMP0009 NEW) # Do not follow symlinks with GLOB_RECURSE +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif() +message(STATUS "The installation prefix is ${CMAKE_INSTALL_PREFIX}") +message(STATUS "The build type is ${CMAKE_BUILD_TYPE}") + # Don't forget for specific things if(WIN32) message(STATUS "You are building on windows, pay attenion to the dependencies") endif() if(MSVC OR MSYS OR MINGW) message(STATUS "You are building with a windows compiler") -endif() -if(APPLE) +elseif(APPLE) message(STATUS "You are building on MacOS X") -endif() -if(UNIX AND NOT APPLE) +elseif(UNIX AND NOT APPLE) message(STATUS "You are building on Linux, FreeBSD or any other toaster OS") +else() + message(FATAL_ERROR "The OS is not recognized") endif() -# Pass -fPIC -set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Pass -fPIC +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_COLOR_DIAGNOSTICS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(THREADS_PREFER_PTHREAD_FLAG ON) # Pthread ftw # For Qt set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -# Pthread ftw -set(THREADS_PREFER_PTHREAD_FLAG ON) - # Find Qt dependencies find_package(Qt6 REQUIRED COMPONENTS Widgets @@ -59,6 +65,12 @@ qt_add_executable(Vivy ${PROJECT_SOURCES} rsc/VivyRessources.qrc ) +qt_set_finalizer_mode(Vivy ENABLE MODES static_plugins) + +set(Vivy_PRECOMPILED_INC PRIVATE src/PreCompiledHeaders.hh) + +set_property(TARGET Vivy PROPERTY CXX_STANDARD 20) +set_property(TARGET Vivy PROPERTY AUTOSTATICPLUGINS ON) # Link dependencies to Vivy target_link_libraries(Vivy PRIVATE @@ -74,7 +86,6 @@ target_link_libraries(Vivy PRIVATE ${MPV_LIBRARY}) target_link_libraries(Vivy PRIVATE OpenMP::OpenMP_CXX) # Headers related things -include("${CMAKE_CURRENT_SOURCE_DIR}/PreCompiledHeaders.cmake") target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_precompile_headers(Vivy PRIVATE ${Vivy_PRECOMPILED_INC}) @@ -117,6 +128,7 @@ target_compile_options(Vivy PRIVATE # Prepare for Qt6 target_compile_definitions(Vivy PRIVATE + MPV_ENABLE_DEPRECATED=0 QT_DISABLE_DEPRECATED_BEFORE=0x050F00 QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII @@ -128,13 +140,15 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") target_compile_options(Vivy PRIVATE -Weverything - # Disable some things because we want C++20 and don't control some Qt - # generated files... + # Disable some things because we want C++20 and don't control some Qt generated files... -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-c++11-c++14-c++17-compat-pedantic -Wno-c++20-compat + # Different versions of MPV... + -Wno-switch-enum + -Wno-reserved-identifier -Wno-extra-semi-stmt -Wno-redundant-parens @@ -144,7 +158,12 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") ) if (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 16) target_compile_options(Vivy PRIVATE - -Wno-unsafe-buffer-usage + # Different versions of MPV... + -Wno-switch + + # Kubat: Some proglems here, it seems they occure because of the usage of "using" for type + # aliasing... As I won't get ride of the "using"s the warning is disabled + -Wno-subobject-linkage ) endif() elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") @@ -157,7 +176,7 @@ elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") endif() set_target_properties(Vivy PROPERTIES - MACOSX_BUNDLE_GUI_IDENTIFIER vivy.iiens.net + MACOSX_BUNDLE_GUI_IDENTIFIER kurisu.iiens.net MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) @@ -168,7 +187,11 @@ qt_finalize_executable(Vivy) if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug") if (NOT "x${VIVY_DISABLE_ASAN}" STREQUAL "xyes") if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - target_compile_options(Vivy PRIVATE -g -O1 -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=always) + target_compile_options(Vivy PRIVATE -g -O1 + -fsanitize=address + -fno-omit-frame-pointer + -fsanitize-address-use-after-return=always + ) elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") target_compile_options(Vivy PRIVATE -g -O1 -fsanitize=address -fno-omit-frame-pointer) endif() @@ -176,3 +199,17 @@ if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug") target_link_libraries(Vivy PRIVATE -g -O1 -fsanitize=address) endif() endif() + + +# Linking stuff +if(UNIX) + target_link_options(Vivy PRIVATE -Wl,-rpath,. -rdynamic) +elseif(WIN32) + target_link_options(Vivy PRIVATE + -static + -Wl,-rpath,. + -Wl,-allow-multiple-definition + -Wl,-exclude-all-symbols + ) + target_link_libraries(Vivy PRIVATE regex dlfcn-win32::dl ws2_32) +endif() diff --git a/PreCompiledHeaders.cmake b/PreCompiledHeaders.cmake deleted file mode 100644 index 82bc055d..00000000 --- a/PreCompiledHeaders.cmake +++ /dev/null @@ -1,152 +0,0 @@ -# System headers -set(STL_INC - PRIVATE - <memory> - <vector> - <atomic> - <algorithm> - <stdexcept> - <sstream> - <map> - <utility> - <locale> - <functional> - <initializer_list> - <cstring> - <string> - <string_view> - <cstdio> - <iostream> - <optional> - <type_traits> - <chrono> - <climits> - <ctype.h> - <mutex> - <iomanip> - <filesystem> - <bit> - <cfloat> -) - -set(EXT_INC PRIVATE - <mpv/client.h> -) - -set(QT_STRUCT_INC - PRIVATE - <qglobal.h> - <QThread> - <QOperatingSystemVersion> - <QtGlobal> - <QObject> - <QRegularExpression> - <QString> - <QVariant> - <QFile> - <QDebug> - <QHash> - <QDir> - <QTextStream> - <QFileInfo> - <QMessageLogger> - <QUuid> - <QPointer> - <QProcess> - <QTimer> - <QStack> - <QTemporaryFile> - <QStandardPaths> - <QList> - <QVector> - <QMap> - <QSettings> - <QStringList> - <QMetaEnum> - <QJsonObject> - <QJsonArray> - <QJsonDocument> - <QJsonValue> -) - -set(QT_WIDGET_INC - PRIVATE - <QCoreApplication> - <QTextDocument> - <QColor> - <QPalette> - <QWidget> - <QIcon> - <QFont> - <QPixmap> - <QApplication> - <QCloseEvent> - <QLabel> - <QPushButton> - <QVBoxLayout> - <QHBoxLayout> - <QEvent> - <QMouseEvent> - <QTextEdit> - <QDockWidget> - <QMenu> - <QFileDialog> - <QMutex> - <QMainWindow> - <QPainter> - <QPlainTextEdit> - <QSlider> - <QAbstractItemModel> - <QHeaderView> - <QPaintEvent> - <QTableView> - <QStyledItemDelegate> - <QMessageBox> - <QScrollBar> - <QScrollArea> - <QGraphicsPixmapItem> - <QGraphicsSceneMouseEvent> - <QPen> - <QAction> - <QGraphicsItem> - <QGraphicsLineItem> - <QTreeView> - <QGraphicsView> - <QGraphicsScene> - <QWindow> - <QAbstractScrollArea> - <QGraphicsLineItem> - <QGraphicsPixmapItem> - <QClipboard> - <QInputMethodEvent> - <QKeyEvent> - <QLineEdit> - <QTextBlock> - <QTextCursor> - <QTextDocumentFragment> - <QMimeData> - <QSharedPointer> - <QStatusBar> - <QBrush> - <QFrame> - <QSyntaxHighlighter> - <QTextCharFormat> - <QTabWidget> - <QLayoutItem> - <QLayout> - <QEventLoop> - <QImage> - <QToolBar> - <QMenuBar> - <QDialogButtonBox> - <QFileIconProvider> - <QFontDatabase> - <QListWidget> -) - -set(Vivy_PRECOMPILED_INC PRIVATE - ${STL_INC} - ${QT_STRUCT_INC} - ${QT_WIDGET_INC} - ${EXT_INC} -) diff --git a/src/UI/DocumentViews/MpvContainer.cc b/src/UI/DocumentViews/MpvContainer.cc index 104463b8..5eae3d61 100644 --- a/src/UI/DocumentViews/MpvContainer.cc +++ b/src/UI/DocumentViews/MpvContainer.cc @@ -205,8 +205,6 @@ MpvContainer::handleMpvEvent(const mpv_event *const event) noexcept case MPV_EVENT_GET_PROPERTY_REPLY: case MPV_EVENT_SET_PROPERTY_REPLY: case MPV_EVENT_FILE_LOADED: - case MPV_EVENT_IDLE: - case MPV_EVENT_TICK: case MPV_EVENT_CLIENT_MESSAGE: case MPV_EVENT_AUDIO_RECONFIG: case MPV_EVENT_SEEK: diff --git a/utils/scripts/count-lines.sh b/utils/scripts/count-lines.sh new file mode 100755 index 00000000..4971cb7e --- /dev/null +++ b/utils/scripts/count-lines.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -xe +_ROOT="$(git rev-parse --show-toplevel)" +cd "$_ROOT" +cloc --vcs=git -- GitLab