[cmake] refactor: better git-free build identification
Allows GIT-TAG, GIT-COMMIT, GIT-REFSPEC, and GIT-RELEASE files to identify the build first and foremost. Also cleans up/dedups + uses my GetSCMRev module. Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
8ac495acee
commit
ae038bff7d
6 changed files with 81 additions and 42 deletions
|
@ -1,38 +1,35 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
# Gets a UTC timestamp and sets the provided variable to it
|
# generate git/build information
|
||||||
|
include(GetSCMRev)
|
||||||
|
|
||||||
function(get_timestamp _var)
|
function(get_timestamp _var)
|
||||||
string(TIMESTAMP timestamp UTC)
|
string(TIMESTAMP timestamp UTC)
|
||||||
set(${_var} "${timestamp}" PARENT_SCOPE)
|
set(${_var} "${timestamp}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# generate git/build information
|
|
||||||
include(GetGitRevisionDescription)
|
|
||||||
if(NOT GIT_REF_SPEC)
|
|
||||||
get_git_head_revision(GIT_REF_SPEC GIT_REV)
|
|
||||||
endif()
|
|
||||||
if(NOT GIT_DESC)
|
|
||||||
git_describe(GIT_DESC --always --long --dirty)
|
|
||||||
endif()
|
|
||||||
if (NOT GIT_BRANCH)
|
|
||||||
git_branch_name(GIT_BRANCH)
|
|
||||||
endif()
|
|
||||||
get_timestamp(BUILD_DATE)
|
get_timestamp(BUILD_DATE)
|
||||||
|
|
||||||
git_get_exact_tag(GIT_TAG --tags)
|
if (DEFINED GIT_RELEASE)
|
||||||
if (GIT_TAG MATCHES "NOTFOUND")
|
set(BUILD_VERSION "${GIT_TAG}")
|
||||||
set(BUILD_VERSION "${GIT_DESC}")
|
set(GIT_REFSPEC "${GIT_RELEASE}")
|
||||||
set(IS_DEV_BUILD true)
|
|
||||||
else()
|
|
||||||
set(BUILD_VERSION ${GIT_TAG})
|
|
||||||
set(IS_DEV_BUILD false)
|
set(IS_DEV_BUILD false)
|
||||||
|
else()
|
||||||
|
string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION)
|
||||||
|
set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}")
|
||||||
|
set(IS_DEV_BUILD true)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(GIT_DESC ${BUILD_VERSION})
|
||||||
|
|
||||||
# Generate cpp with Git revision from template
|
# Generate cpp with Git revision from template
|
||||||
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
||||||
set(REPO_NAME "Eden")
|
set(REPO_NAME "Eden")
|
||||||
set(BUILD_ID ${GIT_BRANCH})
|
set(BUILD_ID ${GIT_REFSPEC})
|
||||||
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
||||||
|
|
||||||
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||||
|
|
49
CMakeModules/GetSCMRev.cmake
Normal file
49
CMakeModules/GetSCMRev.cmake
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# SPDX-FileCopyrightText: 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
include(GetGitRevisionDescription)
|
||||||
|
|
||||||
|
function(trim var)
|
||||||
|
string(REGEX REPLACE "\n" "" new "${${var}}")
|
||||||
|
set(${var} ${new} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
||||||
|
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
||||||
|
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
||||||
|
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
||||||
|
|
||||||
|
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
||||||
|
file(READ ${REF_FILE} GIT_REFSPEC)
|
||||||
|
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
||||||
|
else()
|
||||||
|
get_git_head_revision(GIT_REFSPEC GIT_COMMIT)
|
||||||
|
git_branch_name(GIT_REFSPEC)
|
||||||
|
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
||||||
|
set(GIT_REFSPEC 1.0.0)
|
||||||
|
set(GIT_COMMIT stable)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${TAG_FILE})
|
||||||
|
file(READ ${TAG_FILE} GIT_TAG)
|
||||||
|
else()
|
||||||
|
git_describe(GIT_TAG --tags --abbrev=0)
|
||||||
|
if (GIT_TAG MATCHES "NOTFOUND")
|
||||||
|
set(GIT_TAG "${GIT_REFSPEC}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${RELEASE_FILE})
|
||||||
|
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
||||||
|
trim(GIT_RELEASE)
|
||||||
|
message(STATUS "Git release: ${GIT_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
trim(GIT_REFSPEC)
|
||||||
|
trim(GIT_COMMIT)
|
||||||
|
trim(GIT_TAG)
|
||||||
|
|
||||||
|
message(STATUS "Git commit: ${GIT_COMMIT}")
|
||||||
|
message(STATUS "Git tag: ${GIT_TAG}")
|
||||||
|
message(STATUS "Git refspec: ${GIT_REFSPEC}")
|
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
#include "common/scm_rev.h"
|
#include "common/scm_rev.h"
|
||||||
|
|
||||||
#define GIT_REV "@GIT_REV@"
|
#define GIT_REV "@GIT_COMMIT@"
|
||||||
#define GIT_BRANCH "@GIT_BRANCH@"
|
#define GIT_BRANCH "@GIT_REFSPEC@"
|
||||||
#define GIT_DESC "@GIT_DESC@"
|
#define GIT_DESC "@GIT_DESC@"
|
||||||
#define BUILD_NAME "@REPO_NAME@"
|
#define BUILD_NAME "@REPO_NAME@"
|
||||||
#define BUILD_DATE "@BUILD_DATE@"
|
#define BUILD_DATE "@BUILD_DATE@"
|
||||||
|
@ -31,7 +31,7 @@ constexpr const char g_build_version[] = BUILD_VERSION;
|
||||||
constexpr const char g_build_id[] = BUILD_ID;
|
constexpr const char g_build_id[] = BUILD_ID;
|
||||||
constexpr const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE;
|
constexpr const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE;
|
||||||
constexpr const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING;
|
constexpr const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING;
|
||||||
constexpr const bool g_is_dev_build = IS_DEV_BUILD;
|
|
||||||
constexpr const char g_compiler_id[] = COMPILER_ID;
|
constexpr const char g_compiler_id[] = COMPILER_ID;
|
||||||
|
constexpr const bool g_is_dev_build = IS_DEV_BUILD;
|
||||||
|
|
||||||
} // namespace Common
|
} // namespace Common
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
||||||
|
@ -19,7 +19,7 @@ extern const char g_build_id[];
|
||||||
extern const char g_title_bar_format_idle[];
|
extern const char g_title_bar_format_idle[];
|
||||||
extern const char g_title_bar_format_running[];
|
extern const char g_title_bar_format_running[];
|
||||||
extern const char g_shader_cache_version[];
|
extern const char g_shader_cache_version[];
|
||||||
extern const bool g_is_dev_build;
|
|
||||||
extern const char g_compiler_id[];
|
extern const char g_compiler_id[];
|
||||||
|
extern const bool g_is_dev_build;
|
||||||
|
|
||||||
} // namespace Common
|
} // namespace Common
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
@ -11,16 +14,11 @@ AboutDialog::AboutDialog(QWidget* parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
, ui{std::make_unique<Ui::AboutDialog>()}
|
, ui{std::make_unique<Ui::AboutDialog>()}
|
||||||
{
|
{
|
||||||
static const std::string description = std::string(Common::g_build_version);
|
static const std::string description = std::string{Common::g_build_version};
|
||||||
static const std::string build_id = std::string(Common::g_build_id);
|
static const std::string build_id = std::string{Common::g_build_id};
|
||||||
static const std::string compiler = std::string(Common::g_compiler_id);
|
static const std::string compiler = std::string{Common::g_compiler_id};
|
||||||
|
|
||||||
std::string yuzu_build;
|
static const std::string yuzu_title = fmt::format("Eden | {} | {}", description, compiler);
|
||||||
if (Common::g_is_dev_build) {
|
|
||||||
yuzu_build = fmt::format("Eden Nightly | {}-{} | {}", description, build_id, compiler);
|
|
||||||
} else {
|
|
||||||
yuzu_build = fmt::format("Eden | {} | {}", description, compiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto override_build = fmt::format(fmt::runtime(
|
const auto override_build = fmt::format(fmt::runtime(
|
||||||
std::string(Common::g_title_bar_format_idle)),
|
std::string(Common::g_title_bar_format_idle)),
|
||||||
|
|
|
@ -4205,16 +4205,11 @@ void GMainWindow::OnEmulatorUpdateAvailable() {
|
||||||
|
|
||||||
void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_view title_version,
|
void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_view title_version,
|
||||||
std::string_view gpu_vendor) {
|
std::string_view gpu_vendor) {
|
||||||
static const std::string description = std::string(Common::g_build_version);
|
static const std::string description = std::string{Common::g_build_version};
|
||||||
static const std::string build_id = std::string(Common::g_build_id);
|
static const std::string build_id = std::string{Common::g_build_id};
|
||||||
static const std::string compiler = std::string(Common::g_compiler_id);
|
static const std::string compiler = std::string{Common::g_compiler_id};
|
||||||
|
|
||||||
std::string yuzu_title;
|
static const std::string yuzu_title = fmt::format("Eden | {} | {}", description, compiler);
|
||||||
if (Common::g_is_dev_build) {
|
|
||||||
yuzu_title = fmt::format("Eden Nightly | {}-{} | {}", description, build_id, compiler);
|
|
||||||
} else {
|
|
||||||
yuzu_title = fmt::format("Eden | {} | {}", description, compiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto override_title =
|
const auto override_title =
|
||||||
fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id);
|
fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue