Skip to content
This repository has been archived by the owner on Dec 19, 2023. It is now read-only.

Commit

Permalink
cmake: update
Browse files Browse the repository at this point in the history
  • Loading branch information
wangwenx190 committed Sep 10, 2023
1 parent 4df552d commit 66206aa
Show file tree
Hide file tree
Showing 9 changed files with 153 additions and 220 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ target_wrapper.*
# QtCreator CMake
CMakeLists.txt.user*

# QtCreator 4.8< compilation database
# QtCreator 4.8< compilation database
compile_commands.json

# QtCreator local machine specific files for imported projects
Expand All @@ -54,6 +54,8 @@ compile_commands.json
# My
[Bb]in/
[Bb]in64/
[Ll]ib/
[Ll]ib64/
[Bb]uild*/
*.7z
*.zip
Expand Down
206 changes: 56 additions & 150 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ if(FRAMELESSHELPER_NO_WINDOW AND FRAMELESSHELPER_BUILD_EXAMPLES)
set(FRAMELESSHELPER_BUILD_EXAMPLES OFF)
endif()

set(PROJECT_VERSION_HEX "0x00000000")
math(EXPR PROJECT_VERSION_HEX "((${PROJECT_VERSION_MAJOR} & 0xff) << 24) | ((${PROJECT_VERSION_MINOR} & 0xff) << 16) | ((${PROJECT_VERSION_PATCH} & 0xff) << 8)" OUTPUT_FORMAT HEXADECIMAL)

set(FRAMELESSHELPER_64BIT_POSTFIX "")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(FRAMELESSHELPER_64BIT_POSTFIX "64")
Expand Down Expand Up @@ -99,13 +96,49 @@ if(FRAMELESSHELPER_ENABLE_VCLTL AND NOT MSVC)
message(WARNING "VC-LTL is only available for the MSVC toolchain.")
endif()

set(FRAMELESSHELPER_LICENSE_HEADER "/*
* MIT License
*
* Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the \"Software\"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/")

set(FRAMELESSHELPER_MODIFY_LOST_WARNING "// Caution: This file is generated by CMake automatically during configure.
// WARNING!!! DO NOT EDIT THIS FILE MANUALLY!!!
// ALL YOUR MODIFICATIONS HERE WILL GET LOST AFTER RE-CONFIGURING!!!
// Also please do not include this file directly,
// it's designed to be included by FramelessHelper's own headers.")

string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER)

