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">