mirror of
https://github.com/Perlmint/glew-cmake.git
synced 2024-11-26 16:41:57 +00:00
Makes GLEW truly independent of C runtime library on Windows to prevent
any issues with mixing compilers and library versions. The Visual Studio Projects need some touching up to get all of the settings synced up for all of the build variants.
This commit is contained in:
parent
b3440c0979
commit
5efdbaefc8
@ -10,8 +10,6 @@
|
||||
#endif
|
||||
|
||||
#include <stddef.h> /* For size_t */
|
||||
#include <stdlib.h> /* For bsearch */
|
||||
#include <string.h> /* For memset */
|
||||
|
||||
#if defined(GLEW_REGAL)
|
||||
|
||||
|
@ -1,10 +1,8 @@
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static int _glewExtensionCompare(const void *a, const void *b)
|
||||
static int _glewExtensionCompare(const char *s1, const char *s2)
|
||||
{
|
||||
/* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */
|
||||
const char *s1 = (const char *) a;
|
||||
const char *s2 = *(const char * const *) b;
|
||||
while (*s1 || *s2)
|
||||
{
|
||||
if (*s1 > *s2)
|
||||
@ -17,31 +15,32 @@ static int _glewExtensionCompare(const void *a, const void *b)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static GLboolean *_glewGetExtensionString(const char *name)
|
||||
static ptrdiff_t _glewBsearchExtension(const char* name)
|
||||
{
|
||||
const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare);
|
||||
ptrdiff_t i;
|
||||
ptrdiff_t lo = 0, hi = sizeof(_glewExtensionLookup) / sizeof(char*) - 2;
|
||||
|
||||
if (n)
|
||||
while (lo <= hi)
|
||||
{
|
||||
i = n-_glewExtensionLookup;
|
||||
return _glewExtensionString+i;
|
||||
ptrdiff_t mid = (lo + hi) / 2;
|
||||
const int cmp = _glewExtensionCompare(name, _glewExtensionLookup[mid]);
|
||||
if (cmp < 0) hi = mid - 1;
|
||||
else if (cmp > 0) lo = mid + 1;
|
||||
else return mid;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static GLboolean *_glewGetExtensionString(const char *name)
|
||||
{
|
||||
ptrdiff_t n = _glewBsearchExtension(name);
|
||||
if (n >= 0) return &_glewExtensionString[n];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GLboolean *_glewGetExtensionEnable(const char *name)
|
||||
{
|
||||
const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare);
|
||||
ptrdiff_t i;
|
||||
|
||||
if (n)
|
||||
{
|
||||
i = n-_glewExtensionLookup;
|
||||
return _glewExtensionEnabled[i];
|
||||
}
|
||||
|
||||
ptrdiff_t n = _glewBsearchExtension(name);
|
||||
if (n >= 0) return _glewExtensionEnabled[n];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -117,7 +116,7 @@ static GLenum GLEWAPIENTRY glewContextInit ()
|
||||
GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
|
||||
}
|
||||
|
||||
memset(_glewExtensionString,0,sizeof(_glewExtensionString));
|
||||
for (size_t i = 0; i < sizeof(_glewExtensionLookup) / sizeof(char*); ++i) _glewExtensionString[i] = GL_FALSE;
|
||||
|
||||
if (GLEW_VERSION_3_0)
|
||||
{
|
||||
|
@ -81,10 +81,22 @@ if (WIN32)
|
||||
endif ()
|
||||
|
||||
add_library (glew SHARED ${GLEW_SRC_FILES})
|
||||
set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}")
|
||||
set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD;VC_EXTRALEAN" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}")
|
||||
add_library (glew_s STATIC ${GLEW_SRC_FILES})
|
||||
if (MSVC)
|
||||
# add options from visual studio project and remove stdlib dependency
|
||||
# kill security checks which are dependent on stdlib
|
||||
target_compile_options (glew PRIVATE -GS-)
|
||||
target_compile_options (glew_s PRIVATE -GS-)
|
||||
target_link_libraries (glew PRIVATE -BASE:0x62AA0000 -nodefaultlib -noentry)
|
||||
elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang")))
|
||||
# remove stdlib dependency on windows with GCC and Clang (for similar reasons
|
||||
# as to MSVC - to allow it to be used with any Windows compiler)
|
||||
# not thoroughly tested yet
|
||||
target_link_libraries (glew PRIVATE -nostdlibs -lgcc)
|
||||
endif ()
|
||||
set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib)
|
||||
target_link_libraries (glew ${GLEW_LIBRARIES})
|
||||
target_link_libraries (glew PUBLIC ${GLEW_LIBRARIES})
|
||||
target_link_libraries (glew_s ${GLEW_LIBRARIES})
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 2.8.12)
|
||||
@ -119,14 +131,20 @@ if (BUILD_UTILS)
|
||||
list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc)
|
||||
endif ()
|
||||
add_executable (glewinfo ${GLEWINFO_SRC_FILES})
|
||||
target_link_libraries (glewinfo glew ${X11_LIBRARIES})
|
||||
target_link_libraries (glewinfo glew)
|
||||
if (NOT WIN32)
|
||||
target_link_libraries(glewinfo ${X11_LIBRARIES})
|
||||
endif ()
|
||||
|
||||
set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c)
|
||||
if (WIN32)
|
||||
list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc)
|
||||
endif ()
|
||||
add_executable (visualinfo ${VISUALINFO_SRC_FILES})
|
||||
target_link_libraries (visualinfo glew ${X11_LIBRARIES})
|
||||
target_link_libraries (visualinfo glew)
|
||||
if (NOT WIN32)
|
||||
target_link_libraries(visualinfo ${X11_LIBRARIES})
|
||||
endif ()
|
||||
|
||||
install ( TARGETS glewinfo visualinfo
|
||||
DESTINATION bin)
|
||||
|
@ -280,6 +280,7 @@
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<AdditionalIncludeDirectories>$(INCLUDE_DIR)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
@ -304,6 +305,8 @@
|
||||
<AdditionalOptions> /ignore:4089</AdditionalOptions>
|
||||
<AdditionalLibraryDirectories>
|
||||
</AdditionalLibraryDirectories>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
<NoEntryPoint>true</NoEntryPoint>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug MX|Win32'">
|
||||
|
@ -262,6 +262,7 @@
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<Culture>0x0409</Culture>
|
||||
|
Loading…
Reference in New Issue
Block a user