set(__extra_flags "")
if(NOT FRAMELESSHELPER_BUILD_STATIC)
list(APPEND __extra_flags ENABLE_LTO)
endif()
setup_project(
QT_PROJECT
QML_IMPORT_DIR "${PROJECT_BINARY_DIR}/imports"
LICENSE_HEADER "${FRAMELESSHELPER_LICENSE_HEADER}"
MODIFY_LOST_WARNING "${FRAMELESSHELPER_MODIFY_LOST_WARNING}"
CONFIG_PREFIX "${PROJECT_NAME_UPPER}_FEATURE"
VERSION_PREFIX "${PROJECT_NAME_UPPER}"
LANGUAGES CXX RC
MAX_WARNING
RTTI
Expand All @@ -114,13 +147,6 @@ setup_project(
)
unset(__extra_flags)

set(PROJECT_VERSION_COMMIT "UNKNOWN")
set(PROJECT_COMPILE_DATETIME "UNKNOWN")
if(NOT FRAMELESSHELPER_REPRODUCIBLE_OUTPUT)
get_commit_hash(RESULT PROJECT_VERSION_COMMIT)
string(TIMESTAMP PROJECT_COMPILE_DATETIME UTC)
endif()

if(MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(FRAMELESSHELPER_ENABLE_SPECTRE OFF)
set(FRAMELESSHELPER_ENABLE_EHCONTGUARD OFF)
Expand Down Expand Up @@ -165,147 +191,29 @@ if(FRAMELESSHELPER_BUILD_QUICK AND NOT TARGET Qt${QT_VERSION_MAJOR}::Quick)
set(FRAMELESSHELPER_BUILD_QUICK OFF)
endif()

set(FRAMELESSHELPER_LICENSE_HEADER "/*
* MIT License
*
* Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the \"Software\"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/")

set(FRAMELESSHELPER_CMAKE_WARNING "// Generated automatically by CMake.
// WARNING! DO NOT EDIT THIS FILE MANUALLY!
// ALL CHANGES WILL BE LOST AFTER RE-CONFIGURING!
// Also please do not include this file directly,
// it's designed to be included by FramelessHelper's own headers.")

### VERSION BEGIN ###
set(FRAMELESSHELPER_VERSION_FILE "${PROJECT_BINARY_DIR}/framelesshelper.version")
if(NOT EXISTS "${FRAMELESSHELPER_VERSION_FILE}")
set(__version_content "${FRAMELESSHELPER_LICENSE_HEADER}
${FRAMELESSHELPER_CMAKE_WARNING}
#ifndef _FRAMELESSHELPER_VERSION_DEFINED_
#define _FRAMELESSHELPER_VERSION_DEFINED_
[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_MAJOR = ${PROJECT_VERSION_MAJOR};
[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_MINOR = ${PROJECT_VERSION_MINOR};
[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_PATCH = ${PROJECT_VERSION_PATCH};
//[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_TWEAK = ${PROJECT_VERSION_TWEAK};
[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_VERSION_STR[] = \"${PROJECT_VERSION}\";
[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_COMMIT_STR[] = \"${PROJECT_VERSION_COMMIT}\";
[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = \"${PROJECT_COMPILE_DATETIME}\";
#define __FRAMELESSHELPER_VERSION_MAJOR__ ${PROJECT_VERSION_MAJOR}
#define __FRAMELESSHELPER_VERSION_MINOR__ ${PROJECT_VERSION_MINOR}
#define __FRAMELESSHELPER_VERSION_PATCH__ ${PROJECT_VERSION_PATCH}
//#define __FRAMELESSHELPER_VERSION_TWEAK__ ${PROJECT_VERSION_TWEAK}
#define __FRAMELESSHELPER_VERSION__ ${PROJECT_VERSION_HEX}
#define __FRAMELESSHELPER__ ${PROJECT_VERSION_HEX}
#endif // _FRAMELESSHELPER_VERSION_DEFINED_
")
file(WRITE "${FRAMELESSHELPER_VERSION_FILE}" "${__version_content}")
unset(__version_content)
endif()
### VERSION END ###
generate_project_version(
PATH "${FRAMELESSHELPER_VERSION_FILE}"
COMMIT_HASH COMMIT_SUBJECT COMMIT_AUTHOR
COMMIT_DATETIME COMMIT_BRANCH COMPILER_NAME
COMPILER_VENDOR COMPILER_VERSION BUILD_DATETIME
ARCHITECTURE CMAKE_VERSION GENERATOR
)

### MODULAR CONFIGURATION BEGIN ###
set(FRAMELESSHELPER_CONFIG_FILE "${PROJECT_BINARY_DIR}/framelesshelper.config")
if(NOT EXISTS "${FRAMELESSHELPER_CONFIG_FILE}")
set(FRAMELESSHELPER_FEATURE_static_build "-1")
if(FRAMELESSHELPER_BUILD_STATIC)
set(FRAMELESSHELPER_FEATURE_static_build "1")
endif()
set(FRAMELESSHELPER_FEATURE_widgets "-1")
if(FRAMELESSHELPER_BUILD_WIDGETS)
set(FRAMELESSHELPER_FEATURE_widgets "1")
endif()
set(FRAMELESSHELPER_FEATURE_quick "-1")
if(FRAMELESSHELPER_BUILD_QUICK)
set(FRAMELESSHELPER_FEATURE_quick "1")
endif()
set(FRAMELESSHELPER_FEATURE_debug_output "-1")
if(NOT FRAMELESSHELPER_NO_DEBUG_OUTPUT)
set(FRAMELESSHELPER_FEATURE_debug_output "1")
endif()
set(FRAMELESSHELPER_FEATURE_bundle_resource "-1")
if(NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
set(FRAMELESSHELPER_FEATURE_bundle_resource "1")
endif()
set(FRAMELESSHELPER_FEATURE_private_qt "-1")
if(NOT FRAMELESSHELPER_NO_PRIVATE)
set(FRAMELESSHELPER_FEATURE_private_qt "1")
endif()
set(FRAMELESSHELPER_FEATURE_window "-1")
if(NOT FRAMELESSHELPER_NO_WINDOW)
set(FRAMELESSHELPER_FEATURE_window "1")
endif()
set(FRAMELESSHELPER_FEATURE_titlebar "-1")
if(NOT FRAMELESSHELPER_NO_TITLEBAR)
set(FRAMELESSHELPER_FEATURE_titlebar "1")
endif()
set(FRAMELESSHELPER_FEATURE_translation "-1")
if(NOT FRAMELESSHELPER_NO_TRANSLATION)
set(FRAMELESSHELPER_FEATURE_translation "1")
endif()
set(FRAMELESSHELPER_FEATURE_mica_material "-1")
if(NOT FRAMELESSHELPER_NO_MICA_MATERIAL)
set(FRAMELESSHELPER_FEATURE_mica_material "1")
endif()
set(FRAMELESSHELPER_FEATURE_border_painter "-1")
if(NOT FRAMELESSHELPER_NO_BORDER_PAINTER)
set(FRAMELESSHELPER_FEATURE_border_painter "1")
endif()
set(FRAMELESSHELPER_FEATURE_system_button "-1")
if(NOT FRAMELESSHELPER_NO_SYSTEM_BUTTON)
set(FRAMELESSHELPER_FEATURE_system_button "1")
endif()
set(__config_content "${FRAMELESSHELPER_LICENSE_HEADER}
${FRAMELESSHELPER_CMAKE_WARNING}
#pragma once
#ifndef _FRAMELESSHELPER_CONFIG_DEFINED_
#define _FRAMELESSHELPER_CONFIG_DEFINED_
#define FRAMELESSHELPER_FEATURE_static_build ${FRAMELESSHELPER_FEATURE_static_build}
#define FRAMELESSHELPER_FEATURE_widgets ${FRAMELESSHELPER_FEATURE_widgets}
#define FRAMELESSHELPER_FEATURE_quick ${FRAMELESSHELPER_FEATURE_quick}
#define FRAMELESSHELPER_FEATURE_debug_output ${FRAMELESSHELPER_FEATURE_debug_output}
#define FRAMELESSHELPER_FEATURE_bundle_resource ${FRAMELESSHELPER_FEATURE_bundle_resource}
#define FRAMELESSHELPER_FEATURE_private_qt ${FRAMELESSHELPER_FEATURE_private_qt}
#define FRAMELESSHELPER_FEATURE_window ${FRAMELESSHELPER_FEATURE_window}
#define FRAMELESSHELPER_FEATURE_titlebar ${FRAMELESSHELPER_FEATURE_titlebar}
#define FRAMELESSHELPER_FEATURE_translation ${FRAMELESSHELPER_FEATURE_translation}
#define FRAMELESSHELPER_FEATURE_mica_material ${FRAMELESSHELPER_FEATURE_mica_material}
#define FRAMELESSHELPER_FEATURE_border_painter ${FRAMELESSHELPER_FEATURE_border_painter}
#define FRAMELESSHELPER_FEATURE_system_button ${FRAMELESSHELPER_FEATURE_system_button}
#endif // _FRAMELESSHELPER_CONFIG_DEFINED_
")
file(WRITE "${FRAMELESSHELPER_CONFIG_FILE}" "${__config_content}")
unset(__config_content)
endif()
### MODULAR CONFIGURATION END ###
add_project_config(KEY "static_build" CONDITION FRAMELESSHELPER_BUILD_STATIC)
add_project_config(KEY "widgets" CONDITION FRAMELESSHELPER_BUILD_WIDGETS)
add_project_config(KEY "quick" CONDITION FRAMELESSHELPER_BUILD_QUICK)
add_project_config(KEY "debug_output" CONDITION NOT FRAMELESSHELPER_NO_DEBUG_OUTPUT)
add_project_config(KEY "bundle_resource" CONDITION NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
add_project_config(KEY "private_qt" CONDITION NOT FRAMELESSHELPER_NO_PRIVATE)
add_project_config(KEY "window" CONDITION NOT FRAMELESSHELPER_NO_WINDOW)
add_project_config(KEY "titlebar" CONDITION NOT FRAMELESSHELPER_NO_TITLEBAR)
add_project_config(KEY "translation" CONDITION NOT FRAMELESSHELPER_NO_TRANSLATION)
add_project_config(KEY "mica_material" CONDITION NOT FRAMELESSHELPER_NO_MICA_MATERIAL)
add_project_config(KEY "border_painter" CONDITION NOT FRAMELESSHELPER_NO_BORDER_PAINTER)
add_project_config(KEY "system_button" CONDITION NOT FRAMELESSHELPER_NO_SYSTEM_BUTTON)
generate_project_config(PATH "${FRAMELESSHELPER_CONFIG_FILE}")

if(TARGET Qt${QT_VERSION_MAJOR}::Core AND TARGET Qt${QT_VERSION_MAJOR}::Gui)
add_subdirectory(src)
Expand Down Expand Up @@ -372,8 +280,6 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY)
endif()
message("------------------------ FramelessHelper ------------------------")
message("FramelessHelper version: ${PROJECT_VERSION}")
message("FramelessHelper commit hash: ${PROJECT_VERSION_COMMIT}")
message("FramelessHelper configure date and time: ${PROJECT_COMPILE_DATETIME} (UTC)")
message("Build the static version of FramelessHelper: ${FRAMELESSHELPER_BUILD_STATIC}")
message("Build the FramelessHelper::Widgets module: ${FRAMELESSHELPER_BUILD_WIDGETS}")
message("Build the FramelessHelper::Quick module: ${FRAMELESSHELPER_BUILD_QUICK}")
Expand Down
20 changes: 20 additions & 0 deletions build/msvc2022.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@echo off
title Building FramelessHelper ...
setlocal
cls
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
cd /d "%~dp0"
if exist cmake rd /s /q cmake
md cmake
cd cmake
md build
cd build
cmake -DCMAKE_PREFIX_PATH="C:\Qt\6.6.0\msvc2019_64" -DCMAKE_INSTALL_PREFIX="%~dp0cmake\install" -DCMAKE_CONFIGURATION_TYPES=Release;Debug -G"Ninja Multi-Config" -DFRAMELESSHELPER_ENABLE_VCLTL=ON -DFRAMELESSHELPER_ENABLE_YYTHUNKS=ON -DFRAMELESSHELPER_ENABLE_SPECTRE=ON -DFRAMELESSHELPER_ENABLE_EHCONTGUARD=ON -DFRAMELESSHELPER_ENABLE_INTELCET=ON -DFRAMELESSHELPER_ENABLE_INTELJCC=ON -DFRAMELESSHELPER_ENABLE_CFGUARD=ON -DFRAMELESSHELPER_FORCE_LTO=ON "%~dp0.."
cmake --build . --target all --config Release --parallel
cmake --build . --target all --config Debug --parallel
cmake --install . --config Release --strip
cmake --install . --config Debug
endlocal
cd /d "%~dp0"
pause
exit /b 0
2 changes: 1 addition & 1 deletion cmake
Submodule cmake updated 1 files
+624 −3 utils.cmake
37 changes: 24 additions & 13 deletions include/FramelessHelper/Core/framelesshelpercore_global.h
Original file line number Diff line number Diff line change
Expand Up @@ -265,12 +265,6 @@ FRAMELESSHELPER_BEGIN_NAMESPACE

#include "framelesshelper.version"

[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION =
FRAMELESSHELPER_MAKE_VERSION(
FRAMELESSHELPER_VERSION_MAJOR,
FRAMELESSHELPER_VERSION_MINOR,
FRAMELESSHELPER_VERSION_PATCH);

namespace Global
{

Expand Down Expand Up @@ -489,13 +483,30 @@ Q_ENUM_NS(WindowCornerStyle)

struct VersionInfo
{
int version = 0;
const char *version_str = nullptr;
const char *commit = nullptr;
const char *compileDateTime = nullptr;
const char *compiler = nullptr;
bool isDebug = false;
bool isStatic = false;
struct {
unsigned long num = 0;
const char *str = nullptr;
} version = {};
struct {
const char *hash = nullptr;
const char *subject = nullptr;
const char *author = nullptr;
const char *datetime = nullptr;
const char *branch = nullptr;
} commit = {};
struct {
const char *name = nullptr;
const char *version = nullptr;
const char *vendor = nullptr;
} compiler = {};
struct {
const char *cmake_version = nullptr;
const char *configure_datetime = nullptr;
const char *generator = nullptr;
const char *architecture = nullptr;
bool is_debug = false;
bool is_static = false;
} build = {};
};

struct Dpi
Expand Down
8 changes: 4 additions & 4 deletions include/FramelessHelper/Core/private/versionnumber_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ FRAMELESSHELPER_BEGIN_NAMESPACE

struct VersionNumber
{
int Major = 0;
int Minor = 0;
int Patch = 0;
int Tweak = 0;
unsigned long Major = 0;
unsigned long Minor = 0;
unsigned long Patch = 0;
unsigned long Tweak = 0;

[[nodiscard]] friend constexpr bool operator==(const VersionNumber &lhs, const VersionNumber &rhs) noexcept
{
Expand Down
Loading

0 comments on commit 66206aa

Please sign in to comment.