Make nanobench and dm be usable from Chromium build

Move the app logic for each app as follows:

<app>.cpp -- the file which contains main(). Embedders that compile
their own apps, such as ios shell, upcoming Chromium dm etc, do not use this.

<app>_main.cpp -- the main logic of the Skia test application. This will be
used by Skia -compiled apps as well as embedder -compiled apps.

<app>_main.h -- the API for the main logic. This will be
used by Skia -compiled apps as well as embedder -compiled apps.

This way (the upcoming) Chromium dm can setup its Chromium-specific setup
in custom main(), and then call dm_main(), without the need of any
SK_BUILD_FOR_XXXX defines controlling whether the tool defines main or not.

BUG=skia:2992

Review URL: https://codereview.chromium.org/657373002
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 1f5ae60..baa109e 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -572,9 +572,7 @@
     int fCurrentSKP;
 };
 
-int nanobench_main();
 int nanobench_main() {
-    SetupCrashHandler();
     SkAutoGraphics ag;
 
 #if SK_SUPPORT_GPU
@@ -752,9 +750,3 @@
     return 0;
 }
 
-#if !defined SK_BUILD_FOR_IOS
-int main(int argc, char** argv) {
-    SkCommandLineFlags::Parse(argc, argv);
-    return nanobench_main();
-}
-#endif
diff --git a/bench/nanobench.h b/bench/nanobench.h
new file mode 100644
index 0000000..4616747
--- /dev/null
+++ b/bench/nanobench.h
@@ -0,0 +1,13 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#ifndef nanobench_DEFINED
+#define nanobench_DEFINED
+
+// API for nanobench app.
+int nanobench_main();
+
+#endif
diff --git a/bench/nanobench_main.cpp b/bench/nanobench_main.cpp
new file mode 100644
index 0000000..a598adc
--- /dev/null
+++ b/bench/nanobench_main.cpp
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#include "CrashHandler.h"
+#include "SkCommandLineFlags.h"
+#include "nanobench.h"
+
+int main(int argc, char * const argv[]) {
+    SetupCrashHandler();
+    SkCommandLineFlags::Parse(argc, const_cast<char**>(argv));
+    return nanobench_main();
+
+}
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 52c86d5..08a4587 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -1,7 +1,6 @@
 // Main binary for DM.
 // For a high-level overview, please see dm/README.
 
-#include "CrashHandler.h"
 #include "LazyDecodeBitmap.h"
 #include "SkCommonFlags.h"
 #include "SkForceLinking.h"
@@ -187,9 +186,7 @@
     }
 }
 
-int dm_main();
 int dm_main() {
-    SetupCrashHandler();
     SkAutoGraphics ag;
     SkTaskGroup::Enabler enabled(FLAGS_threads);
 
@@ -244,10 +241,3 @@
     report_failures(failures);
     return failures.count() > 0;
 }
-
-#if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
-int main(int argc, char** argv) {
-    SkCommandLineFlags::Parse(argc, argv);
-    return dm_main();
-}
-#endif
diff --git a/dm/dm.h b/dm/dm.h
new file mode 100644
index 0000000..99b6e10
--- /dev/null
+++ b/dm/dm.h
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#ifndef dm_DEFINED
+#define dm_DEFINED
+
+// API for dm app.
+
+int dm_main();
+
+#endif
diff --git a/dm/dm_main.cpp b/dm/dm_main.cpp
new file mode 100644
index 0000000..ac8e0f3
--- /dev/null
+++ b/dm/dm_main.cpp
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "CrashHandler.h"
+#include "SkCommandLineFlags.h"
+#include "dm.h"
+
+int main(int argc, char * const argv[]) {
+    SetupCrashHandler();
+    SkCommandLineFlags::Parse(argc, const_cast<char**>(argv));
+    return dm_main();
+}
diff --git a/gyp/bench.gyp b/gyp/bench.gyp
index 26849d5..e91c4f2 100644
--- a/gyp/bench.gyp
+++ b/gyp/bench.gyp
@@ -13,6 +13,7 @@
         '../bench/GMBench.cpp',
         '../bench/RecordingBench.cpp',
         '../bench/SKPBench.cpp',
+        '../bench/nanobench_main.cpp',
         '../bench/nanobench.cpp',
       ],
       'includes': [
diff --git a/gyp/dm.gyp b/gyp/dm.gyp
index e4d6bd6..0e5eebd 100644
--- a/gyp/dm.gyp
+++ b/gyp/dm.gyp
@@ -8,6 +8,9 @@
         'includes': [
           'dm.gypi',
         ],
+        'sources': [
+          '../dm/dm_main.cpp',
+        ],
         'conditions': [
           ['skia_android_framework', {
               'libraries': [ '-lskia' ],
diff --git a/gyp/most.gyp b/gyp/most.gyp
index e22629a..61efe1e 100644
--- a/gyp/most.gyp
+++ b/gyp/most.gyp
@@ -29,7 +29,7 @@
           'dependencies': [ 'android_system.gyp:SampleApp_APK' ],
         }],
         ['skia_os == "ios"', {
-          'dependencies!': [ 'SampleApp.gyp:SampleApp' ],
+          'dependencies!': [ 'SampleApp.gyp:SampleApp', 'dm.gyp:dm', 'bench.gyp:*' ],
           'dependencies': ['iOSShell.gyp:iOSShell' ],
         }],
         ['skia_os == "mac" or skia_os == "linux"', {
diff --git a/tools/iOSShell.cpp b/tools/iOSShell.cpp
index 8656e64..99d5ebd 100644
--- a/tools/iOSShell.cpp
+++ b/tools/iOSShell.cpp
@@ -13,6 +13,8 @@
 #include "SkCommonFlags.h"
 #include "SkGraphics.h"
 #include "SkWindow.h"
+#include "dm.h"
+#include "nanobench.h"
 #include "sk_tool_utils.h"
 
 //////////////////////////////////////////////////////////////////////////////
@@ -56,9 +58,6 @@
 DEFINE_bool(dm, false, "run dm");
 DEFINE_bool(nanobench, false, "run nanobench");
 
-int nanobench_main();
-int dm_main();
-
 IOS_launch_type set_cmd_line_args(int argc, char *argv[], const char* resourceDir) {
     SkCommandLineFlags::Parse(argc, argv);
     SetResourcePath(resourceDir);