diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index b13e5732d4e16058331c952faeb3744372ef740d..82c06d3b3b25a6fbb87fb0ac5f38c0e69e354adc 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 0000000000000000000000000000000000000000..22cc1d2ec91982b3ea3d77972664d6fb1efd5bf6 --- /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 0000000000000000000000000000000000000000..8b6225c930f8d96b0234fc3562c58082d0bcd215 --- /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 0000000000000000000000000000000000000000..f5a4d9ea45af449d8bbba3b577dc8db42e0074ac --- /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 +)