Fix ANGLE on gcc shared non-libxul builds, r=irc, and I know it's a CLOSED TREE
authorVladimir Vukicevic <vladimir@pobox.com>
Thu, 15 Jul 2010 14:38:22 -0700
changeset 47778 87e4561c270b04847dd651578eedb0ecfcd9c6f6
parent 47777 e1d7fd5255fdb9fe6fc6371c06f27b072ab23c15
child 47779 2bfc4dd5487226fa9f5110532636748ff0ca0991
push idunknown
push userunknown
push dateunknown
reviewersirc, and
milestone2.0b2pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Fix ANGLE on gcc shared non-libxul builds, r=irc, and I know it's a CLOSED TREE
gfx/angle/angle-shared.patch
gfx/angle/include/GLSLANG/ShaderLang.h
--- a/gfx/angle/angle-shared.patch
+++ b/gfx/angle/angle-shared.patch
@@ -1,142 +1,179 @@
 # HG changeset patch
-# Parent 42029b6d627ee8c0d5face9cafa2bf7fe8950305
 
 diff --git a/gfx/angle/include/GLSLANG/ShaderLang.h b/gfx/angle/include/GLSLANG/ShaderLang.h
 --- a/gfx/angle/include/GLSLANG/ShaderLang.h
 +++ b/gfx/angle/include/GLSLANG/ShaderLang.h
-@@ -9,10 +9,25 @@
+@@ -1,42 +1,54 @@
+ //
+ // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+ //
+ #ifndef _COMPILER_INTERFACE_INCLUDED_
+ #define _COMPILER_INTERFACE_INCLUDED_
+ 
++#include "nscore.h"
++
  #include "ResourceLimits.h"
  
  #ifdef _WIN32
-+
- #define C_DECL __cdecl
-+
-+#ifndef MOZ_ENABLE_LIBXUL
-+#ifdef ANGLE_BUILD
-+#define ANGLE_EXPORT  __declspec(dllexport)
+-#define C_DECL __cdecl
++# ifndef MOZ_ENABLE_LIBXUL
++#  ifdef ANGLE_BUILD
++#   define ANGLE_API NS_EXPORT
++#  else
++#   define ANGLE_API NS_IMPORT
++#  endif
++# else
++#  define ANGLE_API  /*nothing*/
++# endif
++# define C_DECL __cdecl
  #else
-+#define ANGLE_EXPORT  __declspec(dllimport)
-+#endif
-+#else
-+#define ANGLE_EXPORT
-+#endif
-+
-+#else
-+
-+#define ANGLE_EXPORT
- #define __fastcall
- #define C_DECL
-+
+-#define __fastcall
+-#define C_DECL
++# define ANGLE_API NS_EXTERNAL_VIS
++# define __fastcall
++# define C_DECL
  #endif
  
  //
