Correctly configure NXT_ENABLE_ASSERTS on multiconfiguration generators (#88)

And also set a default build type for single-configuration generators
This commit is contained in:
Kai Ninomiya 2017-07-20 07:28:00 -07:00 committed by GitHub
parent 35bf424035
commit 59dc03f101
4 changed files with 15 additions and 7 deletions

View File

@ -15,6 +15,11 @@
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
project(nxt C CXX) project(nxt C CXX)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
"Build type (Debug, Release, RelWithDebInfo, MinSizeRel)" FORCE)
endif()
################################################################################ ################################################################################
# Configuration options # Configuration options
################################################################################ ################################################################################
@ -35,6 +40,7 @@ option(NXT_ENABLE_METAL "Enable compilation of the Metal backend" ${ENABLE_METAL
option(NXT_ENABLE_NULL "Enable compilation of the Null backend" ON) option(NXT_ENABLE_NULL "Enable compilation of the Null backend" ON)
option(NXT_ENABLE_OPENGL "Enable compilation of the OpenGL backend" ON) option(NXT_ENABLE_OPENGL "Enable compilation of the OpenGL backend" ON)
option(NXT_ENABLE_VULKAN "Enable compilation of the Vulkan backend" OFF) option(NXT_ENABLE_VULKAN "Enable compilation of the Vulkan backend" OFF)
option(NXT_ALWAYS_ASSERT "Enable assertions on all build types" OFF)
################################################################################ ################################################################################
# Precompute compile flags and defines, functions to set them # Precompute compile flags and defines, functions to set them
@ -46,9 +52,9 @@ set(NXT_INTERNAL_FLAGS "")
set(NXT_INTERNAL_DEFS "") set(NXT_INTERNAL_DEFS "")
set(NXT_GENERATED_FLAGS "") set(NXT_GENERATED_FLAGS "")
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(NXT_ENABLE_ASSERTS $<OR:$<CONFIG:Debug>,$<BOOL:${NXT_ALWAYS_ASSERT}>>)
list(APPEND NXT_DEFS "NXT_ENABLE_ASSERTS")
endif() list(APPEND NXT_DEFS $<${NXT_ENABLE_ASSERTS}:NXT_ENABLE_ASSERTS>)
if (NXT_ENABLE_D3D12) if (NXT_ENABLE_D3D12)
list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_D3D12") list(APPEND NXT_INTERNAL_DEFS "NXT_ENABLE_BACKEND_D3D12")

View File

@ -24,7 +24,7 @@ function(add_nxt_sample target sources)
target_link_libraries(${target} sample_utils) target_link_libraries(${target} sample_utils)
target_include_directories(${target} SYSTEM PRIVATE ${GLM_INCLUDE_DIR}) target_include_directories(${target} SYSTEM PRIVATE ${GLM_INCLUDE_DIR})
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
NXTInternaltarget("examples" ${target}) NXTInternalTarget("examples" ${target})
# Suppress some warnings in our sample dependencies # Suppress some warnings in our sample dependencies
if (MSVC) if (MSVC)

View File

@ -68,7 +68,7 @@ void HandleAssertionFailure(const char* file, const char* function, int line, co
#define NXT_ASSERT(condition) NXT_ASSERT_CALLSITE_HELPER(__FILE__, __func__, __LINE__, condition) #define NXT_ASSERT(condition) NXT_ASSERT_CALLSITE_HELPER(__FILE__, __func__, __LINE__, condition)
#define NXT_UNREACHABLE() \ #define NXT_UNREACHABLE() \
do { \ do { \
NXT_ASSERT(false && "Unreachable code hit"); NXT_BUILTIN_UNREACHABLE(); \ NXT_ASSERT(NXT_ASSERT_LOOP_CONDITION && "Unreachable code hit"); NXT_BUILTIN_UNREACHABLE(); \
} while(NXT_ASSERT_LOOP_CONDITION) } while(NXT_ASSERT_LOOP_CONDITION)
#if !defined(NXT_SKIP_ASSERT_SHORTHANDS) #if !defined(NXT_SKIP_ASSERT_SHORTHANDS)

View File

@ -62,7 +62,9 @@ void* AlignVoidPtr(void* ptr, size_t alignment) {
} }
uint32_t Align(uint32_t value, size_t alignment) { uint32_t Align(uint32_t value, size_t alignment) {
ASSERT(alignment <= UINT32_MAX);
ASSERT(IsPowerOfTwo(alignment)); ASSERT(IsPowerOfTwo(alignment));
ASSERT(alignment != 0); ASSERT(alignment != 0);
return (value + (alignment - 1)) & ~(alignment - 1); uint32_t alignment32 = static_cast<uint32_t>(alignment);
return (value + (alignment32 - 1)) & ~(alignment32 - 1);
} }