b=578938; ANGLE compilation broken for non-libxul shared builds; r=khuey
authorVladimir Vukicevic <vladimir@pobox.com>
Thu, 15 Jul 2010 12:49:09 -0700
changeset 47713 fa2c2d6d3d8f20ae87ae69fd061b199729efa596
parent 47712 b5e3a1cc45f0594cfe92c9e8237191b4edfa358f
child 47714 8a745dc12044a921b4910ba322a28dda9b731b0e
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewerskhuey
bugs578938
milestone2.0b2pre
b=578938; ANGLE compilation broken for non-libxul shared builds; r=khuey
gfx/angle/Makefile.in
gfx/angle/README.mozilla
gfx/angle/angle-shared.patch
gfx/angle/include/GLSLANG/ShaderLang.h
gfx/angle/src/compiler/ShaderLang.cpp
layout/build/Makefile.in
toolkit/toolkit-makefiles.sh
--- a/gfx/angle/Makefile.in
+++ b/gfx/angle/Makefile.in
@@ -109,17 +109,21 @@ CSRCS   = \
         cpp.c \
         cppstruct.c \
         memory.c \
         scanner.c \
         symbols.c \
         tokens.c \
 	$(NULL)
 
-DEFINES += -DANGLE_USE_NSPR
+DEFINES += -DANGLE_USE_NSPR -DANGLE_BUILD
+
+ifndef MOZ_ENABLE_LIBXUL
+EXTRA_DSO_LDOPTS = $(MOZ_COMPONENT_LIBS)
+endif
 
 include $(topsrcdir)/config/rules.mk
 
 # We have to filter out -pedantic, because of
 # comma-at-end-of-enumerator list failures.  We can try to get this fixed
 # upstream at some point.
 CXXFLAGS := $(filter-out -pedantic,$(CXXFLAGS))
 CFLAGS := $(filter-out -pedantic,$(CFLAGS))
--- a/gfx/angle/README.mozilla
+++ b/gfx/angle/README.mozilla
@@ -1,12 +1,14 @@
 This is the ANGLE project, from http://code.google.com/p/angleproject/.
 
 Current revision: r342
 
 Local patches:
     angle-nspr.patch - use NSPR for TLS
 
+    angle-shared.patch - add declspec dllexport/dllimport support on win32
+
 To regenerate the flex/yacc generated files:
 
 flex --noline --nounistd --outfile=generated/glslang.cpp src/compiler/glslang.l
 bison --no-lines --defines=generated/glslang_tab.h --skeleton=yacc.c --output=generated/glslang_tab.cpp src/compiler/glslang.y
 
