Mixed definitions cause problems for some tool sets.
TTL contains code code that looks like the follow
// static inline TTL_int_void_sub_tensor_t attribute((overloadable)) TTL_step_buffering(TTL_import_double_const_void_tensor_buffering_t *const db, const TTL_tile_t next_tile);
...snip
result.prev_tile = TTL_create_empty_tile();
TTL_step_buffering(&result, first_tile);
return result; }
...snip
static inline TTL_int_void_sub_tensor_t attribute((overloadable)) TTL_step_buffering(TTL_import_double_const_void_tensor_buffering_t *db, const TTL_tile_t next_tile) { const TTL_layout_t int_layout = TTL_create_layout(next_tile.shape.width, next_tile.shape.height); const TTL_int_void_sub_tensor_t import_to = TTL_create_int_sub_tensor( ...
Note the const is not present in the declaration but is in the pre-definition; technically, this is not incorrect and, in most cases, is compiled. However, some tools incorrectly generate different overload signatures, and so fail to link.
Could you update all the cases where this difference happens?
Whilst investigating this a kernel.h file was created for the c samples and so this is also landed as part of this patch.