diff --git a/level_zero/core/source/driver/driver.cpp b/level_zero/core/source/driver/driver.cpp index 3c61bfbebb..5930c00f4b 100644 --- a/level_zero/core/source/driver/driver.cpp +++ b/level_zero/core/source/driver/driver.cpp @@ -20,9 +20,21 @@ #include "level_zero/experimental/source/log_utility/log_manager.h" #include "level_zero/tools/source/metrics/metric.h" +#include "driver_version.h" + #include #include +#define QTR(a) #a +#define TOSTR(b) QTR(b) +#define LOG_INFO_VERSION_SHA(logType, version, sha) \ + auto logger = NEO::LogManager::getInstance()->getLogger(logType); \ + if (logger) { \ + char logBuffer[256]; \ + snprintf(logBuffer, 256, "Level zero driver version and SHA : %s - %s\n", version, sha); \ + logger->logInfo(logBuffer); \ + } + namespace L0 { _ze_driver_handle_t *globalDriverHandle; @@ -59,10 +71,8 @@ void DriverImp::initialize(ze_result_t *result) { executionEnvironment->setDebuggingMode(dbgMode); } - // spdlog enablement - if ((NEO::debugManager.flags.EnableLogLevel.get() != (uint32_t)NEO::LogLevel::logLevelOff)) { - CREATE_LOGGER(NEO::LogManager::LogType::coreLogger, "coreLogger.log", NEO::debugManager.flags.EnableLogLevel.get()); - } + // Logging enablement if opted + initLogger(); if (envVariables.fp64Emulation) { executionEnvironment->setFP64EmulationEnabled(); @@ -101,6 +111,13 @@ void DriverImp::initialize(ze_result_t *result) { ze_result_t DriverImp::initStatus(ZE_RESULT_ERROR_UNINITIALIZED); +void DriverImp::initLogger() { + if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) { + CREATE_LOGGER(NEO::LogManager::LogType::coreLogger, "coreLogger.log", NEO::LogManager::getLoggingLevel()); + LOG_INFO_VERSION_SHA(NEO::LogManager::LogType::coreLogger, TOSTR(NEO_OCL_DRIVER_VERSION), NEO_REVISION); + } +} + ze_result_t DriverImp::driverInit(ze_init_flags_t flags) { std::call_once(initDriverOnce, [this]() { ze_result_t result; diff --git a/level_zero/core/source/driver/driver_imp.h b/level_zero/core/source/driver/driver_imp.h index a723948af6..6d868cc7c7 100644 --- a/level_zero/core/source/driver/driver_imp.h +++ b/level_zero/core/source/driver/driver_imp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Intel Corporation + * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -21,6 +21,7 @@ class DriverImp : public Driver { void initialize(ze_result_t *result) override; protected: + void initLogger(); std::once_flag initDriverOnce; static ze_result_t initStatus; }; diff --git a/level_zero/experimental/source/log_utility/linux/linux_log_manager.cpp b/level_zero/experimental/source/log_utility/linux/linux_log_manager.cpp index af22d23706..e61c5f2602 100644 --- a/level_zero/experimental/source/log_utility/linux/linux_log_manager.cpp +++ b/level_zero/experimental/source/log_utility/linux/linux_log_manager.cpp @@ -7,10 +7,13 @@ #include "linux_log_manager.h" +#include "shared/source/debug_settings/debug_settings_manager.h" + #include namespace NEO { std::unique_ptr LogManager::instancePtr = nullptr; +uint32_t LogManager::logLevel = UINT32_MAX; LogManager *LogManager::getInstance() { if (instancePtr == nullptr) { @@ -59,6 +62,13 @@ std::unique_ptr LinuxLogManager::createLoggerByType(LogManager return pLogger; } +uint32_t LogManager::getLoggingLevel() { + if (logLevel == UINT32_MAX) { + logLevel = NEO::debugManager.flags.EnableLogLevel.get(); + } + return logLevel; +} + std::unique_ptr LinuxLogManager::prepareLogger() { return std::make_unique(); } diff --git a/level_zero/experimental/source/log_utility/log_manager.h b/level_zero/experimental/source/log_utility/log_manager.h index ecc50db4c6..eb76c84225 100644 --- a/level_zero/experimental/source/log_utility/log_manager.h +++ b/level_zero/experimental/source/log_utility/log_manager.h @@ -37,24 +37,35 @@ class LogManager { virtual void destroyLogger(LogManager::LogType logType) = 0; + static uint32_t getLoggingLevel(); + virtual ~LogManager() = default; protected: static std::unique_ptr instancePtr; + static uint32_t logLevel; }; #define CREATE_LOGGER(logType, filename, logLevel) NEO::LogManager::getInstance()->createLogger(logType, filename, logLevel) -#define LOG_CRITICAL(condition, logType, msg) \ - if (condition) { \ - if (NEO::debugManager.flags.EnableLogLevel.get() != (uint32_t)NEO::LogLevel::logLevelOff) { \ - auto logger = NEO::LogManager::getInstance()->getLogger(logType); \ - if (logger) { \ - logger->logFatal(msg); \ - } \ - } \ +#define LOG_CRITICAL(condition, logType, msg) \ + if (condition) { \ + if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) { \ + auto logger = NEO::LogManager::getInstance()->getLogger(logType); \ + if (logger) { \ + logger->logFatal(msg); \ + } \ + } \ } #define LOG_CRITICAL_FOR_CORE(condition, msg) LOG_CRITICAL(condition, NEO::LogManager::LogType::coreLogger, msg) +#define LOG_INFO(logType, msg) \ + if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) { \ + auto logger = NEO::LogManager::getInstance()->getLogger(logType); \ + if (logger) { \ + logger->logInfo(msg); \ + } \ + } + } // namespace NEO diff --git a/level_zero/experimental/source/log_utility/windows/windows_log_manager.cpp b/level_zero/experimental/source/log_utility/windows/windows_log_manager.cpp index f8cf072c69..a380b849d8 100644 --- a/level_zero/experimental/source/log_utility/windows/windows_log_manager.cpp +++ b/level_zero/experimental/source/log_utility/windows/windows_log_manager.cpp @@ -9,6 +9,7 @@ namespace NEO { std::unique_ptr LogManager::instancePtr = nullptr; +uint32_t LogManager::logLevel = UINT32_MAX; LogManager *LogManager::getInstance() { if (instancePtr == nullptr) { @@ -29,6 +30,10 @@ NEO::Logger *WinLogManager::getLogger(LogManager::LogType logType) { return nullptr; } +uint32_t LogManager::getLoggingLevel() { + return (uint32_t)LogLevel::logLevelOff; +} + void WinLogManager::destroyLogger(LogManager::LogType logType) { } diff --git a/version.cmake b/version.cmake index 4e2e8fa854..83b0e90fcc 100644 --- a/version.cmake +++ b/version.cmake @@ -54,24 +54,24 @@ else() endif() endif() -if(NOT DEFINED NEO_VERSION_BUILD) - set(NEO_VERSION_BUILD 0) - set(NEO_REVISION 0) -else() - find_program(GIT NAMES git) - if(NOT "${GIT}" STREQUAL "GIT-NOTFOUND") - if(IS_DIRECTORY ${NEO_SOURCE_DIR}/.git) - set(GIT_arg --git-dir=${NEO_SOURCE_DIR}/.git rev-parse HEAD) - execute_process( - COMMAND ${GIT} ${GIT_arg} - OUTPUT_VARIABLE NEO_REVISION - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif() +find_program(GIT NAMES git) +if(NOT "${GIT}" STREQUAL "GIT-NOTFOUND") + if(IS_DIRECTORY ${NEO_SOURCE_DIR}/.git) + set(GIT_arg --git-dir=${NEO_SOURCE_DIR}/.git rev-parse HEAD) + execute_process( + COMMAND ${GIT} ${GIT_arg} + OUTPUT_VARIABLE NEO_REVISION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) endif() endif() + if(NOT DEFINED NEO_REVISION) - set(NEO_REVISION 0) + set(NEO_REVISION "No git SHA found, compiled outside git folder") +endif() + +if(NOT DEFINED NEO_VERSION_BUILD) + set(NEO_VERSION_BUILD 0) endif() if(NOT DEFINED NEO_VERSION_HOTFIX)