diff options
-rw-r--r-- | CMakeLists.txt | 31 | ||||
-rw-r--r-- | spirv_reflect.c | 4 | ||||
-rw-r--r-- | spirv_reflect.cpp | 4 |
3 files changed, 39 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b6b69dc..ecc0668 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,9 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
if (SPIRV_REFLECT_EXECUTABLE)
+ # ==========================================================================
+ # Compile spirv_reflect.c as C
+ # ==========================================================================
add_executable(spirv-reflect ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.c
@@ -39,6 +42,34 @@ if (SPIRV_REFLECT_EXECUTABLE) endif()
install(TARGETS spirv-reflect RUNTIME DESTINATION bin)
+
+ # ==========================================================================
+ # Compile spirv_reflect.c as C++
+ # ==========================================================================
+ add_executable(spirv-reflect-pp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/arg_parser.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/arg_parser.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/common.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/common.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/common/output_stream.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/common/output_stream.cpp)
+ target_compile_options(spirv-reflect-pp PRIVATE
+ $<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
+ $<$<CXX_COMPILER_ID:GNU>:-Wall -Werror>
+ $<$<CXX_COMPILER_ID:Clang>:-Wall -Werror>
+ $<$<CXX_COMPILER_ID:AppleClang>:-Wall -Werror>)
+ if (SPIRV_REFLECT_ENABLE_ASSERTS)
+ target_compile_definitions(spirv-reflect-pp PRIVATE SPIRV_REFLECT_ENABLE_ASSERTS)
+ endif()
+ set_target_properties(spirv-reflect-pp PROPERTIES CXX_STANDARD 11)
+ target_include_directories(spirv-reflect-pp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+ if(WIN32)
+ target_compile_definitions(spirv-reflect-pp PRIVATE _CRT_SECURE_NO_WARNINGS)
+ endif()
+
+ install(TARGETS spirv-reflect-pp RUNTIME DESTINATION bin)
endif()
if (SPIRV_REFLECT_EXAMPLES)
diff --git a/spirv_reflect.c b/spirv_reflect.c index e9b11bf..4bc42fd 100644 --- a/spirv_reflect.c +++ b/spirv_reflect.c @@ -3557,7 +3557,11 @@ static SpvReflectResult CreateShaderModule( if (flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) { // Set internal size and pointer to args passed in p_module->_internal->spirv_size = size; +#if defined(__cplusplus) + p_module->_internal->spirv_code = const_cast<uint32_t*>(static_cast<const uint32_t*>(p_code)); // cast that const away +#else p_module->_internal->spirv_code = (void*)p_code; // cast that const away +#endif p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE); } else { diff --git a/spirv_reflect.cpp b/spirv_reflect.cpp new file mode 100644 index 0000000..9f991d6 --- /dev/null +++ b/spirv_reflect.cpp @@ -0,0 +1,4 @@ +// +// This file exists to force compiling spirv_reflect.c as C++. +// +#include "spirv_reflect.c"
\ No newline at end of file |