Add support for Fuchsia
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2152273002

[mtklein edit from here down]
No public API changes.
TBR=reed@google.com

Review-Url: https://codereview.chromium.org/2152273002
diff --git a/BUILD.gn b/BUILD.gn
index b28edd0..61a8e98 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -70,13 +70,17 @@
   ":skia_library",
 ]
 
-# Chrome's GN environment is mostly helpful, but a couple default configs tend to get in the way.
-unwanted_configs = [
-  "//build/config/clang:find_bad_constructs",  # Chrome style checks.
-  "//build/config:feature_flags",  # A bunch of #defines we don't care about.
-]
+unwanted_configs = []
 
-core_gypi = exec_script("build/gypi_to_gn.py",
+if (!is_fuchsia) {
+  # Chrome's GN environment is mostly helpful, but a couple default configs tend to get in the way.
+  unwanted_configs += [
+    "//build/config/clang:find_bad_constructs",  # Chrome style checks.
+    "//build/config:feature_flags",  # A bunch of #defines we don't care about.
+  ]
+}
+
+core_gypi = exec_script("//build/gypi_to_gn.py",
                         [
                           rebase_path("gyp/core.gypi"),
                           "--replace=<(skia_include_path)=include",
@@ -85,7 +89,7 @@
                         "scope",
                         [ "gyp/core.gypi" ])
 
-effects_gypi = exec_script("build/gypi_to_gn.py",
+effects_gypi = exec_script("//build/gypi_to_gn.py",
                            [
                              rebase_path("gyp/effects.gypi"),
                              "--replace=<(skia_include_path)=include",
@@ -94,7 +98,7 @@
                            "scope",
                            [ "gyp/effects.gypi" ])
 
-gpu_gypi = exec_script("build/gypi_to_gn.py",
+gpu_gypi = exec_script("//build/gypi_to_gn.py",
                        [
                          rebase_path("gyp/gpu.gypi"),
                          "--replace=<(skia_include_path)=include",
@@ -103,7 +107,7 @@
                        "scope",
                        [ "gyp/gpu.gypi" ])
 
-opts_gypi = exec_script("build/gypi_to_gn.py",
+opts_gypi = exec_script("//build/gypi_to_gn.py",
                         [
                           rebase_path("gyp/opts.gypi"),
                           "--replace=<(skia_include_path)=include",
@@ -112,7 +116,7 @@
                         "scope",
                         [ "gyp/opts.gypi" ])
 
-pdf_gypi = exec_script("build/gypi_to_gn.py",
+pdf_gypi = exec_script("//build/gypi_to_gn.py",
                        [
                          rebase_path("gyp/pdf.gypi"),
                          "--replace=<(skia_include_path)=include",
@@ -121,7 +125,7 @@
                        "scope",
                        [ "gyp/pdf.gypi" ])
 
-utils_gypi = exec_script("build/gypi_to_gn.py",
+utils_gypi = exec_script("//build/gypi_to_gn.py",
                          [
                            rebase_path("gyp/utils.gypi"),
                            "--replace=<(skia_include_path)=include",
@@ -163,7 +167,7 @@
     ":opts_avx",
     ":opts_sse41",
     ":opts_ssse3",
-    "third_party:zlib",
+    "//third_party/zlib",
   ]
 
   libs = []
@@ -239,6 +243,12 @@
     ]
     libs += [ "ApplicationServices.framework" ]
   }
+
+  if (is_fuchsia) {
+    sources += [
+      "src/ports/SkFontMgr_empty_factory.cpp",
+    ]
+  }
 }
 
 executable("example") {
diff --git a/include/core/SkPreConfig.h b/include/core/SkPreConfig.h
index c410c98..8c8eeef 100644
--- a/include/core/SkPreConfig.h
+++ b/include/core/SkPreConfig.h
@@ -30,8 +30,8 @@
         #define SK_BUILD_FOR_ANDROID
     #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || \
           defined(__OpenBSD__) || defined(__sun) || defined(__NetBSD__) || \
-          defined(__DragonFly__) || defined(__GLIBC__) || defined(__GNU__) || \
-          defined(__unix__)
+          defined(__DragonFly__) || defined(__Fuchsia__) || \
+          defined(__GLIBC__) || defined(__GNU__) || defined(__unix__)
         #define SK_BUILD_FOR_UNIX
     #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
         #define SK_BUILD_FOR_IOS
diff --git a/src/ports/SkOSFile_stdio.cpp b/src/ports/SkOSFile_stdio.cpp
index 915b87b..f008283 100644
--- a/src/ports/SkOSFile_stdio.cpp
+++ b/src/ports/SkOSFile_stdio.cpp
@@ -12,6 +12,10 @@
 #include <stdio.h>
 #include <sys/stat.h>
 
+#ifdef SK_BUILD_FOR_UNIX
+#include <unistd.h>
+#endif
+
 #ifdef _WIN32
 #include <direct.h>
 #include <io.h>
diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn
index 3ab094c..96837d2 100644
--- a/third_party/BUILD.gn
+++ b/third_party/BUILD.gn
@@ -3,8 +3,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-declare_args() {
-}
+import("third_party.gni")
 
 # Most third_party code should disable warnings: if we don't maintain the code, warnings are noise.
 config("no_warnings") {
@@ -12,42 +11,6 @@
 }
 third_party_configs = [ ":no_warnings" ]
 
-# Chrome's GN environment sets up a bunch of default configs we don't need/want here.
-unwanted_configs = [
-  "//build/config/clang:extra_warnings",
-  "//build/config/clang:find_bad_constructs",
-  "//build/config/compiler:chromium_code",
-  "//build/config:feature_flags",
-]
-
-config("zlib_public") {
-  include_dirs = [ "externals/zlib" ]
-}
-source_set("zlib") {
-  public_configs = [ ":zlib_public" ]
-  configs += third_party_configs
-  configs -= unwanted_configs
-
-  sources = [
-    "externals/zlib/adler32.c",
-    "externals/zlib/compress.c",
-    "externals/zlib/crc32.c",
-    "externals/zlib/deflate.c",
-    "externals/zlib/gzclose.c",
-    "externals/zlib/gzlib.c",
-    "externals/zlib/gzread.c",
-    "externals/zlib/gzwrite.c",
-    "externals/zlib/infback.c",
-    "externals/zlib/inffast.c",
-    "externals/zlib/inflate.c",
-    "externals/zlib/inftrees.c",
-    "externals/zlib/simd_stub.c",
-    "externals/zlib/trees.c",
-    "externals/zlib/uncompr.c",
-    "externals/zlib/zutil.c",
-  ]
-}
-
 config("libpng_public") {
   include_dirs = [ "libpng" ]
 }
diff --git a/third_party/third_party.gni b/third_party/third_party.gni
new file mode 100644
index 0000000..813ee38
--- /dev/null
+++ b/third_party/third_party.gni
@@ -0,0 +1,15 @@
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+declare_args() {
+}
+
+# Chrome's GN environment sets up a bunch of default configs we don't need/want here.
+unwanted_configs = [
+  "//build/config/clang:extra_warnings",
+  "//build/config/clang:find_bad_constructs",
+  "//build/config/compiler:chromium_code",
+  "//build/config:feature_flags",
+]
diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn
new file mode 100644
index 0000000..0fff083
--- /dev/null
+++ b/third_party/zlib/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("../third_party.gni")
+
+config("zlib_public") {
+  include_dirs = [ "../externals/zlib" ]
+}
+source_set("zlib") {
+  public_configs = [ ":zlib_public" ]
+  configs -= unwanted_configs
+
+  cflags = [ "-w" ]
+
+  sources = [
+    "../externals/zlib/adler32.c",
+    "../externals/zlib/compress.c",
+    "../externals/zlib/crc32.c",
+    "../externals/zlib/deflate.c",
+    "../externals/zlib/gzclose.c",
+    "../externals/zlib/gzlib.c",
+    "../externals/zlib/gzread.c",
+    "../externals/zlib/gzwrite.c",
+    "../externals/zlib/infback.c",
+    "../externals/zlib/inffast.c",
+    "../externals/zlib/inflate.c",
+    "../externals/zlib/inftrees.c",
+    "../externals/zlib/simd_stub.c",
+    "../externals/zlib/trees.c",
+    "../externals/zlib/uncompr.c",
+    "../externals/zlib/zutil.c",
+  ]
+}