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_