diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f60c4..2139e2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,11 @@ option(FRAMELESSHELPER_ENABLE_YYTHUNKS "MSVC only: dynamic load most Win32 APIs option(FRAMELESSHELPER_NO_PERMISSIVE_CHECKS "MSVC only: disable the additional permissive checks." OFF) option(FRAMELESSHELPER_NO_INSTALL "Don't install any files." OFF) option(FRAMELESSHELPER_NO_SUMMARY "Don't show CMake configure summary." OFF) +option(FRAMELESSHELPER_ENABLE_SPECTRE "Mitigate Spectre security vulnerabilities." OFF) +option(FRAMELESSHELPER_ENABLE_EHCONTGUARD "Enable EH Continuation (EHCONT) Metadata." OFF) +option(FRAMELESSHELPER_ENABLE_INTELCET "Enable Intel CET." ON) +option(FRAMELESSHELPER_ENABLE_INTELJCC "Enable Intel JCC." ON) +option(FRAMELESSHELPER_ENABLE_CFGUARD "Enable Control Flow Guard (CFG)." ON) if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE) message(WARNING "Nothing will be embeded into FramelessHelper, the chrome buttons will have no icon.") @@ -56,12 +61,14 @@ include(cmake/utils.cmake) set(__extra_flags) if(NOT FRAMELESSHELPER_BUILD_STATIC) - set(__extra_flags ENABLE_LTO) + list(APPEND __extra_flags ENABLE_LTO) endif() setup_project( QT_PROJECT QML_IMPORT_DIR "${PROJECT_BINARY_DIR}/imports" LANGUAGES CXX RC + MAX_WARNING + EXCEPTIONS ${__extra_flags} ) unset(__extra_flags) @@ -87,7 +94,7 @@ endif() set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) - set(__extra_flags NO_INSTALL) + list(APPEND __extra_flags NO_INSTALL) endif() prepare_package_export( PACKAGE_NAME ${PROJECT_NAME} @@ -102,8 +109,17 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui) find_package(QT NAMES Qt6 Qt5 QUIET COMPONENTS Widgets Quick) find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS Widgets Quick) +if(FRAMELESSHELPER_BUILD_QUICK AND NOT TARGET Qt${QT_VERSION_MAJOR}::Quick) + message(WARNING "Can't find the QtQuick module. FramelessHelper's QtQuick implementation and the QtQuick demo won't be built.") + set(FRAMELESSHELPER_BUILD_QUICK OFF) +endif() + if(TARGET Qt${QT_VERSION_MAJOR}::Core AND TARGET Qt${QT_VERSION_MAJOR}::Gui) add_subdirectory(src) +else() + message(WARNING "Can't find the QtCore and QtGui module. Nothing will be built.") + set(FRAMELESSHELPER_BUILD_WIDGETS OFF) + set(FRAMELESSHELPER_BUILD_EXAMPLES OFF) endif() if(FRAMELESSHELPER_BUILD_EXAMPLES) @@ -111,7 +127,7 @@ if(FRAMELESSHELPER_BUILD_EXAMPLES) endif() if(NOT FRAMELESSHELPER_NO_SUMMARY) - message("#######################################") + message("--------------------------- Compiler ----------------------------") message("CMake version: ${CMAKE_VERSION}") message("Host system: ${CMAKE_HOST_SYSTEM}") message("Host processor: ${CMAKE_HOST_SYSTEM_PROCESSOR}") @@ -123,7 +139,7 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY) message("Make program: ${CMAKE_MAKE_PROGRAM}") message("Build type: ${CMAKE_BUILD_TYPE}") message("Install prefix: ${CMAKE_INSTALL_PREFIX}") - message("#######################################") + message("------------------------------ Qt -------------------------------") set(__qt_inst_dir) if(DEFINED Qt6_DIR) set(__qt_inst_dir "${Qt6_DIR}") @@ -142,7 +158,7 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY) set(__qt_type shared) endif() message("Qt library type: ${__qt_type}") - message("#######################################") + message("------------------------ FramelessHelper ------------------------") message("FramelessHelper version: ${PROJECT_VERSION}") message("FramelessHelper commit hash: ${PROJECT_VERSION_COMMIT}") message("FramelessHelper configure date and time: ${PROJECT_COMPILE_DATETIME} (UTC)") @@ -158,5 +174,10 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY) message("[MSVC] Thunk system APIs for old system: ${FRAMELESSHELPER_ENABLE_YYTHUNKS}") message("[MSVC] Disable permissive checks: ${FRAMELESSHELPER_NO_PERMISSIVE_CHECKS}") message("Do not install anything for CMake install: ${FRAMELESSHELPER_NO_INSTALL}") - message("#######################################") + message("Mitigate Spectre security vulnerabilities: ${FRAMELESSHELPER_ENABLE_SPECTRE}") + message("Enable EH Continuation (EHCONT) Metadata: ${FRAMELESSHELPER_ENABLE_EHCONTGUARD}") + message("Enable Intel CET: ${FRAMELESSHELPER_ENABLE_INTELCET}") + message("Enable Intel JCC: ${FRAMELESSHELPER_ENABLE_INTELJCC}") + message("Enable Control Flow Guard (CFG): ${FRAMELESSHELPER_ENABLE_CFGUARD}") + message("-----------------------------------------------------------------") endif() diff --git a/cmake b/cmake index 24aa677..86694ad 160000 --- a/cmake +++ b/cmake @@ -1 +1 @@ -Subproject commit 24aa677d6b6c07e5cbeff8858995bbb115f94646 +Subproject commit 86694ade5b240030eb70b5e5463b98cdb26d826b diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index cc3ce56..5c56043 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -29,6 +29,6 @@ if(FRAMELESSHELPER_BUILD_WIDGETS AND TARGET Qt${QT_VERSION_MAJOR}::Widgets) add_subdirectory(dialog) endif() -if(FRAMELESSHELPER_BUILD_QUICK AND TARGET Qt${QT_VERSION_MAJOR}::Quick AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6) AND (NOT FRAMELESSHELPER_NO_PRIVATE)) +if(FRAMELESSHELPER_BUILD_QUICK AND TARGET Qt${QT_VERSION_MAJOR}::Quick AND (QT_VERSION_MAJOR GREATER_EQUAL 6) AND (NOT FRAMELESSHELPER_NO_PRIVATE)) add_subdirectory(quick) endif() diff --git a/examples/dialog/CMakeLists.txt b/examples/dialog/CMakeLists.txt index 64eea23..61f1f24 100644 --- a/examples/dialog/CMakeLists.txt +++ b/examples/dialog/CMakeLists.txt @@ -54,7 +54,26 @@ setup_gui_app( BUNDLE_VERSION 1.0.0 BUNDLE_VERSION_SHORT 1.0 ) -setup_compile_params(TARGETS Dialog) +set(__extra_flags) +if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) +endif() +setup_compile_params(TARGETS Dialog ${__extra_flags}) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) diff --git a/examples/mainwindow/CMakeLists.txt b/examples/mainwindow/CMakeLists.txt index 3762e13..1f49b95 100644 --- a/examples/mainwindow/CMakeLists.txt +++ b/examples/mainwindow/CMakeLists.txt @@ -59,7 +59,26 @@ setup_gui_app( BUNDLE_VERSION 1.0.0 BUNDLE_VERSION_SHORT 1.0 ) -setup_compile_params(TARGETS MainWindow) +set(__extra_flags) +if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) +endif() +setup_compile_params(TARGETS MainWindow ${__extra_flags}) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) diff --git a/examples/openglwidget/CMakeLists.txt b/examples/openglwidget/CMakeLists.txt index 93efd01..91ba342 100644 --- a/examples/openglwidget/CMakeLists.txt +++ b/examples/openglwidget/CMakeLists.txt @@ -73,7 +73,26 @@ setup_gui_app( BUNDLE_VERSION 1.0.0 BUNDLE_VERSION_SHORT 1.0 ) -setup_compile_params(TARGETS OpenGLWidget) +set(__extra_flags) +if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) +endif() +setup_compile_params(TARGETS OpenGLWidget ${__extra_flags}) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) diff --git a/examples/quick/CMakeLists.txt b/examples/quick/CMakeLists.txt index 95a98fd..ad28ac1 100644 --- a/examples/quick/CMakeLists.txt +++ b/examples/quick/CMakeLists.txt @@ -96,7 +96,26 @@ setup_gui_app( BUNDLE_VERSION 1.0.0 BUNDLE_VERSION_SHORT 1.0 ) -setup_compile_params(TARGETS Quick) +set(__extra_flags) +if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) +endif() +setup_compile_params(TARGETS Quick ${__extra_flags}) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) diff --git a/examples/widget/CMakeLists.txt b/examples/widget/CMakeLists.txt index c4f71dd..9755d0b 100644 --- a/examples/widget/CMakeLists.txt +++ b/examples/widget/CMakeLists.txt @@ -54,7 +54,26 @@ setup_gui_app( BUNDLE_VERSION 1.0.0 BUNDLE_VERSION_SHORT 1.0 ) -setup_compile_params(TARGETS Widget) +set(__extra_flags) +if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) +endif() +setup_compile_params(TARGETS Widget ${__extra_flags}) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) set(__extra_flags) if(FRAMELESSHELPER_NO_INSTALL) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index dd0a13a..d580bf4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -259,7 +259,22 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC setup_qt_stuff(TARGETS ${SUB_PROJ_NAME}) set(__extra_flags) if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) - set(__extra_flags PERMISSIVE) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) endif() setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) if(NOT FRAMELESSHELPER_NO_INSTALL) diff --git a/src/quick/CMakeLists.txt b/src/quick/CMakeLists.txt index 978f23a..f5f5ecd 100644 --- a/src/quick/CMakeLists.txt +++ b/src/quick/CMakeLists.txt @@ -216,7 +216,22 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC setup_qt_stuff(TARGETS ${SUB_PROJ_NAME} ALLOW_KEYWORD) set(__extra_flags) if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) - set(__extra_flags PERMISSIVE) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) endif() setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) if(NOT FRAMELESSHELPER_NO_INSTALL) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 0886769..fdb32a3 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -143,7 +143,22 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC setup_qt_stuff(TARGETS ${SUB_PROJ_NAME}) set(__extra_flags) if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS) - set(__extra_flags PERMISSIVE) + list(APPEND __extra_flags PERMISSIVE) +endif() +if(FRAMELESSHELPER_ENABLE_SPECTRE) + list(APPEND __extra_flags SPECTRE) +endif() +if(FRAMELESSHELPER_ENABLE_EHCONTGUARD) + list(APPEND __extra_flags EHCONTGUARD) +endif() +if(FRAMELESSHELPER_ENABLE_INTELCET) + list(APPEND __extra_flags INTELCET) +endif() +if(FRAMELESSHELPER_ENABLE_INTELJCC) + list(APPEND __extra_flags INTELJCC) +endif() +if(FRAMELESSHELPER_ENABLE_CFGUARD) + list(APPEND __extra_flags CFGUARD) endif() setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) if(NOT FRAMELESSHELPER_NO_INSTALL)