Fixed link time warnings on MacOS

MacOS' linker dislikes local static variables that are used
in two separate libraries. Removing them from the header files
fixes all the warnings.

Bug b/chromium:907088

Change-Id: I7b8ed44bf9a3180489a7407980740fd3f3863046
Reviewed-on: https://swiftshader-review.googlesource.com/c/22889
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Common/SharedLibrary.cpp b/src/Common/SharedLibrary.cpp
new file mode 100644
index 0000000..982292d
--- /dev/null
+++ b/src/Common/SharedLibrary.cpp
@@ -0,0 +1,52 @@
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "SharedLibrary.hpp"
+
+#if defined(_WIN32)
+std::string getModuleDirectory()
+{
+	static int dummy_symbol = 0;
+
+	HMODULE module = NULL;
+	GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&dummy_symbol, &module);
+
+	char filename[1024];
+	if(module && (GetModuleFileName(module, filename, sizeof(filename)) != 0))
+	{
+		std::string directory(filename);
+		return directory.substr(0, directory.find_last_of("\\/") + 1).c_str();
+	}
+	else
+	{
+		return "";
+	}
+}
+#else
+std::string getModuleDirectory()
+{
+	static int dummy_symbol = 0;
+
+	Dl_info dl_info;
+	if(dladdr(&dummy_symbol, &dl_info) != 0)
+	{
+		std::string directory(dl_info.dli_fname);
+		return directory.substr(0, directory.find_last_of("\\/") + 1).c_str();
+	}
+	else
+	{
+		return "";
+	}
+}
+#endif
diff --git a/src/Common/SharedLibrary.hpp b/src/Common/SharedLibrary.hpp
index 8a8c3a1..2af7998 100644
--- a/src/Common/SharedLibrary.hpp
+++ b/src/Common/SharedLibrary.hpp
@@ -27,6 +27,7 @@
 void *loadLibrary(const char *path);
 void freeLibrary(void *library);
 void *getProcAddress(void *library, const char *name);
+std::string getModuleDirectory();
 
 template<int n>
 void *loadLibrary(const std::string &libraryDirectory, const char *(&names)[n], const char *mustContainSymbol = nullptr)
@@ -88,25 +89,6 @@
 	{
 		return (void*)GetProcAddress((HMODULE)library, name);
 	}
-
-	inline std::string getModuleDirectory()
-	{
-		static int dummy_symbol = 0;
-
-		HMODULE module = NULL;
-		GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&dummy_symbol, &module);
-
-		char filename[1024];
-		if(module && (GetModuleFileName(module, filename, sizeof(filename)) != 0))
-		{
-			std::string directory(filename);
-			return directory.substr(0, directory.find_last_of("\\/") + 1).c_str();
-		}
-		else
-		{
-			return "";
-		}
-	}
 #else
 	inline void *loadLibrary(const char *path)
 	{
@@ -150,22 +132,6 @@
 
 		return symbol;
 	}
-
-	inline std::string getModuleDirectory()
-	{
-		static int dummy_symbol = 0;
-
-		Dl_info dl_info;
-		if(dladdr(&dummy_symbol, &dl_info) != 0)
-		{
-			std::string directory(dl_info.dli_fname);
-			return directory.substr(0, directory.find_last_of("\\/") + 1).c_str();
-		}
-		else
-		{
-			return "";
-		}
-	}
 #endif
 
 #endif   // SharedLibrary_hpp
diff --git a/src/OpenGL/libEGL/Android.mk b/src/OpenGL/libEGL/Android.mk
index f62cbdd..4ade568 100644
--- a/src/OpenGL/libEGL/Android.mk
+++ b/src/OpenGL/libEGL/Android.mk
@@ -31,7 +31,8 @@
 	Display.cpp \
 	Surface.cpp \
 	libEGL.cpp \
-	main.cpp
+	main.cpp \
+	../../Common/SharedLibrary.cpp
 
 COMMON_C_INCLUDES := \
 	bionic \
