Skip to content

Commit 1fde85a

Browse files
committed
GLSLANG_EXPORT for C APIs.
Fixes FFI breakage introduced in KhronosGroup#2283
1 parent b60e067 commit 1fde85a

File tree

3 files changed

+58
-42
lines changed

3 files changed

+58
-42
lines changed

SPIRV/CInterface/spirv_c_interface.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
7979
return EShLangCount;
8080
}
8181

82-
void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
82+
GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
8383
{
8484
spv::SpvBuildLogger logger;
8585
glslang::SpvOptions spvOptions;
@@ -92,19 +92,19 @@ void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t
9292
program->loggerMessages = logger.getAllMessages();
9393
}
9494

95-
size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
95+
GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
9696

97-
void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
97+
GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
9898
{
9999
memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int));
100100
}
101101

102-
unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
102+
GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
103103
{
104104
return program->spirv.data();
105105
}
106106

107-
const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
107+
GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
108108
{
109109
return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str();
110110
}

glslang/CInterface/glslang_c_interface.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,9 @@ class CallbackIncluder : public glslang::TShader::Includer {
160160
void* context;
161161
};
162162

163-
int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
163+
GLSLANG_EXPORT int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
164164

165-
void glslang_finalize_process() { glslang::FinalizeProcess(); }
165+
GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); }
166166

167167
static EShLanguage c_shader_stage(glslang_stage_t stage)
168168
{
@@ -320,7 +320,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
320320
return EProfile();
321321
}
322322

323-
glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
323+
GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
324324
{
325325
if (!input || !input->code) {
326326
printf("Error creating shader: null input(%p)/input->code\n", input);
@@ -344,12 +344,12 @@ glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
344344
return shader;
345345
}
346346

347-
const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
347+
GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
348348
{
349349
return shader->preprocessedGLSL.c_str();
350350
}
351351

352-
int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
352+
GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
353353
{
354354
DirStackFileIncluder Includer;
355355
/* TODO: use custom callbacks if they are available in 'i->callbacks' */
@@ -365,7 +365,7 @@ int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* i
365365
);
366366
}
367367

368-
int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
368+
GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
369369
{
370370
const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
371371
shader->shader->setStrings(&preprocessedCStr, 1);
@@ -378,11 +378,11 @@ int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
378378
);
379379
}
380380

381-
const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
381+
GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
382382

383-
const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
383+
GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
384384

385-
void glslang_shader_delete(glslang_shader_t* shader)
385+
GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader)
386386
{
387387
if (!shader)
388388
return;
@@ -391,14 +391,14 @@ void glslang_shader_delete(glslang_shader_t* shader)
391391
delete (shader);
392392
}
393393

394-
glslang_program_t* glslang_program_create()
394+
GLSLANG_EXPORT glslang_program_t* glslang_program_create()
395395
{
396396
glslang_program_t* p = new glslang_program_t();
397397
p->program = new glslang::TProgram();
398398
return p;
399399
}
400400

401-
void glslang_program_delete(glslang_program_t* program)
401+
GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program)
402402
{
403403
if (!program)
404404
return;
@@ -407,22 +407,22 @@ void glslang_program_delete(glslang_program_t* program)
407407
delete (program);
408408
}
409409

410-
void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
410+
GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
411411
{
412412
program->program->addShader(shader->shader);
413413
}
414414

415-
int glslang_program_link(glslang_program_t* program, int messages)
415+
GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages)
416416
{
417417
return (int)program->program->link((EShMessages)messages);
418418
}
419419

420-
const char* glslang_program_get_info_log(glslang_program_t* program)
420+
GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program)
421421
{
422422
return program->program->getInfoLog();
423423
}
424424

425-
const char* glslang_program_get_info_debug_log(glslang_program_t* program)
425+
GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program)
426426
{
427427
return program->program->getInfoDebugLog();
428428
}

glslang/Include/glslang_c_interface.h

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -203,28 +203,44 @@ typedef struct glsl_include_callbacks_s {
203203
extern "C" {
204204
#endif
205205

206-
int glslang_initialize_process();
207-
void glslang_finalize_process();
208-
209-
glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
210-
void glslang_shader_delete(glslang_shader_t* shader);
211-
int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
212-
int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
213-
const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
214-
const char* glslang_shader_get_info_log(glslang_shader_t* shader);
215-
const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
216-
217-
glslang_program_t* glslang_program_create();
218-
void glslang_program_delete(glslang_program_t* program);
219-
void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
220-
int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
221-
void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
222-
size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
223-
void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
224-
unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
225-
const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
226-
const char* glslang_program_get_info_log(glslang_program_t* program);
227-
const char* glslang_program_get_info_debug_log(glslang_program_t* program);
206+
#ifdef GLSLANG_IS_SHARED_LIBRARY
207+
#ifdef _WIN32
208+
#ifdef GLSLANG_EXPORTING
209+
#define GLSLANG_EXPORT __declspec(dllexport)
210+
#else
211+
#define GLSLANG_EXPORT __declspec(dllimport)
212+
#endif
213+
#elif __GNUC__ >= 4
214+
#define GLSLANG_EXPORT __attribute__((visibility("default")))
215+
#endif
216+
#endif // GLSLANG_IS_SHARED_LIBRARY
217+
218+
#ifndef GLSLANG_EXPORT
219+
#define GLSLANG_EXPORT
220+
#endif
221+
222+
GLSLANG_EXPORT int glslang_initialize_process();
223+
GLSLANG_EXPORT void glslang_finalize_process();
224+
225+
GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
226+
GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
227+
GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
228+
GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
229+
GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
230+
GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader);
231+
GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
232+
233+
GLSLANG_EXPORT glslang_program_t* glslang_program_create();
234+
GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program);
235+
GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
236+
GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
237+
GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
238+
GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
239+
GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
240+
GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
241+
GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
242+
GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program);
243+
GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program);
228244

229245
#ifdef __cplusplus
230246
}

0 commit comments

Comments
 (0)