diff --git a/README.md b/README.md index be01e86..453c9ed 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ Features * EGL, GLX, and WGL support. * Can be mixed with non-epoxy GL usage. -Building --------- +Building (Unix) +--------------- ./autogen.sh make @@ -46,6 +46,14 @@ Dependencies for OS X (macports): The test suite has additional dependencies depending on the platform. (X11, EGL, a running X Server). +Building (MSVC 2013) +-------------------- +1) Check src\Makefile.vc to ensure that PYTHONDIR is pointing to your Python installation, either a 32-bit or a 64-bit (x64) installation of Python will do. +2) Open an MSVC Command prompt and run "nmake Makefile.vc CFG=release" or "nmake Makefile.vc CFG=debug" in src\ for a release or debug build. +3) Optionally, add src\ into your PATH and run the previous step in test\. Run the tests by running the built .exe's. +4) Assuming you want to install in %INSTALL_DIR%, copy gl.h, gl_generated.h, wgl.h, wgl_generated.h, egl.h and egl_generated.h from include\epoxy\ to %INSTALL_DIR%\include\epoxy\, copy src\epoxy.lib to %INSTALL_DIR%\lib\ and copy epoxy-vs12.dll and epoxy-vs12.pdb (if you've built a debug build) from src\ to %INSTALL_DIR%\bin\. Create directories as needed. +5) To clean the project, repeat steps 2 and 3, adding " clean" to the commands. + Switching your code to using epoxy ---------------------------------- diff --git a/include/epoxy/egl.h b/include/epoxy/egl.h index f1c3f56..bd02948 100644 --- a/include/epoxy/egl.h +++ b/include/epoxy/egl.h @@ -45,8 +45,8 @@ extern "C" { #include "epoxy/egl_generated.h" -bool epoxy_has_egl_extension(EGLDisplay dpy, const char *extension); -int epoxy_egl_version(EGLDisplay dpy); +PUBLIC bool epoxy_has_egl_extension(EGLDisplay dpy, const char *extension); +PUBLIC int epoxy_egl_version(EGLDisplay dpy); #ifdef __cplusplus } /* extern "C" */ diff --git a/msvc/detectenv-msvc.mak b/msvc/detectenv-msvc.mak new file mode 100644 index 0000000..03a2eeb --- /dev/null +++ b/msvc/detectenv-msvc.mak @@ -0,0 +1,100 @@ +# Copyright © 2015 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or +# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir) +!if !defined(VCINSTALLDIR) && !defined(WINDOWSSDKDIR) +MSG = ^ +This Makefile is only for Visual Studio 2008 and later.^ +You need to ensure that the Visual Studio Environment is properly set up^ +before running this Makefile. +!error $(MSG) +!endif + +ERRNUL = 2>NUL +_HASH=^# + +!if ![echo VCVERSION=_MSC_VER > vercl.x] \ + && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \ + && ![echo PLAT=Win32 >> vercl.x] \ + && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \ + && ![echo PLAT=x64 >> vercl.x] \ + && ![echo $(_HASH)endif >> vercl.x] \ + && ![cl -nologo -TC -P vercl.x $(ERRNUL)] +!include vercl.i +!if ![echo VCVER= ^\> vercl.vc] \ + && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc] +!include vercl.vc +!endif +!endif +!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc] +!endif + +!if $(VCVERSION) > 1499 && $(VCVERSION) < 1600 +VSVER = 9 +C99_COMPAT_NEEDED = 1 +!elseif $(VCVERSION) > 1599 && $(VCVERSION) < 1700 +VSVER = 10 +C99_COMPAT_NEEDED = 1 +!elseif $(VCVERSION) > 1699 && $(VCVERSION) < 1800 +VSVER = 11 +C99_COMPAT_NEEDED = 1 +!elseif $(VCVERSION) > 1799 && $(VCVERSION) < 1900 +VSVER = 12 +C99_COMPAT_NEEDED = 0 +!else +VSVER = 0 +!endif + +!if "$(VSVER)" == "0" +MSG = ^ +This NMake Makefile set supports Visual Studio^ +9 (2008) through 12 (2013). Your Visual Studio^ +version is not supported. +!error $(MSG) +!endif + +VALID_CFGSET = FALSE +!if "$(CFG)" == "release" || "$(CFG)" == "debug" +VALID_CFGSET = TRUE +!endif + +!if "$(VALID_CFGSET)" == "FALSE" +MSG = ^ +You need to specify CFG=release or CFG=debug. +!error $(MSG) +!endif + +!if "$(CFG)" == "release" +CFLAGS_ADD = /MD /O2 /Zi /I..\include /I..\..\vs$(VSVER)\$(PLAT)\include +EXTRA_LDFLAGS = /opt:ref +!else +CFLAGS_ADD = /MDd /Od /Zi /I..\include /I..\..\vs$(VSVER)\$(PLAT)\include +EXTRA_LDFLAGS = +!endif + +!if "$(PLAT)" == "x64" +LDFLAGS_ARCH = /machine:x64 +!else +LDFLAGS_ARCH = /machine:x86 +!endif + +CFLAGS_C99_COMPAT = /Dinline=__inline diff --git a/src/Makefile.sources b/src/Makefile.sources new file mode 100644 index 0000000..689b332 --- /dev/null +++ b/src/Makefile.sources @@ -0,0 +1,46 @@ +# Copyright © 2014 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +GL_GEN_HEADER = include/epoxy/gl_generated.h + +GLX_GEN_HEADER = include/epoxy/glx_generated.h + +WGL_GEN_HEADER = include/epoxy/wgl_generated.h + +EGL_GEN_HEADER = include/epoxy/egl_generated.h + +GENERATED_GL_SOURCE = gl_generated_dispatch.c + +GENERATED_GLX_SOURCE = glx_generated_dispatch.c + +GENERATED_WGL_SOURCE = wgl_generated_dispatch.c + +GENERATED_EGL_SOURCE = egl_generated_dispatch.c + +EPOXY_C_SRC = dispatch_common.c + +EPOXY_GLX_C_SRC = dispatch_glx.c + +EPOXY_WGL_C_SRC = dispatch_wgl.c + +EPOXY_EGL_C_SRC = dispatch_egl.c + +EPOXY_SRC_HDR = dispatch_common.h diff --git a/src/Makefile.vc b/src/Makefile.vc new file mode 100644 index 0000000..a111bab --- /dev/null +++ b/src/Makefile.vc @@ -0,0 +1,73 @@ +# Copyright © 2015 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# Note: To build and use libepoxy for Visual Studio prior to Visual Studio 2013, +# you need to ensure that you have stdint.h, inttypes.h and stdbool.h +# that will work for your installation of Visual Studio, which can be +# found by the compiler. One possibility would be to use msinttypes +# and adapting gnulib's stdbool.h.in for your use. + +# Adjust this to where your Python interpretor resides in +PYTHONDIR=c:\python27 + +# Choose whether libtool-style DLL names are desired (set as 1) +LIBTOOL_DLL_NAMING = 0 + +# Please don't change the following lines +EPOXY_BASENAME = epoxy + +!if "$(LIBTOOL_DLL_NAMING)" == "1" +EPOXY_DLL_BASENAME = lib$(EPOXY_BASENAME)-0 +!else +EPOXY_DLL_BASENAME = $(EPOXY_BASENAME)-vs$(VSVER) +!endif + +!include ..\msvc\detectenv-msvc.mak +!include Makefile.sources + +all: $(EPOXY_DLL_BASENAME).dll + +$(EPOXY_DLL_BASENAME).dll: ../$(GL_GEN_HEADER) ../$(WGL_GEN_HEADER) ../$(EGL_GEN_HEADER) $(GENERATED_GL_SOURCE) $(GENERATED_WGL_SOURCE) $(GENERATED_EGL_SOURCE) $(EPOXY_C_SRC) $(EPOXY_WGL_C_SRC) $(EPOXY_EGL_C_SRC) + $(CC) $(CFLAGS_ADD) $(CFLAGS_C99_COMPAT) $(EPOXY_C_SRC) $(EPOXY_WGL_C_SRC) $(EPOXY_EGL_C_SRC) $(GENERATED_GL_SOURCE) $(GENERATED_WGL_SOURCE) $(GENERATED_EGL_SOURCE) /I c:\opt\Imagination-3_5\PowerVR_Graphics\PowerVR_SDK\SDK_3.5\Builds\Include \ + /link /DLL /DEBUG $(EXTRA_LDFLAGS) /pdb:$(EPOXY_DLL_BASENAME).pdb /out:$@ /implib:$(EPOXY_BASENAME).lib + @if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2 + +..\$(GL_GEN_HEADER) $(GENERATED_GL_SOURCE): gen_dispatch.py + $(PYTHONDIR)\python.exe gen_dispatch.py --dir .. ..\registry\gl.xml + +..\$(WGL_GEN_HEADER) $(GENERATED_WGL_SOURCE): gen_dispatch.py + $(PYTHONDIR)\python.exe gen_dispatch.py --dir .. ..\registry\wgl.xml + +..\$(EGL_GEN_HEADER) $(GENERATED_EGL_SOURCE): gen_dispatch.py + $(PYTHONDIR)\python.exe gen_dispatch.py --dir .. ..\registry\egl.xml + +clean: + @-del *.lib + @-del *.exp + @-del *.dll + @-if exist *.dll.manifest del *.dll.manifest + @-del *.ilk + @-del *.pdb + @-del *.obj + @-del ..\include\epoxy\*generated.h + @-del $(GENERATED_GL_SOURCE) + @-del $(GENERATED_WGL_SOURCE) + @-del $(GENERATED_EGL_SOURCE) diff --git a/src/dispatch_common.h b/src/dispatch_common.h index 676a4d5..161fe07 100644 --- a/src/dispatch_common.h +++ b/src/dispatch_common.h @@ -24,7 +24,7 @@ #include #ifdef _WIN32 -#define PLATFORM_HAS_EGL 0 +#define PLATFORM_HAS_EGL 1 #define PLATFORM_HAS_GLX 0 #define PLATFORM_HAS_WGL 1 #define EPOXY_IMPORTEXPORT __declspec(dllexport) @@ -45,17 +45,6 @@ #define EPOXY_IMPORTEXPORT #endif -#include "epoxy/gl.h" -#if PLATFORM_HAS_GLX -#include "epoxy/glx.h" -#endif -#if PLATFORM_HAS_EGL -#include "epoxy/egl.h" -#endif -#if PLATFORM_HAS_WGL -#include "epoxy/wgl.h" -#endif - #ifndef PUBLIC # ifdef _WIN32 # define PUBLIC __declspec(dllexport) @@ -66,6 +55,17 @@ # endif #endif +#if PLATFORM_HAS_WGL +#include "epoxy/wgl.h" +#endif +#include "epoxy/gl.h" +#if PLATFORM_HAS_GLX +#include "epoxy/glx.h" +#endif +#if PLATFORM_HAS_EGL +#include "epoxy/egl.h" +#endif + #if defined(__GNUC__) #define PACKED __attribute__((__packed__)) #else diff --git a/src/gen_dispatch.py b/src/gen_dispatch.py index 1644cbf..e8f55b8 100755 --- a/src/gen_dispatch.py +++ b/src/gen_dispatch.py @@ -606,7 +606,7 @@ class Generator(object): # # It also writes out the actual initialized global function # pointer. - if func.ret_type == 'void': + if func.ret_type == 'void' or func.ret_type=='VOID': self.outln('GEN_THUNKS({0}, ({1}), ({2}))'.format(func.wrapped_name, func.args_decl, func.args_list)) diff --git a/test/Makefile.sources b/test/Makefile.sources new file mode 100644 index 0000000..a279e96 --- /dev/null +++ b/test/Makefile.sources @@ -0,0 +1,73 @@ +# Copyright © 2014 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +EGL_TESTS_PROGS = \ + egl_has_extension_nocontext \ + egl_gl \ + egl_gles1_without_glx \ + egl_gles2_without_glx + +EGL_GLX_TEST_PROGS = \ + egl_and_glx_different_pointers_egl_glx \ + egl_and_glx_different_pointers_egl \ + egl_and_glx_different_pointers_glx + +GLX_TEST_PROGS = \ + glx_beginend \ + glx_public_api \ + glx_public_api_core \ + glx_glxgetprocaddress_nocontext \ + glx_has_extension_nocontext \ + glx_static + +GLX_NON_APPLE_PROGS = \ + glx_alias_prefer_same_name \ + glx_gles2 + +WGL_TEST_PROGS = \ + wgl_core_and_exts$(EXEEXT) \ + wgl_per_context_funcptrs$(EXEEXT) \ + wgl_usefontbitmaps$(EXEEXT) \ + wgl_usefontbitmaps_unicode$(EXEEXT) + +GENERIC_TEST_PROGS = \ + headerguards$(EXEEXT) \ + miscdefines$(EXEEXT) \ + khronos_typedefs$(EXEEXT) + +DLWRAP_SRC = dlwrap.c dlwrap.h + +KHRONOS_TYPEDEF_SRC = \ + khronos_typedefs.c \ + khronos_typedefs.h \ + khronos_typedefs_nonepoxy.c + +EGL_COMMON_SRC = \ + egl_common.c \ + egl_common.h + +GLX_COMMON_SRC = \ + glx_common.c \ + glx_common.h + +WGL_COMMON_SRC = \ + wgl_common.c \ + wgl_common.h diff --git a/test/Makefile.vc b/test/Makefile.vc new file mode 100644 index 0000000..46974b6 --- /dev/null +++ b/test/Makefile.vc @@ -0,0 +1,68 @@ +# Copyright © 2015 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# Note: To build and use libepoxy for Visual Studio prior to Visual Studio 2013, +# you need to ensure that you have stdint.h, inttypes.h and stdbool.h +# that will work for your installation of Visual Studio, which can be +# found by the compiler. One possibility would be to use msinttypes +# and adapting gnulib's stdbool.h.in for your use. + +!include ..\msvc\detectenv-msvc.mak +!include Makefile.sources + +EXEEXT = .exe + +all: config.h wgl_common.lib $(GENERIC_TEST_PROGS) $(WGL_TEST_PROGS) + +LD_CFLAGS = /link +LDFLAGS = /libpath:..\src epoxy.lib gdi32.lib user32.lib $(EXTRA_LDFLAGS) + +CFLAGS_INCLUDES_TESTS = /I. + +khronos_typedefs.exe: $(KHRONOS_TYPEDEF_SRC) config.h + $(CC) $(CFLAGS_ADD) $(CFLAGS_INCLUDES_TESTS) $(CFLAGS_C99_COMPAT) khronos_typedefs.c khronos_typedefs_nonepoxy.c /c + link /DEBUG $(EXTRA_LDFLAGS) $*.obj $*_nonepoxy.obj /out:$@ + @if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +wgl_usefontbitmaps_unicode.exe: wgl_usefontbitmaps.c wgl_common.lib config.h + $(CC) $(CFLAGS_ADD) $(CFLAGS_INCLUDES_TESTS) $(CFLAGS_C99_COMPAT) /DUNICODE wgl_usefontbitmaps.c /Fe$@ $(LD_CFLAGS) $(LDFLAGS) wgl_common.lib + @if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +wgl_common.lib: $(WGL_COMMON_SRC) + $(CC) $(CFLAGS_ADD) $(CFLAGS_INCLUDES_TESTS) $(CFLAGS_C99_COMPAT) /c wgl_common.c + lib wgl_common.obj /out:$@ + +.c$(EXEEXT): + $(CC) $(CFLAGS_ADD) $(CFLAGS_INCLUDES_TESTS) $(CFLAGS_C99_COMPAT) $< $(LD_CFLAGS) $(LDFLAGS) wgl_common.lib + @if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +config.h: + @echo #define BUILD_WGL 1 > config.h + +clean: + @-del *.lib + @-del *.exp + @-del *.exe + @-if exist *.exe.manifest del *.exe.manifest + @-del *.ilk + @-del *.pdb + @-del *.obj + @-del config.h diff --git a/test/khronos_typedefs_nonepoxy.c b/test/khronos_typedefs_nonepoxy.c index 64d5a1b..5386101 100644 --- a/test/khronos_typedefs_nonepoxy.c +++ b/test/khronos_typedefs_nonepoxy.c @@ -56,8 +56,10 @@ get_system_typedef_sizes(uint32_t *sizes) #else /* !HAVE_KHRPLATFORM_H */ +#ifndef _MSC_VER /* Don't care -- this is a conditional case in test code. */ #pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" +#endif void get_system_typedef_sizes(uint32_t *sizes)