From 84745db4d938285a4246e64b8238b255854302c5 Mon Sep 17 00:00:00 2001 From: Dylan Liu Date: Wed, 17 May 2023 20:19:31 +0800 Subject: [PATCH] Add Universal build for macOS and compile error fixed. (#217) * Add Universal build for macOS. * Fix compile error in example quick. * Use cmake_dependent_option instead of option. --- CMakeLists.txt | 9 +++++++++ examples/dialog/CMakeLists.txt | 4 ++++ examples/mainwindow/CMakeLists.txt | 4 ++++ examples/openglwidget/CMakeLists.txt | 4 ++++ examples/quick/CMakeLists.txt | 4 ++++ examples/quick/main.cpp | 2 +- examples/widget/CMakeLists.txt | 4 ++++ src/core/CMakeLists.txt | 4 ++++ src/quick/CMakeLists.txt | 4 ++++ src/widgets/CMakeLists.txt | 4 ++++ 10 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba6c4b8..1768358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ project(FramelessHelper HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/" ) +include(CMakeDependentOption) + option(FRAMELESSHELPER_BUILD_STATIC "Build FramelessHelper as a static library." OFF) option(FRAMELESSHELPER_BUILD_WIDGETS "Build FramelessHelper's Widgets module." ON) option(FRAMELESSHELPER_BUILD_QUICK "Build FramelessHelper's Quick module." ON) @@ -49,6 +51,12 @@ option(FRAMELESSHELPER_ENABLE_INTELCET "Enable Intel CET." OFF) option(FRAMELESSHELPER_ENABLE_INTELJCC "Enable Intel JCC." OFF) option(FRAMELESSHELPER_ENABLE_CFGUARD "Enable Control Flow Guard (CFG)." OFF) option(FRAMELESSHELPER_EXAMPLES_STANDALONE "Build the demo projects as standalone CMake projects." OFF) +cmake_dependent_option(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD "macOS only: build universal library/exemple for Mac." ON APPLE OFF) + +if(NOT APPLE AND FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + message(WARNING "Your OS is not macOS, universal library will not be generated.") + set(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD OFF) +endif() if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE) message(WARNING "Nothing will be embeded into the FramelessHelper library, the chrome buttons will have no icon.") @@ -191,5 +199,6 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY) message("Enable Intel JCC: ${FRAMELESSHELPER_ENABLE_INTELJCC}") message("Enable Control Flow Guard (CFG): ${FRAMELESSHELPER_ENABLE_CFGUARD}") message("Build standalone demo projects: ${FRAMELESSHELPER_EXAMPLES_STANDALONE}") + message("[macOS]: Build universal library/exemple: ${FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD}") message("-----------------------------------------------------------------") endif() diff --git a/examples/dialog/CMakeLists.txt b/examples/dialog/CMakeLists.txt index 920f069..0add8e8 100644 --- a/examples/dialog/CMakeLists.txt +++ b/examples/dialog/CMakeLists.txt @@ -24,6 +24,10 @@ set(DEMO_NAME FramelessHelperDemo-Dialog) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(FRAMELESSHELPER_EXAMPLES_STANDALONE) cmake_minimum_required(VERSION 3.20) project(${DEMO_NAME} VERSION 1.0) diff --git a/examples/mainwindow/CMakeLists.txt b/examples/mainwindow/CMakeLists.txt index 09fe670..7d789c2 100644 --- a/examples/mainwindow/CMakeLists.txt +++ b/examples/mainwindow/CMakeLists.txt @@ -24,6 +24,10 @@ set(DEMO_NAME FramelessHelperDemo-MainWindow) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(FRAMELESSHELPER_EXAMPLES_STANDALONE) cmake_minimum_required(VERSION 3.20) project(${DEMO_NAME} VERSION 1.0) diff --git a/examples/openglwidget/CMakeLists.txt b/examples/openglwidget/CMakeLists.txt index 833cdec..264d971 100644 --- a/examples/openglwidget/CMakeLists.txt +++ b/examples/openglwidget/CMakeLists.txt @@ -24,6 +24,10 @@ set(DEMO_NAME FramelessHelperDemo-OpenGLWidget) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(FRAMELESSHELPER_EXAMPLES_STANDALONE) cmake_minimum_required(VERSION 3.20) project(${DEMO_NAME} VERSION 1.0) diff --git a/examples/quick/CMakeLists.txt b/examples/quick/CMakeLists.txt index c36e9e1..2d43d5a 100644 --- a/examples/quick/CMakeLists.txt +++ b/examples/quick/CMakeLists.txt @@ -24,6 +24,10 @@ set(DEMO_NAME FramelessHelperDemo-Quick) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(FRAMELESSHELPER_EXAMPLES_STANDALONE) cmake_minimum_required(VERSION 3.20) project(${DEMO_NAME} VERSION 1.0) diff --git a/examples/quick/main.cpp b/examples/quick/main.cpp index 3e8b3eb..64705a9 100644 --- a/examples/quick/main.cpp +++ b/examples/quick/main.cpp @@ -136,7 +136,7 @@ int main(int argc, char *argv[]) }, Qt::QueuedConnection); #elif !QMLTC_ENABLED const QMetaObject::Connection connection = QObject::connect( - engine.get(), &QQmlApplicationEngine::objectCreated, &application, + engine.get(), &QQmlApplicationEngine::objectCreated, application.get(), [&mainUrl, &connection](QObject *object, const QUrl &url) { if (url != mainUrl) { return; diff --git a/examples/widget/CMakeLists.txt b/examples/widget/CMakeLists.txt index 14595e1..437b929 100644 --- a/examples/widget/CMakeLists.txt +++ b/examples/widget/CMakeLists.txt @@ -24,6 +24,10 @@ set(DEMO_NAME FramelessHelperDemo-Widget) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(FRAMELESSHELPER_EXAMPLES_STANDALONE) cmake_minimum_required(VERSION 3.20) project(${DEMO_NAME} VERSION 1.0) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 0bd8905..a0320f1 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -24,6 +24,10 @@ include(GNUInstallDirs) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + if(UNIX AND NOT APPLE) if(FRAMELESSHELPER_NO_PRIVATE) # Qt X11Extras is only available in Qt5. diff --git a/src/quick/CMakeLists.txt b/src/quick/CMakeLists.txt index 595a0a3..0ea23f1 100644 --- a/src/quick/CMakeLists.txt +++ b/src/quick/CMakeLists.txt @@ -24,6 +24,10 @@ include(GNUInstallDirs) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTemplates2 QuickControls2) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTemplates2 QuickControls2) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 3247d54..2ce8753 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -24,6 +24,10 @@ include(GNUInstallDirs) +if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + set(SUB_MOD_NAME Widgets) set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME}) set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME})