Added functionality to detect debug and release mode in code.

This commit is contained in:
Warwick 2023-11-29 11:48:59 +00:00
parent 08338d50a8
commit c07eae32c3
4 changed files with 44 additions and 7 deletions

View file

@ -1,14 +1,19 @@
cmake_minimum_required(VERSION 3.16)
# set toolchain file
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/toolchain.cmake"
CACHE PATH "Path to the desired toolchain file.")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_CLANG_TIDY)
project(yave
VERSION 0
DESCRIPTION "Yet Another Vulkan Engine"
HOMEPAGE_URL "https://git.warwicknew.xyz/yave/"
LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_CLANG_TIDY)
file(GLOB_RECURSE SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/*.c
${CMAKE_SOURCE_DIR}/src/*.cpp)

View file

@ -7,6 +7,7 @@ YaveVulkanInstance::YaveVulkanInstance() { createInstance(); }
YaveVulkanInstance::~YaveVulkanInstance() { destroyInstance(); }
void YaveVulkanInstance::createInstance() {
checkLayersValidSuppport();
VkApplicationInfo appInfo{};
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appInfo.pApplicationName = "Hello Triangle";
@ -38,4 +39,13 @@ void YaveVulkanInstance::destroyInstance() {
vkDestroyInstance(this->instance, nullptr);
}
bool YaveVulkanInstance::checkLayersValidSuppport() {
// Continue if validation is disabled
if (this->enableValidationLayers) {
throw std::runtime_error("validation layers requested, but not available!");
return false;
}
return true;
}
} // namespace yave

View file

@ -1,6 +1,7 @@
#pragma once
#include <stdexcept>
#include <vector>
#include <vulkan/vulkan.h>
#define GLFW_INCLUDE_VULKAN
@ -11,15 +12,23 @@ class YaveVulkanInstance {
private:
VkInstance instance;
void createInstance();
void destroyInstance();
// Validation support
bool checkLayersValidSuppport();
const std::vector<const char *> validationLayers = {
"VK_LAYER_KHRONOS_validation"};
#ifdef NDEBUG // Enable Validation in debug mode
const bool enableValidationLayers = false;
#else
const bool enableValidationLayers = true;
#endif
public:
// Delete Copy constructors
// This class should match one to one with vulkan instances
YaveVulkanInstance(const YaveVulkanInstance&) = delete;
YaveVulkanInstance(const YaveVulkanInstance &) = delete;
YaveVulkanInstance &operator=(const YaveVulkanInstance &) = delete;
YaveVulkanInstance();

13
toolchain.cmake Normal file
View file

@ -0,0 +1,13 @@
# CMake toolchain file
# linker flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--strip-debug")
# cflags
set(CMAKE_CXX_FLAGS_INIT "-ansi -Wall")
# cflags for debug build
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g3 -ggdb3")
# cflags for release build
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG -s")