Make it possible to build SwiftShader for Fuchsia.

With this change SwiftShader is buildable for Fuchsia. Integration with
Mozard for EGL will be implemented in a separate CL.

Bug: chromium:800951
Change-Id: I60160c91aecaa6cdc6b07de688ff54b686613ab3
Reviewed-on: https://swiftshader-review.googlesource.com/16148
Tested-by: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Common/Socket.cpp b/src/Common/Socket.cpp
index a19f574..b098031 100644
--- a/src/Common/Socket.cpp
+++ b/src/Common/Socket.cpp
@@ -20,6 +20,7 @@
 	#include <unistd.h>
 	#include <netdb.h>
 	#include <netinet/in.h>
+	#include <sys/select.h>
 #endif
 
 namespace sw
diff --git a/src/OpenGL/compiler/BUILD.gn b/src/OpenGL/compiler/BUILD.gn
index 3596e38..ea72f32 100644
--- a/src/OpenGL/compiler/BUILD.gn
+++ b/src/OpenGL/compiler/BUILD.gn
@@ -76,7 +76,7 @@
     all_dependent_configs = [ ":swiftshader_translator_disable_pool_alloc" ]
   }
 
-  if (is_linux || is_mac) {
+  if (is_linux || is_mac || is_fuchsia) {
     sources += [ "ossource_posix.cpp" ]
   } else if (is_win) {
     sources += [ "ossource_win.cpp" ]
diff --git a/src/OpenGL/compiler/osinclude.h b/src/OpenGL/compiler/osinclude.h
index 650f871..54d4c75 100644
--- a/src/OpenGL/compiler/osinclude.h
+++ b/src/OpenGL/compiler/osinclude.h
@@ -26,7 +26,7 @@
       defined(__FreeBSD__) || defined(__OpenBSD__) || \
       defined(__sun) || defined(ANDROID) || \
       defined(__GLIBC__) || defined(__GNU__) || \
-      defined(__QNX__)
+      defined(__QNX__) || defined(__Fuchsia__)
 #define ANGLE_OS_POSIX
 #else
 #error Unsupported platform.
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 9564cd4..9e56918 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -572,6 +572,9 @@
 		return false;
 	#elif defined(__APPLE__)
 		return sw::OSX::IsValidWindow(window);
+	#elif defined(__Fuchsia__)
+		// TODO(crbug.com/800951): Integrate with Mozart.
+		return true;
 	#else
 		#error "Display::isValidWindow unimplemented for this platform"
 		return false;
@@ -744,6 +747,8 @@
 		}
 	#elif defined(__APPLE__)
 		return sw::FORMAT_A8B8G8R8;
+	#elif defined(__Fuchsia__)
+		return sw::FORMAT_A8B8G8R8;
 	#else
 		#error "Display::isValidWindow unimplemented for this platform"
 	#endif
diff --git a/src/OpenGL/libEGL/Surface.cpp b/src/OpenGL/libEGL/Surface.cpp
index ad3bdd2..57261b2 100644
--- a/src/OpenGL/libEGL/Surface.cpp
+++ b/src/OpenGL/libEGL/Surface.cpp
@@ -294,6 +294,10 @@
 		int windowWidth;
 		int windowHeight;
 		sw::OSX::GetNativeWindowSize(window, windowWidth, windowHeight);
+	#elif defined(__Fuchsia__)
+		// TODO(crbug.com/800951): Integrate with Mozart.
+		int windowWidth = 100;
+		int windowHeight = 100;
 	#else
 		#error "WindowSurface::checkForResize unimplemented for this platform"
 	#endif
diff --git a/src/OpenGL/libEGL/libEGL.hpp b/src/OpenGL/libEGL/libEGL.hpp
index 683b0d1..77ddf70 100644
--- a/src/OpenGL/libEGL/libEGL.hpp
+++ b/src/OpenGL/libEGL/libEGL.hpp
@@ -118,6 +118,8 @@
 				#else
 					const char *libEGL_lib[] = {"libEGL_translator.dylib", "libEGL.so", "libEGL.dylib", "libswiftshader_libEGL.dylib"};
 				#endif
+			#elif defined(__Fuchsia__)
+				const char *libEGL_lib[] = {"libEGL.so"};
 			#else
 				#error "libEGL::loadExports unimplemented for this platform"
 			#endif
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index 5a3a289..cd9447e 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -279,6 +279,8 @@
 				#else
 					const char *libGLES_CM_lib[] = {"libGLES_CM_translator.dylib", "libGLES_CM.dylib"};
 				#endif
+			#elif defined(__Fuchsia__)
+				const char *libGLES_CM_lib[] = {"libGLES_CM.so"};
 			#else
 				#error "libGLES_CM::loadExports unimplemented for this platform"
 			#endif
diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index 42febd8..cb14319 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -302,6 +302,8 @@
 				#else
 					const char *libGLESv2_lib[] = {"libGLES_V2_translator.dylib", "libGLESv2.dylib", "libswiftshader_libGLESv2.dylib"};
 				#endif
+			#elif defined(__Fuchsia__)
+				const char *libGLESv2_lib[] = {"libGLESv2.so"};
 			#else
 				#error "libGLESv2::loadExports unimplemented for this platform"
 			#endif