From 19360f2603cdaaa3370fb4b81f1c3a95716f1faa Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Thu, 15 Jul 2010 12:49:09 -0700 Subject: [PATCH] b=578938; ANGLE compilation broken for non-libxul shared builds; r=khuey --- gfx/angle/Makefile.in | 6 +- gfx/angle/README.mozilla | 2 + gfx/angle/angle-shared.patch | 146 +++++++++++++++++++++++++ gfx/angle/include/GLSLANG/ShaderLang.h | 53 +++++---- gfx/angle/src/compiler/ShaderLang.cpp | 2 +- layout/build/Makefile.in | 6 + toolkit/toolkit-makefiles.sh | 1 + 7 files changed, 195 insertions(+), 21 deletions(-) create mode 100644 gfx/angle/angle-shared.patch diff --git a/gfx/angle/Makefile.in b/gfx/angle/Makefile.in index 8d70257fbfd9..bf9d0f81d511 100644 --- a/gfx/angle/Makefile.in +++ b/gfx/angle/Makefile.in @@ -114,7 +114,11 @@ CSRCS = \ 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 diff --git a/gfx/angle/README.mozilla b/gfx/angle/README.mozilla index f75e2e42ca4c..85d474f9c6f5 100644 --- a/gfx/angle/README.mozilla +++ b/gfx/angle/README.mozilla @@ -5,6 +5,8 @@ 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 diff --git a/gfx/angle/angle-shared.patch b/gfx/angle/angle-shared.patch new file mode 100644 index 000000000000..5b2cf7d01674 --- /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(); diff --git a/gfx/angle/include/GLSLANG/ShaderLang.h b/gfx/angle/include/GLSLANG/ShaderLang.h index b0e58fc31b50..0827d3e1176d 100644 --- 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 index 913a511de4b9..6baae9113bdb 100644 --- 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(); diff --git a/layout/build/Makefile.in b/layout/build/Makefile.in index 87f7bbaa3f81..b3675c824576 100644 --- a/layout/build/Makefile.in +++ b/layout/build/Makefile.in @@ -60,7 +60,13 @@ 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 diff --git a/toolkit/toolkit-makefiles.sh b/toolkit/toolkit-makefiles.sh index bb1dc22b4e18..c5d43f53e790 100644 --- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -128,6 +128,7 @@ MAKEFILES_gfx=" gfx/tests/Makefile gfx/thebes/Makefile gfx/qcms/Makefile + gfx/angle/Makefile " MAKEFILES_htmlparser="