diff --git a/examples/common/entry_linux.cpp b/examples/common/entry_linux.cpp new file mode 100644 index 00000000..7549fc3c --- /dev/null +++ b/examples/common/entry_linux.cpp @@ -0,0 +1,17 @@ +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include <bx/bx.h> + +#if BX_PLATFORM_LINUX + +extern int _main_(int _argc, char** _argv); + +int main(int _argc, char** _argv) +{ + return _main_(_argc, _argv); +} + +#endif // BX_PLATFORM_LINUX diff --git a/premake/bgfx.lua b/premake/bgfx.lua index dd1fb79e..c0ba2b9b 100644 --- a/premake/bgfx.lua +++ b/premake/bgfx.lua @@ -4,21 +4,16 @@ project "bgfx" includedirs { BGFX_DIR .. "../bx/include", + BGFX_DIR .. "3rdparty/glext", } - configuration { "nacl" } - buildoptions { - "-Wall", - } - - configuration { "windows" } - includedirs { - BGFX_DIR .. "3rdparty/glext", - } + buildoptions { + "-Wall", + } - defines { --- "BGFX_CONFIG_RENDERER_OPENGL=1", - } + defines { +-- "BGFX_CONFIG_RENDERER_OPENGL=1", + } configuration "Debug" defines { diff --git a/premake/helloworld.lua b/premake/helloworld.lua index 0362bdd3..ca3a6db7 100644 --- a/premake/helloworld.lua +++ b/premake/helloworld.lua @@ -26,3 +26,9 @@ project "helloworld" "@echo Stripping symbols.", "@$(NACL)/bin/x86_64-nacl-strip -s \"$(TARGET)\"" } + + configuration { "linux" } + links { + "GL", + "pthread", + } diff --git a/premake/premake4.lua b/premake/premake4.lua index 511dc609..f76c0d64 100644 --- a/premake/premake4.lua +++ b/premake/premake4.lua @@ -22,6 +22,7 @@ newoption { value = "GCC", description = "Choose GCC flavor", allowed = { + { "linux", "Linux" }, { "mingw", "MinGW" }, { "nacl", "Google Native Client" }, } @@ -39,21 +40,30 @@ if not XEDK then XEDK = "<you must install XBOX SDK>" end location (BGFX_BUILD_DIR .. "projects/" .. _ACTION) +if _ACTION == "clean" then + os.rmdir(BUILD_DIR) +end + if _ACTION == "gmake" then + if nil == _OPTIONS["gcc"] then + print("GCC flavor must be specified!") + os.exit(1) + end + flags { "ExtraWarnings", } - if "linux" ~= os.get() and nil == _OPTIONS["gcc"] then - print("GCC flavor must be specified!") - os.exit(1) + if "linux" == _OPTIONS["gcc"] then + location (BGFX_BUILD_DIR .. "projects/" .. _ACTION .. "-linux") end if "mingw" == _OPTIONS["gcc"] then premake.gcc.cc = "$(MINGW)/bin/mingw32-gcc" premake.gcc.cxx = "$(MINGW)/bin/mingw32-g++" premake.gcc.ar = "$(MINGW)/bin/ar" + location (BGFX_BUILD_DIR .. "projects/" .. _ACTION .. "-mingw") end if "nacl" == _OPTIONS["gcc"] then @@ -80,6 +90,12 @@ flags { "Symbols", } +defines { + "__STDC_LIMIT_MACROS", + "__STDC_FORMAT_MACROS", + "__STDC_CONSTANT_MACROS", +} + configuration "Debug" targetsuffix "Debug" @@ -90,47 +106,91 @@ configuration "Release" targetsuffix "Release" configuration { "vs*" } + includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/msvc" } defines { + "WIN32", + "_WIN32", "_HAS_EXCEPTIONS=0", "_HAS_ITERATOR_DEBUGGING=0", "_SCL_SECURE=0", + "_SECURE_SCL=0", + "_SCL_SECURE_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS", "_CRT_SECURE_NO_DEPRECATE", - "__STDC_LIMIT_MACROS", - "__STDC_FORMAT_MACROS", - "__STDC_CONSTANT_MACROS", + } + buildoptions { + "/Oy-", -- Suppresses creation of frame pointers on the call stack. + "/Ob2", -- The Inline Function Expansion } configuration { "x32", "vs*" } - defines { "WIN32" } targetdir (BGFX_BUILD_DIR .. "win32_" .. _ACTION .. "/bin") objdir (BGFX_BUILD_DIR .. "win32_" .. _ACTION .. "/obj") - includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/msvc" } + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/win32_" .. _ACTION } configuration { "x64", "vs*" } - defines { "WIN32" } + defines { "_WIN64" } targetdir (BGFX_BUILD_DIR .. "win64_" .. _ACTION .. "/bin") objdir (BGFX_BUILD_DIR .. "win64_" .. _ACTION .. "/obj") - includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/msvc" } + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/win64_" .. _ACTION } + +configuration { "mingw" } + defines { "WIN32" } + includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/mingw" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-Wunused-value", + "-fdata-sections", + "-ffunction-sections", +-- "-fmerge-all-constants" + } + linkoptions { + "-Wl,--gc-sections", + } configuration { "x32", "mingw" } - defines { "WIN32" } targetdir (BGFX_BUILD_DIR .. "win32_mingw" .. "/bin") objdir (BGFX_BUILD_DIR .. "win32_mingw" .. "/obj") - includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/mingw" } + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/win32_mingw" } + buildoptions { "-m32" } configuration { "x64", "mingw" } - defines { "WIN32" } targetdir (BGFX_BUILD_DIR .. "win64_mingw" .. "/bin") objdir (BGFX_BUILD_DIR .. "win64_mingw" .. "/obj") - includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/mingw" } + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/win64_mingw" } + buildoptions { "-m64" } + +configuration { "linux" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-Wunused-value", + "-mfpmath=sse", -- force SSE to get 32-bit and 64-bit builds deterministic. + "-msse2", + } + linkoptions { + "-Wl,--gc-sections", + } + +configuration { "linux", "x32" } + targetdir (BGFX_BUILD_DIR .. "linux32_gcc" .. "/bin") + objdir (BGFX_BUILD_DIR .. "linux32_gcc" .. "/obj") + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/linux32_gcc" } + buildoptions { + "-m32", + } + +configuration { "linux", "x64" } + targetdir (BGFX_BUILD_DIR .. "linux64_gcc" .. "/bin") + objdir (BGFX_BUILD_DIR .. "linux64_gcc" .. "/obj") + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/linux64_gcc" } + buildoptions { + "-m64", + } configuration { "nacl" } defines { "_BSD_SOURCE=1", "_POSIX_C_SOURCE=199506", "_XOPEN_SOURCE=600" } - links { - "ppapi", - "ppapi_gles2", - } includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/nacl" } buildoptions { "-std=c++0x", @@ -153,31 +213,23 @@ configuration { "x32", "nacl" } targetdir (BGFX_BUILD_DIR .. "nacl-x86" .. "/bin") objdir (BGFX_BUILD_DIR .. "nacl-x86" .. "/obj") libdirs { BGFX_THIRD_PARTY_DIR .. "lib/nacl-x86" } - linkoptions { - "-melf32_nacl", - } + linkoptions { "-melf32_nacl" } configuration { "x64", "nacl" } targetdir (BGFX_BUILD_DIR .. "nacl-x64" .. "/bin") objdir (BGFX_BUILD_DIR .. "nacl-x64" .. "/obj") libdirs { BGFX_THIRD_PARTY_DIR .. "lib/nacl-x64" } - linkoptions { - "-melf64_nacl", - } - -configuration { "x32", "linux" } - targetdir (BGFX_BUILD_DIR .. "linux32" .. "/bin") - objdir (BGFX_BUILD_DIR .. "linux32" .. "/obj") - -configuration { "x64", "linux" } - targetdir (BGFX_BUILD_DIR .. "linux64" .. "/bin") - objdir (BGFX_BUILD_DIR .. "linux64" .. "/obj") + linkoptions { "-melf64_nacl" } configuration { "Xbox360" } - defines { "_XBOX", "NOMINMAX" } targetdir (BGFX_BUILD_DIR .. "xbox360" .. "/bin") objdir (BGFX_BUILD_DIR .. "xbox360" .. "/obj") includedirs { BGFX_THIRD_PARTY_DIR .. "compiler/msvc" } + libdirs { BGFX_THIRD_PARTY_DIR .. "lib/xbox360" } + defines { + "NOMINMAX", + "_XBOX", + } configuration {} -- reset configuration diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 9f0148fa..438f7ec9 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -179,7 +179,7 @@ namespace bgfx }; // Find suitable config - GLXFBConfig bestconfig; + GLXFBConfig bestconfig = NULL; int nconfigs; GLXFBConfig* configs = glXChooseFBConfig(display, DefaultScreen(display), glxAttribs, &nconfigs); @@ -192,7 +192,7 @@ namespace bgfx { // Check if meets min spec bool validconfig = true; - for (int attridx = 0; attridx < countof(glxAttribs) && glxAttribs[attridx] != None; attridx += 2) + for (uint32_t attridx = 0; attridx < countof(glxAttribs)-1 && glxAttribs[attridx] != None; attridx += 2) { int value; glXGetFBConfigAttrib(display, configs[ii], glxAttribs[attridx], &value); diff --git a/src/renderer_gl.h b/src/renderer_gl.h index f54606bb..2ed35e80 100644 --- a/src/renderer_gl.h +++ b/src/renderer_gl.h @@ -7,7 +7,15 @@ #define __RENDERER_GL_H__ #if BGFX_CONFIG_RENDERER_OPENGL -# include <GL/gl.h> +# if BX_PLATFORM_LINUX +# define GL_PROTOTYPES +# define GL_GLEXT_LEGACY +# include <GL/gl.h> +# include <GL/glx.h> +# undef GL_PROTOTYPES +# else +# include <GL/gl.h> +# endif // BX_PLATFORM_ // remove deprecated from glext.h # define GL_VERSION_1_2_DEPRECATED @@ -63,7 +71,6 @@ #elif BX_PLATFORM_WINDOWS # include <windows.h> #elif BX_PLATFORM_LINUX -# include <GL/glx.h> # include <X11/Xlib.h> #endif // BX_PLATFORM_