1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2024 Collabora, Ltd. 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker * 5*61046927SAndroid Build Coastguard Worker * This file exposes a nice interface that can be consumed from Rust. We would 6*61046927SAndroid Build Coastguard Worker * have to have Rust libc bindings otherwise. 7*61046927SAndroid Build Coastguard Worker */ 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker #include <assert.h> 10*61046927SAndroid Build Coastguard Worker #include <stdio.h> 11*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker #include "nak_private.h" 14*61046927SAndroid Build Coastguard Worker #include "nir.h" 15*61046927SAndroid Build Coastguard Worker nak_open_memstream(struct nak_memstream * memstream)16*61046927SAndroid Build Coastguard Workervoid nak_open_memstream(struct nak_memstream *memstream) 17*61046927SAndroid Build Coastguard Worker { 18*61046927SAndroid Build Coastguard Worker memstream->stream = open_memstream(&memstream->buffer, &memstream->written); 19*61046927SAndroid Build Coastguard Worker fflush(memstream->stream); 20*61046927SAndroid Build Coastguard Worker assert(memstream->stream); 21*61046927SAndroid Build Coastguard Worker assert(memstream->buffer); 22*61046927SAndroid Build Coastguard Worker } 23*61046927SAndroid Build Coastguard Worker nak_close_memstream(struct nak_memstream * memstream)24*61046927SAndroid Build Coastguard Workervoid nak_close_memstream(struct nak_memstream *memstream) 25*61046927SAndroid Build Coastguard Worker { 26*61046927SAndroid Build Coastguard Worker fclose(memstream->stream); 27*61046927SAndroid Build Coastguard Worker free(memstream->buffer); 28*61046927SAndroid Build Coastguard Worker } 29*61046927SAndroid Build Coastguard Worker nak_nir_asprint_instr(struct nak_memstream * memstream,const nir_instr * instr)30*61046927SAndroid Build Coastguard Workervoid nak_nir_asprint_instr(struct nak_memstream *memstream, const nir_instr *instr) 31*61046927SAndroid Build Coastguard Worker { 32*61046927SAndroid Build Coastguard Worker nir_print_instr(instr, memstream->stream); 33*61046927SAndroid Build Coastguard Worker fflush(memstream->stream); 34*61046927SAndroid Build Coastguard Worker } 35*61046927SAndroid Build Coastguard Worker nak_clear_memstream(struct nak_memstream * memstream)36*61046927SAndroid Build Coastguard Workervoid nak_clear_memstream(struct nak_memstream *memstream) 37*61046927SAndroid Build Coastguard Worker { 38*61046927SAndroid Build Coastguard Worker rewind(memstream->stream); 39*61046927SAndroid Build Coastguard Worker }