# Converts a SPIR-V binary to a C++ header with an embedded uint8_t array. # cmake -DINPUT= -DOUTPUT= -DVAR_NAME= -P spv_to_header.cmake if(NOT DEFINED INPUT OR NOT DEFINED OUTPUT OR NOT DEFINED VAR_NAME) message(FATAL_ERROR "Usage: -DINPUT=x.spv -DOUTPUT=x.h -DVAR_NAME=kname -P spv_to_header.cmake") endif() file(READ "${INPUT}" raw_hex HEX) string(REGEX REPLACE "([0-9a-fA-F][0-9a-fA-F])" "0x\\1," hex_bytes "${raw_hex}") string(REGEX REPLACE ",$" "" hex_bytes "${hex_bytes}") string(LENGTH "${raw_hex}" hex_len) math(EXPR byte_count "${hex_len} / 2") file(WRITE "${OUTPUT}" "#pragma once #include #include static const uint8_t ${VAR_NAME}[] = { ${hex_bytes} }; static const size_t ${VAR_NAME}_size = ${byte_count}; ")