diff --git a/.gitignore b/.gitignore index 536db679d9..dcf0cd6b67 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,7 @@ imgui.ini node_modules/ # texture replacements -texture_replacements/* \ No newline at end of file +texture_replacements/* + +# generated cmake files +svnrev.h diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 3e5d0d0472..52487f5569 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -124,6 +124,27 @@ set(RUNTIME_SOURCE system/vm/dmac.cpp system/vm/vm.cpp) +find_package(Git) + +function(write_svnrev_h) + set(GIT_SHORT_SHA "") + if (GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) + EXECUTE_PROCESS(WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + OUTPUT_VARIABLE GIT_SHORT_SHA + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + set(GIT_SHORT_SHA "unk. rev.") + endif() + if(NOT GIT_SHORT_SHA) + set(GIT_SHORT_SHA "unk. rev.") + else() + string(SUBSTRING ${GIT_SHORT_SHA} 0 6 GIT_SHORT_SHA) + endif() + + file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/kernel/svnrev.h "#define GIT_SHORT_SHA \"rev. ${GIT_SHORT_SHA}\"\n") +endfunction() + +write_svnrev_h() # we build the runtime as a static library. add_library(runtime STATIC ${RUNTIME_SOURCE} "../third-party/glad/src/glad.c") diff --git a/game/kernel/kmachine.cpp b/game/kernel/kmachine.cpp index 5d19c2dcd1..588384507c 100644 --- a/game/kernel/kmachine.cpp +++ b/game/kernel/kmachine.cpp @@ -40,6 +40,9 @@ #include "game/sce/libscf.h" #include "common/util/Assert.h" #include "game/discord.h" + +#include "svnrev.h" + using namespace ee; /*! @@ -884,6 +887,7 @@ void InitMachine_PCPort() { // TODO - we will eventually need a better way to know what game we are playing auto settings_path = file_util::get_user_settings_dir(); intern_from_c("*pc-settings-folder*")->value = make_string_from_c(settings_path.string().c_str()); + intern_from_c("*pc-settings-built-sha*")->value = make_string_from_c(GIT_SHORT_SHA); } void vif_interrupt_callback() { diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc index b955de8788..4ea00c3876 100644 --- a/goal_src/engine/game/main.gc +++ b/goal_src/engine/game/main.gc @@ -665,6 +665,9 @@ (*draw-hook*) (add-ee-profile-frame 'draw :g #x80) + (#when PC_PORT + (draw-build-revision)) + (*menu-hook*) (add-ee-profile-frame 'draw :g #x40) diff --git a/goal_src/kernel-defs.gc b/goal_src/kernel-defs.gc index 4ce936e1fd..d3d445f536 100644 --- a/goal_src/kernel-defs.gc +++ b/goal_src/kernel-defs.gc @@ -341,6 +341,7 @@ ;; Constants generated within the C++ runtime (define-extern *pc-user-dir-base-path* string) (define-extern *pc-settings-folder* string) +(define-extern *pc-settings-built-sha* string) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; vm functions diff --git a/goal_src/pc/pckernel.gc b/goal_src/pc/pckernel.gc index 3a9103adaf..3708ab193f 100644 --- a/goal_src/pc/pckernel.gc +++ b/goal_src/pc/pckernel.gc @@ -898,10 +898,19 @@ (define *entity-debug-inspect* (new 'debug 'entity-debug-inspect)) -) +) ;; when debug_segment +(defun-debug draw-build-revision () + (with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf)) + (bucket-id debug-draw1)) + (draw-string-xy *pc-settings-built-sha* + buf + 0 + (* 10 (-> *video-parms* relative-y-scale)) + (font-color flat-yellow) + (font-flags kerning)))) -) +) ;; when PC_PORT