GLSLANG_EXPORT for C APIs.
authorEz Diy <ezdiy@outlook.com>
Mon, 10 Aug 2020 20:26:41 +0000 (22:26 +0200)
committerEz Diy <ezdiy@outlook.com>
Mon, 10 Aug 2020 20:26:41 +0000 (22:26 +0200)
Fixes FFI breakage introduced in #2283

SPIRV/CInterface/spirv_c_interface.cpp
glslang/CInterface/glslang_c_interface.cpp
glslang/Include/glslang_c_interface.h

index c88b808..a0790f4 100644 (file)
@@ -79,7 +79,7 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
     return EShLangCount;
 }
 
-void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
+GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
 {
     spv::SpvBuildLogger logger;
     glslang::SpvOptions spvOptions;
@@ -92,19 +92,19 @@ void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t
     program->loggerMessages = logger.getAllMessages();
 }
 
-size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
+GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
 
-void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
+GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
 {
     memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int));
 }
 
-unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
+GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
 {
     return program->spirv.data();
 }
 
-const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
+GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
 {
     return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str();
 }
index 54283e6..2e04f53 100644 (file)
@@ -160,9 +160,9 @@ private:
     void* context;
 };
 
-int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
+GLSLANG_EXPORT int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
 
-void glslang_finalize_process() { glslang::FinalizeProcess(); }
+GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); }
 
 static EShLanguage c_shader_stage(glslang_stage_t stage)
 {
@@ -320,7 +320,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
     return EProfile();
 }
 
-glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
+GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
 {
     if (!input || !input->code) {
         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)
     return shader;
 }
 
-const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
+GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
 {
     return shader->preprocessedGLSL.c_str();
 }
 
-int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
+GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
 {
     DirStackFileIncluder Includer;
     /* 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
     );
 }
 
-int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
+GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
 {
     const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
     shader->shader->setStrings(&preprocessedCStr, 1);
@@ -378,11 +378,11 @@ int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
     );
 }
 
-const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
+GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
 
-const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
+GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
 
-void glslang_shader_delete(glslang_shader_t* shader)
+GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader)
 {
     if (!shader)
         return;
@@ -391,14 +391,14 @@ void glslang_shader_delete(glslang_shader_t* shader)
     delete (shader);
 }
 
-glslang_program_t* glslang_program_create()
+GLSLANG_EXPORT glslang_program_t* glslang_program_create()
 {
     glslang_program_t* p = new glslang_program_t();
     p->program = new glslang::TProgram();
     return p;
 }
 
-void glslang_program_delete(glslang_program_t* program)
+GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program)
 {
     if (!program)
         return;
@@ -407,22 +407,22 @@ void glslang_program_delete(glslang_program_t* program)
     delete (program);
 }
 
-void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
+GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
 {
     program->program->addShader(shader->shader);
 }
 
-int glslang_program_link(glslang_program_t* program, int messages)
+GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages)
 {
     return (int)program->program->link((EShMessages)messages);
 }
 
-const char* glslang_program_get_info_log(glslang_program_t* program)
+GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program)
 {
     return program->program->getInfoLog();
 }
 
-const char* glslang_program_get_info_debug_log(glslang_program_t* program)
+GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program)
 {
     return program->program->getInfoDebugLog();
 }
index 50e95b7..4b32e2b 100644 (file)
@@ -203,28 +203,44 @@ typedef struct glsl_include_callbacks_s {
 extern "C" {
 #endif
 
-int glslang_initialize_process();
-void glslang_finalize_process();
-
-glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
-void glslang_shader_delete(glslang_shader_t* shader);
-int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
-int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
-const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
-const char* glslang_shader_get_info_log(glslang_shader_t* shader);
-const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
-
-glslang_program_t* glslang_program_create();
-void glslang_program_delete(glslang_program_t* program);
-void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
-int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
-void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
-size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
-void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
-unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
-const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
-const char* glslang_program_get_info_log(glslang_program_t* program);
-const char* glslang_program_get_info_debug_log(glslang_program_t* program);
+#ifdef GLSLANG_IS_SHARED_LIBRARY
+    #ifdef _WIN32
+        #ifdef GLSLANG_EXPORTING
+            #define GLSLANG_EXPORT __declspec(dllexport)
+        #else
+            #define GLSLANG_EXPORT __declspec(dllimport)
+        #endif
+    #elif __GNUC__ >= 4
+        #define GLSLANG_EXPORT __attribute__((visibility("default")))
+    #endif
+#endif // GLSLANG_IS_SHARED_LIBRARY
+
+#ifndef GLSLANG_EXPORT
+#define GLSLANG_EXPORT
+#endif
+
+GLSLANG_EXPORT int glslang_initialize_process();
+GLSLANG_EXPORT void glslang_finalize_process();
+
+GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
+GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
+GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
+GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
+GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
+GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader);
+GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
+
+GLSLANG_EXPORT glslang_program_t* glslang_program_create();
+GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program);
+GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
+GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
+GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
+GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
+GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
+GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
+GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
+GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program);
+GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program);
 
 #ifdef __cplusplus
 }