From cf2edc0d6d00c740e8cd4b1c5a1d4a37986ad468 Mon Sep 17 00:00:00 2001
From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de>
Date: Wed, 17 May 2023 13:54:25 +0000
Subject: [PATCH] algo: Add build infos.

Generate the file algo/base/BuildInfo.cxx at compile time containing
various information like git commit and build configuration.
---
 algo/CMakeLists.txt                   | 17 ++++++++++++
 algo/base/BuildInfo.cxx.in            | 12 +++++++++
 algo/base/BuildInfo.h                 | 18 +++++++++++++
 cmake/modules/GenerateBuildInfo.cmake | 38 +++++++++++++++++++++++++++
 4 files changed, 85 insertions(+)
 create mode 100644 algo/base/BuildInfo.cxx.in
 create mode 100644 algo/base/BuildInfo.h
 create mode 100644 cmake/modules/GenerateBuildInfo.cmake

diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index b13e5732d4..82c06d3b3b 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -28,6 +28,23 @@ set(SRCS
   detectors/trd/UnpackTrd.cxx
 )
 
+set(BUILD_INFO_CXX ${CMAKE_CURRENT_BINARY_DIR}/base/BuildInfo.cxx)
+set(SRCS ${SRCS} ${BUILD_INFO_CXX})
+
+add_custom_target(generateBuildInfo
+    COMMAND ${CMAKE_COMMAND}
+        -DBUILD_TYPE=${CMAKE_BUILD_TYPE}
+        -DXPU_DEBUG=${XPU_DEBUG}
+        -DINFILE=${CMAKE_CURRENT_SOURCE_DIR}/base/BuildInfo.cxx.in
+        -DOUTFILE=${BUILD_INFO_CXX}
+        -P ${CMAKE_SOURCE_DIR}/cmake/modules/GenerateBuildInfo.cmake
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/base/BuildInfo.cxx.in
+            ${CMAKE_SOURCE_DIR}/cmake/modules/GenerateBuildInfo.cmake
+    BYPRODUCTS ${BUILD_INFO_CXX}
+    COMMENT "Generating build info"
+)
+
 add_library(Algo SHARED ${SRCS})
 
 target_include_directories(Algo
diff --git a/algo/base/BuildInfo.cxx.in b/algo/base/BuildInfo.cxx.in
new file mode 100644
index 0000000000..22cc1d2ec9
--- /dev/null
+++ b/algo/base/BuildInfo.cxx.in
@@ -0,0 +1,12 @@
+/* Copyright (C) 2022 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Felix Weiglhofer [committer]*/
+#include "BuildInfo.h"
+
+// GENERATED BY CMAKE.
+// DON'T CHANGE BY HAND. MODIFY .in-File INSTEAD.
+namespace cbm::algo::BuildInfo {
+const std::string GIT_HASH = "@GIT_HASH@";
+const std::string BUILD_TYPE = "@BUILD_TYPE@";
+const bool GPU_DEBUG = @GPU_DEBUG@;
+} // namespace cbm::algo::BuildInfo
diff --git a/algo/base/BuildInfo.h b/algo/base/BuildInfo.h
new file mode 100644
index 0000000000..8b6225c930
--- /dev/null
+++ b/algo/base/BuildInfo.h
@@ -0,0 +1,18 @@
+/* Copyright (C) 2022 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Felix Weiglhofer [committer]*/
+#ifndef CBM_ALGO_BUILD_INFO_H
+#define CBM_ALGO_BUILD_INFO_H
+
+#include <string>
+
+namespace cbm::algo::BuildInfo
+{
+
+  extern const std::string GIT_HASH;
+  extern const std::string BUILD_TYPE;
+  extern const bool GPU_DEBUG;
+
+}  // namespace cbm::algo::BuildInfo
+
+#endif  // CBM_ALGO_BUILD_INFO_H
diff --git a/cmake/modules/GenerateBuildInfo.cmake b/cmake/modules/GenerateBuildInfo.cmake
new file mode 100644
index 0000000000..f5a4d9ea45
--- /dev/null
+++ b/cmake/modules/GenerateBuildInfo.cmake
@@ -0,0 +1,38 @@
+execute_process(
+    COMMAND git log -1 --format=%H
+    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+    OUTPUT_VARIABLE GIT_HASH
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+if (NOT DEFINED INFILE)
+    message(FATAL_ERROR "INFILE not defined")
+endif()
+
+if (NOT DEFINED OUTFILE)
+    message(FATAL_ERROR "OUTFILE not defined")
+endif()
+
+if (NOT DEFINED XPU_DEBUG)
+    message(FATAL_ERROR "XPU_DEBUG not defined")
+endif()
+
+if (NOT DEFINED BUILD_TYPE)
+    message(FATAL_ERROR "BUILD_TYPE not defined")
+endif()
+
+# message(STATUS "Git hash: ${GIT_HASH}")
+# message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
+# message(STATUS "XPU_DEBUG: ${XPU_DEBUG}")
+
+if (XPU_DEBUG)
+    set(GPU_DEBUG 1)
+else()
+    set(GPU_DEBUG 0)
+endif()
+
+configure_file(
+    ${INFILE}
+    ${OUTFILE}
+    @ONLY
+)
-- 
GitLab