diff --git a/src/OpenGL/libEGL/BUILD.gn b/src/OpenGL/libEGL/BUILD.gn
index 2c610d1..ab9b6fe 100644
--- a/src/OpenGL/libEGL/BUILD.gn
+++ b/src/OpenGL/libEGL/BUILD.gn
@@ -52,6 +52,7 @@
   }
 
   sources = [
+    "../../Common/SharedLibrary.cpp",
     "../common/debug.cpp",
     "../common/Object.cpp",
     "Config.cpp",
diff --git a/src/OpenGL/libEGL/libEGL.vcxproj b/src/OpenGL/libEGL/libEGL.vcxproj
index 2115019..bfc2132 100644
--- a/src/OpenGL/libEGL/libEGL.vcxproj
+++ b/src/OpenGL/libEGL/libEGL.vcxproj
@@ -326,6 +326,7 @@
     </ResourceCompile>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

     <ClCompile Include="Config.cpp" />

     <ClCompile Include="..\Common\debug.cpp" />

diff --git a/src/OpenGL/libEGL/libEGL.vcxproj.filters b/src/OpenGL/libEGL/libEGL.vcxproj.filters
index 7e4fcb1..6994820 100644
--- a/src/OpenGL/libEGL/libEGL.vcxproj.filters
+++ b/src/OpenGL/libEGL/libEGL.vcxproj.filters
@@ -32,6 +32,9 @@
     <ClCompile Include="Surface.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Config.h">

diff --git a/src/OpenGL/libGLES_CM/Android.mk b/src/OpenGL/libGLES_CM/Android.mk
index 9b00f42..6240d5d 100644
--- a/src/OpenGL/libGLES_CM/Android.mk
+++ b/src/OpenGL/libGLES_CM/Android.mk
@@ -44,7 +44,8 @@
 	ResourceManager.cpp \
 	Texture.cpp \
 	utilities.cpp \
-	VertexDataManager.cpp
+	VertexDataManager.cpp \
+	../../Common/SharedLibrary.cpp
 
 COMMON_C_INCLUDES := \
 	bionic \
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
index cf1ac82..a720f24 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
@@ -338,6 +338,7 @@
     </ResourceCompile>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp" />

     <ClCompile Include="..\common\Image.cpp" />

     <ClCompile Include="..\common\MatrixStack.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
index 41e0002..0029212 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
@@ -59,6 +59,9 @@
     <ClCompile Include="..\common\Image.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Buffer.h">

diff --git a/src/OpenGL/libGLESv2/Android.mk b/src/OpenGL/libGLESv2/Android.mk
index 747a6b0..2368bd5 100644
--- a/src/OpenGL/libGLESv2/Android.mk
+++ b/src/OpenGL/libGLESv2/Android.mk
@@ -54,6 +54,7 @@
 	utilities.cpp \
 	VertexArray.cpp \
 	VertexDataManager.cpp \
+	../../Common/SharedLibrary.cpp
 
 COMMON_C_INCLUDES := \
 	bionic \
diff --git a/src/OpenGL/libGLESv2/BUILD.gn b/src/OpenGL/libGLESv2/BUILD.gn
index e6543cf..cf12aaf 100644
--- a/src/OpenGL/libGLESv2/BUILD.gn
+++ b/src/OpenGL/libGLESv2/BUILD.gn
@@ -68,6 +68,7 @@
   ]
 
   sources = [
+    "../../Common/SharedLibrary.cpp",
     "Buffer.cpp",
     "Context.cpp",
     "Device.cpp",
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index 0cf4084..d6742d9 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -33,6 +33,13 @@
 namespace es2
 {
 
+egl::Image*& ImageLevels::getNullImage()
+{
+    static egl::Image* nullImage;
+    nullImage = nullptr;
+    return nullImage;
+}
+
 Texture::Texture(GLuint name) : egl::Texture(name)
 {
 	mMinFilter = GL_NEAREST_MIPMAP_LINEAR;
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index 4f57d32..f27879d 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -60,9 +60,7 @@
 			return image[index];
 		}
 
-		static egl::Image* nullImage;
-		nullImage = nullptr;
-		return nullImage;
+		return getNullImage();
 	}
 
 	inline void release()
@@ -91,6 +89,7 @@
 
 private:
 	egl::Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS] = {};
+    static egl::Image*& getNullImage();
 };
 
 class Texture : public egl::Texture
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index 5c0e73e..8748629 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -350,6 +350,7 @@
     </ResourceCompile>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp" />

     <ClCompile Include="..\common\Image.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

     <ClCompile Include="Buffer.cpp" />

diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
index 004a944..295eeca 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
@@ -80,6 +80,9 @@
     <ClCompile Include="entry_points.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\..\Common\SharedLibrary.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Buffer.h">