-@@ -27,11 +42,11 @@
+ // This is the platform independent interface between an OGL driver
+ // and the shading language compiler/linker.
+ //
+ 
+ #ifdef __cplusplus
+ 	extern "C" {
+ #endif
+ //
  // Driver must call this first, once, before doing any other
  // compiler/linker operations.
  //
 -int ShInitialize();
-+ANGLE_EXPORT int ShInitialize();
++ANGLE_API int ShInitialize();
  //
  // Driver should call this at shutdown.
  //
 -int __fastcall ShFinalize();
-+ANGLE_EXPORT int ShFinalize();
++ANGLE_API int ShFinalize();
  //
  // Types of languages the compiler can consume.
  //
-@@ -88,10 +103,10 @@ typedef void* ShHandle;
+ typedef enum {
+ 	EShLangVertex,
+ 	EShLangFragment,
+ 	EShLangCount
+ } EShLanguage;
+@@ -83,88 +95,88 @@ typedef struct {
+ // If handle creation fails, 0 will be returned.
+ //
+ typedef void* ShHandle;
+ 
+ //
  // Driver calls these to create and destroy compiler/linker
  // objects.
  //
 -ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
 -ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
 -ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
 -void ShDestruct(ShHandle);
-+ANGLE_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
-+ANGLE_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
-+ANGLE_EXPORT ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
-+ANGLE_EXPORT void ShDestruct(ShHandle);
++ANGLE_API ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
++ANGLE_API ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
++ANGLE_API ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
++ANGLE_API void ShDestruct(ShHandle);
  
  //
  // The return value of ShCompile is boolean, indicating
-@@ -100,7 +115,7 @@ void ShDestruct(ShHandle);
+ // success or failure.
+ //
  // The info-log should be written by ShCompile into 
  // ShHandle, so it can answer future queries.
  //
 -int ShCompile(
-+ANGLE_EXPORT int ShCompile(
++ANGLE_API int ShCompile(
  	const ShHandle,
  	const char* const shaderStrings[],
  	const int numStrings,
-@@ -114,14 +129,14 @@ int ShCompile(
+ 	const EShOptimizationLevel,
+ 	const TBuiltInResource *resources,
+ 	int debugOptions
+ 	);
+ 
+ 
+ //
  // Similar to ShCompile, but accepts an opaque handle to an
  // intermediate language structure.
  //
 -int ShCompileIntermediate(
-+ANGLE_EXPORT int ShCompileIntermediate(
++ANGLE_API int ShCompileIntermediate(
  	ShHandle compiler,
  	ShHandle intermediate,
  	const EShOptimizationLevel,
  	int debuggable           // boolean
  	);
  
 -int ShLink(
-+ANGLE_EXPORT int ShLink(
++ANGLE_API int ShLink(
  	const ShHandle,               // linker object
  	const ShHandle h[],           // compiler objects to link together
  	const int numHandles,
-@@ -129,7 +144,7 @@ int ShLink(
+ 	ShHandle uniformMap,          // updated with new uniforms
  	short int** uniformsAccessed,  // returned with indexes of uniforms accessed
  	int* numUniformsAccessed); 	
  
 -int ShLinkExt(
-+ANGLE_EXPORT int ShLinkExt(
++ANGLE_API int ShLinkExt(
  	const ShHandle,               // linker object
  	const ShHandle h[],           // compiler objects to link together
  	const int numHandles);
-@@ -138,28 +153,28 @@ int ShLinkExt(
+ 
+ //
  // ShSetEncrpytionMethod is a place-holder for specifying
  // how source code is encrypted.
  //
 -void ShSetEncryptionMethod(ShHandle);
-+ANGLE_EXPORT void ShSetEncryptionMethod(ShHandle);
++ANGLE_API void ShSetEncryptionMethod(ShHandle);
  
  //
  // All the following return 0 if the information is not
  // available in the object passed down, or the object is bad.
  //
 -const char* ShGetInfoLog(const ShHandle);
 -const char* ShGetObjectCode(const ShHandle);
 -const void* ShGetExecutable(const ShHandle);
 -int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
 -int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
 -int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); // for all attributes
-+ANGLE_EXPORT const char* ShGetInfoLog(const ShHandle);
-+ANGLE_EXPORT const char* ShGetObjectCode(const ShHandle);
-+ANGLE_EXPORT const void* ShGetExecutable(const ShHandle);
-+ANGLE_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
-+ANGLE_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
-+ANGLE_EXPORT int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); // for all attributes
++ANGLE_API const char* ShGetInfoLog(const ShHandle);
++ANGLE_API const char* ShGetObjectCode(const ShHandle);
++ANGLE_API const void* ShGetExecutable(const ShHandle);
++ANGLE_API int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
++ANGLE_API int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
++ANGLE_API int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); // for all attributes
  //
  // Tell the linker to never assign a vertex attribute to this list of physical attributes
  //
 -int ShExcludeAttributes(const ShHandle, int *attributes, int count);
-+ANGLE_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count);
++ANGLE_API int ShExcludeAttributes(const ShHandle, int *attributes, int count);
  
  //
  // Returns the location ID of the named uniform.
  // Returns -1 if error.
  //
 -int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
-+ANGLE_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
++ANGLE_API int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
  
  enum TDebugOptions {
  	EDebugOpNone               = 0x000,
+ 	EDebugOpIntermediate       = 0x001,
+ 	EDebugOpAssembly           = 0x002,
+ 	EDebugOpObjectCode         = 0x004,
+ 	EDebugOpLinkMaps           = 0x008
+ };
 diff --git a/gfx/angle/src/compiler/ShaderLang.cpp b/gfx/angle/src/compiler/ShaderLang.cpp
 --- a/gfx/angle/src/compiler/ShaderLang.cpp
 +++ b/gfx/angle/src/compiler/ShaderLang.cpp
 @@ -130,7 +130,7 @@ void ShDestruct(ShHandle handle)
  //
  // Cleanup symbol tables
  //
 -int __fastcall ShFinalize()
--- a/gfx/angle/include/GLSLANG/ShaderLang.h
+++ b/gfx/angle/include/GLSLANG/ShaderLang.h
@@ -1,57 +1,54 @@
 //
 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
 #ifndef _COMPILER_INTERFACE_INCLUDED_
 #define _COMPILER_INTERFACE_INCLUDED_
 
+#include "nscore.h"
+
 #include "ResourceLimits.h"
 
 #ifdef _WIN32
-
-#define C_DECL __cdecl
-
-#ifndef MOZ_ENABLE_LIBXUL
-#ifdef ANGLE_BUILD
-#define ANGLE_EXPORT  __declspec(dllexport)
-#else
-#define ANGLE_EXPORT  __declspec(dllimport)
-#endif
+# ifndef MOZ_ENABLE_LIBXUL
+#  ifdef ANGLE_BUILD
+#   define ANGLE_API NS_EXPORT
+#  else
+#   define ANGLE_API NS_IMPORT
+#  endif
+# else
+#  define ANGLE_API  /*nothing*/
+# endif
+# define C_DECL __cdecl
 #else
-#define ANGLE_EXPORT
-#endif
-
-#else
-
-#define ANGLE_EXPORT
-#define __fastcall
-#define C_DECL
-
+# define ANGLE_API NS_EXTERNAL_VIS
+# define __fastcall
+# define C_DECL
 #endif
 
 //
 // This is the platform independent interface between an OGL driver
 // and the shading language compiler/linker.
 //
 
 #ifdef __cplusplus
 	extern "C" {
 #endif
 //
 // Driver must call this first, once, before doing any other
 // compiler/linker operations.
 //
-ANGLE_EXPORT int ShInitialize();
+ANGLE_API int ShInitialize();
 //
 // Driver should call this at shutdown.
 //
-ANGLE_EXPORT int ShFinalize();
+ANGLE_API int ShFinalize();
 //
 // Types of languages the compiler can consume.
 //
 typedef enum {
 	EShLangVertex,
 	EShLangFragment,
 	EShLangCount
 } EShLanguage;
@@ -98,88 +95,88 @@ typedef struct {
 // If handle creation fails, 0 will be returned.
 //
 typedef void* ShHandle;
 
 //
 // Driver calls these to create and destroy compiler/linker
 // objects.
 //
-ANGLE_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
-ANGLE_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
-ANGLE_EXPORT ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
-ANGLE_EXPORT void ShDestruct(ShHandle);
+ANGLE_API ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
+ANGLE_API ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
+ANGLE_API ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
+ANGLE_API void ShDestruct(ShHandle);
 
 //
 // The return value of ShCompile is boolean, indicating
 // success or failure.
 //
 // The info-log should be written by ShCompile into 
 // ShHandle, so it can answer future queries.
 //
-ANGLE_EXPORT int ShCompile(
+ANGLE_API int ShCompile(
 	const ShHandle,
 	const char* const shaderStrings[],
 	const int numStrings,
 	const EShOptimizationLevel,
 	const TBuiltInResource *resources,
 	int debugOptions
 	);
 
 
 //
 // Similar to ShCompile, but accepts an opaque handle to an
 // intermediate language structure.
 //
-ANGLE_EXPORT int ShCompileIntermediate(
+ANGLE_API int ShCompileIntermediate(
 	ShHandle compiler,
 	ShHandle intermediate,
 	const EShOptimizationLevel,
 	int debuggable           // boolean
 	);
 
-ANGLE_EXPORT int ShLink(
+ANGLE_API int ShLink(
 	const ShHandle,               // linker object
 	const ShHandle h[],           // compiler objects to link together
 	const int numHandles,
 	ShHandle uniformMap,          // updated with new uniforms
 	short int** uniformsAccessed,  // returned with indexes of uniforms accessed
 	int* numUniformsAccessed); 	
 
-ANGLE_EXPORT int ShLinkExt(
+ANGLE_API int ShLinkExt(
 	const ShHandle,               // linker object
 	const ShHandle h[],           // compiler objects to link together
 	const int numHandles);
 
 //
 // ShSetEncrpytionMethod is a place-holder for specifying
 // how source code is encrypted.
 //
-ANGLE_EXPORT void ShSetEncryptionMethod(ShHandle);
+ANGLE_API void ShSetEncryptionMethod(ShHandle);
 
 //
 // All the following return 0 if the information is not
 // available in the object passed down, or the object is bad.
 //
-ANGLE_EXPORT const char* ShGetInfoLog(const ShHandle);
-ANGLE_EXPORT const char* ShGetObjectCode(const ShHandle);
-ANGLE_EXPORT const void* ShGetExecutable(const ShHandle);
-ANGLE_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
-ANGLE_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
-ANGLE_EXPORT int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); // for all attributes
+ANGLE_API const char* ShGetInfoLog(const ShHandle);
+ANGLE_API const char* ShGetObjectCode(const ShHandle);
+ANGLE_API const void* ShGetExecutable(const ShHandle);
+ANGLE_API int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
+ANGLE_API int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
+ANGLE_API int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); // for all attributes
 //
 // Tell the linker to never assign a vertex attribute to this list of physical attributes
 //
-ANGLE_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count);
+ANGLE_API int ShExcludeAttributes(const ShHandle, int *attributes, int count);
 
 //
 // Returns the location ID of the named uniform.
 // Returns -1 if error.
 //
-ANGLE_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
+ANGLE_API int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
 
 enum TDebugOptions {
 	EDebugOpNone               = 0x000,
 	EDebugOpIntermediate       = 0x001,
 	EDebugOpAssembly           = 0x002,
 	EDebugOpObjectCode         = 0x004,
 	EDebugOpLinkMaps           = 0x008
 };