new file mode 100644
--- /dev/null
+++ b/gfx/angle/angle-shared.patch
@@ -0,0 +1,146 @@
+# 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 @@
+ #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
++#else
++#define ANGLE_EXPORT
++#endif
++
++#else
++
++#define ANGLE_EXPORT
+ #define __fastcall
+ #define C_DECL
++
+ #endif
+ 
+ //
+@@ -27,11 +42,11 @@
+ // Driver must call this first, once, before doing any other
+ // compiler/linker operations.
+ //
+-int ShInitialize();
++ANGLE_EXPORT int ShInitialize();
+ //
+ // Driver should call this at shutdown.
+ //
+-int __fastcall ShFinalize();
++ANGLE_EXPORT int ShFinalize();
+ //
+ // Types of languages the compiler can consume.
+ //
+@@ -88,10 +103,10 @@ 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);
+ 
+ //
+ // The return value of ShCompile is boolean, indicating
+@@ -100,7 +115,7 @@ void ShDestruct(ShHandle);
+ // The info-log should be written by ShCompile into 
+ // ShHandle, so it can answer future queries.
+ //
+-int ShCompile(
++ANGLE_EXPORT int ShCompile(
+ 	const ShHandle,
+ 	const char* const shaderStrings[],
+ 	const int numStrings,
+@@ -114,14 +129,14 @@ int ShCompile(
+ // Similar to ShCompile, but accepts an opaque handle to an
+ // intermediate language structure.
+ //
+-int ShCompileIntermediate(
++ANGLE_EXPORT int ShCompileIntermediate(
+ 	ShHandle compiler,
+ 	ShHandle intermediate,
+ 	const EShOptimizationLevel,
+ 	int debuggable           // boolean
+ 	);
+ 
+-int ShLink(
++ANGLE_EXPORT int ShLink(
+ 	const ShHandle,               // linker object
+ 	const ShHandle h[],           // compiler objects to link together
+ 	const int numHandles,
+@@ -129,7 +144,7 @@ int ShLink(
+ 	short int** uniformsAccessed,  // returned with indexes of uniforms accessed
+ 	int* numUniformsAccessed); 	
+ 
+-int ShLinkExt(
++ANGLE_EXPORT 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);
+ 
+ //
+ // 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
+ //
+ // 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);
+ 
+ //
+ // 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);
+ 
+ enum TDebugOptions {
+ 	EDebugOpNone               = 0x000,
+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()
++int ShFinalize()
+ {  
+   if (PerProcessGPA) {
+     PerProcessGPA->popAll();
--- a/gfx/angle/include/GLSLANG/ShaderLang.h
+++ b/gfx/angle/include/GLSLANG/ShaderLang.h
@@ -4,39 +4,54 @@
 // found in the LICENSE file.
 //
 #ifndef _COMPILER_INTERFACE_INCLUDED_
 #define _COMPILER_INTERFACE_INCLUDED_
 
 #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
+#else
+#define ANGLE_EXPORT
+#endif
+
+#else
+
+#define ANGLE_EXPORT
 #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.
 //
-int ShInitialize();
+ANGLE_EXPORT int ShInitialize();
 //
 // Driver should call this at shutdown.
 //
-int __fastcall ShFinalize();
+ANGLE_EXPORT int ShFinalize();
 //
 // Types of languages the compiler can consume.
 //
 typedef enum {
 	EShLangVertex,
 	EShLangFragment,
 	EShLangCount
 } EShLanguage;
@@ -83,88 +98,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);
 
 //
 // 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.
 //
-int ShCompile(
+ANGLE_EXPORT 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.
 //
-int ShCompileIntermediate(
+ANGLE_EXPORT int ShCompileIntermediate(
 	ShHandle compiler,
 	ShHandle intermediate,
 	const EShOptimizationLevel,
 	int debuggable           // boolean
 	);
 
-int ShLink(
+ANGLE_EXPORT 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); 	
 
-int ShLinkExt(
+ANGLE_EXPORT 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.
 //
-void ShSetEncryptionMethod(ShHandle);
+ANGLE_EXPORT 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
 //
 // 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);
 
 //
 // 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);
 
 enum TDebugOptions {
 	EDebugOpNone               = 0x000,
 	EDebugOpIntermediate       = 0x001,
 	EDebugOpAssembly           = 0x002,
 	EDebugOpObjectCode         = 0x004,
 	EDebugOpLinkMaps           = 0x008
 };
--- a/gfx/angle/src/compiler/ShaderLang.cpp
+++ b/gfx/angle/src/compiler/ShaderLang.cpp
@@ -125,17 +125,17 @@ void ShDestruct(ShHandle handle)
         DeleteLinker(base->getAsLinker());
     else if (base->getAsUniformMap())
         DeleteUniformMap(base->getAsUniformMap());
 }
 
 //
 // Cleanup symbol tables
 //
-int __fastcall ShFinalize()
+int ShFinalize()
 {  
   if (PerProcessGPA) {
     PerProcessGPA->popAll();
     delete PerProcessGPA;
     PerProcessGPA = 0;
   }
   for (int i = 0; i < EShLangCount; ++i) {
     delete SymbolTables[i];
--- a/layout/build/Makefile.in
+++ b/layout/build/Makefile.in
@@ -55,17 +55,23 @@ LIBRARY_NAME	= gklayout
 EXPORT_LIBRARY = 1
 IS_COMPONENT	= 1
 MODULE_NAME	= nsLayoutModule
 GRE_MODULE	= 1
 LIBXUL_LIBRARY	= 1
 
 ifndef MOZ_ENABLE_LIBXUL
 EXTRA_DSO_LIBS	= gkgfx
+
+ifneq ($(OS_ARCH)_$(OS_TEST),Linux_x86_64)
+EXTRA_DSO_LIBS += angle
 endif
+
+endif
+
 EXTRA_DSO_LIBS	+= thebes ycbcr
 
 
 CPPSRCS		= \
 		nsLayoutModule.cpp \
 		nsContentDLF.cpp \
 		nsLayoutStatics.cpp \
 		$(NULL)
--- a/toolkit/toolkit-makefiles.sh
+++ b/toolkit/toolkit-makefiles.sh
@@ -123,16 +123,17 @@ MAKEFILES_gfx="
   gfx/Makefile
   gfx/ycbcr/Makefile
   gfx/layers/Makefile
   gfx/src/Makefile
   gfx/src/thebes/Makefile
   gfx/tests/Makefile
   gfx/thebes/Makefile
   gfx/qcms/Makefile
+  gfx/angle/Makefile
 "
 
 MAKEFILES_htmlparser="
   parser/htmlparser/Makefile
   parser/htmlparser/public/Makefile
   parser/htmlparser/src/Makefile
   parser/htmlparser/tests/Makefile
   parser/htmlparser/tests/grabpage/Makefile