Import Cobalt 21.master.0.260628
diff --git a/src/starboard/evergreen/arm/__init__.py b/src/starboard/evergreen/arm/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/evergreen/arm/__init__.py
diff --git a/src/starboard/evergreen/arm/hardfp/__init__.py b/src/starboard/evergreen/arm/hardfp/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/__init__.py
diff --git a/src/starboard/evergreen/arm/hardfp/atomic_public.h b/src/starboard/evergreen/arm/hardfp/atomic_public.h
new file mode 100644
index 0000000..d9786c1
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/atomic_public.h
@@ -0,0 +1,21 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_EVERGREEN_ARM_HARDFP_ATOMIC_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_HARDFP_ATOMIC_PUBLIC_H_
+
+#include "starboard/atomic.h"
+#include "starboard/shared/gcc/atomic_gcc_public.h"
+
+#endif  // STARBOARD_EVERGREEN_ARM_HARDFP_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/evergreen/arm/hardfp/configuration_public.h b/src/starboard/evergreen/arm/hardfp/configuration_public.h
new file mode 100644
index 0000000..b813c19
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/configuration_public.h
@@ -0,0 +1,200 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The Starboard configuration for X86_64. Other devices will have
+// specific Starboard implementations.
+
+// Other source files should never include this header directly, but should
+// include the generic "starboard/configuration.h" instead.
+
+#ifndef STARBOARD_EVERGREEN_ARM_HARDFP_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_HARDFP_CONFIGURATION_PUBLIC_H_
+
+// --- System Header Configuration -------------------------------------------
+
+// Any system headers listed here that are not provided by the platform will be
+// emulated in starboard/types.h.
+
+// Whether the current platform provides the standard header stdarg.h.
+#define SB_HAS_STDARG_H 1
+
+// Whether the current platform provides the standard header stdbool.h.
+#define SB_HAS_STDBOOL_H 1
+
+// Whether the current platform provides the standard header stddef.h.
+#define SB_HAS_STDDEF_H 1
+
+// Whether the current platform provides the standard header stdint.h.
+#define SB_HAS_STDINT_H 1
+
+// Whether the current platform provides the standard header inttypes.h.
+#define SB_HAS_INTTYPES_H 1
+
+// Whether the current platform provides the standard header sys/types.h.
+#define SB_HAS_SYS_TYPES_H 1
+
+// Whether the current platform provides the standard header wchar.h.
+#define SB_HAS_WCHAR_H 1
+
+// Whether the current platform provides the standard header limits.h.
+#define SB_HAS_LIMITS_H 1
+
+// Whether the current platform provides the standard header float.h.
+#define SB_HAS_FLOAT_H 1
+
+// Whether the current platform provides ssize_t.
+#define SB_HAS_SSIZE_T 1
+
+// Type detection for wchar_t.
+#if defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
+#define SB_IS_WCHAR_T_UTF32 1
+#elif defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff)
+#define SB_IS_WCHAR_T_UTF16 1
+#endif
+
+// Chrome only defines these two if ARMEL or MIPSEL are defined.
+#if defined(__ARMEL__)
+// Chrome has an exclusion for iOS here, we should too when we support iOS.
+#define SB_IS_WCHAR_T_UNSIGNED 1
+#elif defined(__MIPSEL__)
+#define SB_IS_WCHAR_T_SIGNED 1
+#endif
+
+// --- Compiler Configuration ------------------------------------------------
+
+// The platform's annotation for forcing a C function to be inlined.
+#define SB_C_FORCE_INLINE __inline__ __attribute__((always_inline))
+
+// The platform's annotation for marking a C function as suggested to be
+// inlined.
+#define SB_C_INLINE inline
+
+// The platform's annotation for marking a C function as forcibly not
+// inlined.
+#define SB_C_NOINLINE __attribute__((noinline))
+
+// The platform's annotation for marking a symbol as exported outside of the
+// current shared library.
+#define SB_EXPORT_PLATFORM __attribute__((visibility("default")))
+
+// The platform's annotation for marking a symbol as imported from outside of
+// the current linking unit.
+#define SB_IMPORT_PLATFORM
+
+// --- Extensions Configuration ----------------------------------------------
+
+// Do not use <unordered_map> and <unordered_set> for the hash table types.
+#define SB_HAS_STD_UNORDERED_HASH 0
+
+// GCC/Clang doesn't define a long long hash function, except for Android and
+// Game consoles.
+#define SB_HAS_LONG_LONG_HASH 0
+
+// GCC/Clang doesn't define a string hash function, except for Game Consoles.
+#define SB_HAS_STRING_HASH 0
+
+// Desktop Linux needs a using statement for the hash functions.
+#define SB_HAS_HASH_USING 0
+
+// Set this to 1 if hash functions for custom types can be defined as a
+// hash_value() function. Otherwise, they need to be placed inside a
+// partially-specified hash struct template with an operator().
+#define SB_HAS_HASH_VALUE 0
+
+// Set this to 1 if use of hash_map or hash_set causes a deprecation warning
+// (which then breaks the build).
+#define SB_HAS_HASH_WARNING 1
+
+// The location to include hash_map on this platform.
+#define SB_HASH_MAP_INCLUDE <ext/hash_map>
+
+// C++'s hash_map and hash_set are often found in different namespaces depending
+// on the compiler.
+#define SB_HASH_NAMESPACE __gnu_cxx
+
+// The location to include hash_set on this platform.
+#define SB_HASH_SET_INCLUDE <ext/hash_set>
+
+// Define this to how this platform copies varargs blocks.
+#define SB_VA_COPY(dest, source) va_copy(dest, source)
+
+// --- Graphics Configuration ------------------------------------------------
+
+// Specifies whether this platform supports a performant accelerated blitter
+// API. The basic requirement is a scaled, clipped, alpha-blended blit.
+#define SB_HAS_BLITTER 0
+
+// Indicates whether or not the given platform supports bilinear filtering.
+// This can be checked to enable/disable renderer tests that verify that this is
+// working properly.
+#define SB_HAS_BILINEAR_FILTERING_SUPPORT 1
+
+// Indicates whether or not the given platform supports rendering of NV12
+// textures. These textures typically originate from video decoders.
+#define SB_HAS_NV12_TEXTURE_SUPPORT 1
+
+// --- I/O Configuration -----------------------------------------------------
+
+// Whether the current platform implements the on screen keyboard interface.
+#define SB_HAS_ON_SCREEN_KEYBOARD 0
+
+// Whether the current platform has speech recognizer.
+#define SB_HAS_SPEECH_RECOGNIZER 0
+
+// Whether the current platform has speech synthesis.
+#define SB_HAS_SPEECH_SYNTHESIS 0
+
+// --- Decoder-only Params ---
+
+// --- Memory Configuration --------------------------------------------------
+
+// Whether this platform has and should use an MMAP function to map physical
+// memory to the virtual address space.
+#if SB_API_VERSION < SB_MMAP_REQUIRED_VERSION
+#define SB_HAS_MMAP 1
+#endif
+
+// Whether this platform can map executable memory. Implies SB_HAS_MMAP. This is
+// required for platforms that want to JIT.
+#define SB_CAN_MAP_EXECUTABLE_MEMORY 1
+
+// --- Network Configuration -------------------------------------------------
+
+// Specifies whether this platform supports IPV6.
+#define SB_HAS_IPV6 1
+
+// Specifies whether this platform supports pipe.
+#define SB_HAS_PIPE 1
+
+// --- Thread Configuration --------------------------------------------------
+
+// --- Timing API ------------------------------------------------------------
+
+// Whether this platform has an API to retrieve how long the current thread
+// has spent in the executing state.
+#define SB_HAS_TIME_THREAD_NOW 1
+
+// --- Tuneable Parameters ---------------------------------------------------
+
+// --- User Configuration ----------------------------------------------------
+
+// --- Platform Specific Audits ----------------------------------------------
+
+#if !defined(__GNUC__)
+#error "Evergreen-arm builds need a GCC-like compiler (for the moment)."
+#endif
+
+#endif  // STARBOARD_EVERGREEN_ARM_HARDFP_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/evergreen/arm/hardfp/gyp_configuration.gypi b/src/starboard/evergreen/arm/hardfp/gyp_configuration.gypi
new file mode 100644
index 0000000..4ba76c1
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/gyp_configuration.gypi
@@ -0,0 +1,42 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'variables': {
+    'sb_target_platform': 'evergreen-arm-hardfp',
+  },
+  'target_defaults': {
+    'default_configuration': 'evergreen-arm-hardfp_debug',
+    'configurations': {
+      'evergreen-arm-hardfp_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'evergreen-arm-hardfp_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'evergreen-arm-hardfp_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'evergreen-arm-hardfp_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+  'includes': [
+    '<(DEPTH)/starboard/evergreen/arm/shared/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/evergreen/arm/hardfp/gyp_configuration.py b/src/starboard/evergreen/arm/hardfp/gyp_configuration.py
new file mode 100644
index 0000000..467ce05
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/gyp_configuration.py
@@ -0,0 +1,25 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+"""Starboard evergreen-arm-hardfp platform configuration for gyp_cobalt."""
+
+from starboard.evergreen.arm.shared import gyp_configuration as parent_configuration
+
+
+def CreatePlatformConfig():
+  return parent_configuration.EvergreenArmConfiguration(
+      'evergreen-arm-hardfp',
+      sabi_json_path='starboard/sabi/arm/hardfp/sabi.json')
diff --git a/src/starboard/evergreen/arm/hardfp/starboard_platform.gyp b/src/starboard/evergreen/arm/hardfp/starboard_platform.gyp
new file mode 100644
index 0000000..8787f61
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/starboard_platform.gyp
@@ -0,0 +1,25 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/evergreen/shared/starboard_platform.gyp',
+  ],
+}
+
diff --git a/src/starboard/evergreen/arm/hardfp/thread_types_public.h b/src/starboard/evergreen/arm/hardfp/thread_types_public.h
new file mode 100644
index 0000000..fda18eb
--- /dev/null
+++ b/src/starboard/evergreen/arm/hardfp/thread_types_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_EVERGREEN_ARM_HARDFP_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_HARDFP_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/shared/pthread/types_public.h"
+
+#endif  // STARBOARD_EVERGREEN_ARM_HARDFP_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/evergreen/arm/shared/__init__.py b/src/starboard/evergreen/arm/shared/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/__init__.py
diff --git a/src/starboard/evergreen/arm/shared/cobalt/__init__.py b/src/starboard/evergreen/arm/shared/cobalt/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/cobalt/__init__.py
diff --git a/src/starboard/evergreen/arm/shared/cobalt/configuration.gypi b/src/starboard/evergreen/arm/shared/cobalt/configuration.gypi
new file mode 100644
index 0000000..89aca9a
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/cobalt/configuration.gypi
@@ -0,0 +1,21 @@
+# Copyright 2020 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Cobalt Evergreen ARM specific configuration.
+
+{
+  'variables': {
+    'in_app_dial%': 0,
+  }, # end of variables
+}
diff --git a/src/starboard/evergreen/arm/shared/cobalt/configuration.py b/src/starboard/evergreen/arm/shared/cobalt/configuration.py
new file mode 100644
index 0000000..0d71086
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/cobalt/configuration.py
@@ -0,0 +1,83 @@
+# Copyright 2020 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Starboard Cobalt Evergreen ARM configuration."""
+
+import os
+
+from cobalt.build import cobalt_configuration
+from starboard.tools.testing import test_filter
+
+
+class CobaltARMConfiguration(cobalt_configuration.CobaltConfiguration):
+  """Starboard Cobalt Evergreen ARM configuration."""
+
+  def __init__(self, platform_configuration, application_name,
+               application_directory):
+    super(CobaltARMConfiguration,
+          self).__init__(platform_configuration, application_name,
+                         application_directory)
+
+  def GetPostIncludes(self):
+    # If there isn't a configuration.gypi found in the usual place, we'll
+    # supplement with our shared implementation.
+    includes = super(CobaltARMConfiguration, self).GetPostIncludes()
+    for include in includes:
+      if os.path.basename(include) == 'configuration.gypi':
+        return includes
+
+    shared_gypi_path = os.path.join(
+        os.path.dirname(__file__), 'configuration.gypi')
+    if os.path.isfile(shared_gypi_path):
+      includes.append(shared_gypi_path)
+    return includes
+
+  def WebdriverBenchmarksEnabled(self):
+    return True
+
+  def GetTestFilters(self):
+    filters = super(CobaltARMConfiguration, self).GetTestFilters()
+    for target, tests in self.__FILTERED_TESTS.iteritems():
+      filters.extend(test_filter.TestFilter(target, test) for test in tests)
+    return filters
+
+  def GetWebPlatformTestFilters(self):
+    filters = super(CobaltARMConfiguration, self).GetWebPlatformTestFilters()
+    filters += [
+        ('csp/WebPlatformTest.Run/'
+         'content_security_policy_media_src_media_src_allowed_html'),
+        ('websockets/WebPlatformTest.Run/websockets_*'),
+    ]
+    return filters
+
+  def GetTestEnvVariables(self):
+    return {
+        'base_unittests': {
+            'ASAN_OPTIONS': 'detect_leaks=0'
+        },
+        'crypto_unittests': {
+            'ASAN_OPTIONS': 'detect_leaks=0'
+        },
+        'net_unittests': {
+            'ASAN_OPTIONS': 'detect_leaks=0'
+        }
+    }
+
+  __FILTERED_TESTS = {
+      'base_unittests': [test_filter.FILTER_ALL],
+      'bindings_test': ['DateBindingsTest.PosixEpoch'],
+      'net_unittests': [test_filter.FILTER_ALL],
+      'renderer_test': [
+          'PixelTest.CircularSubPixelBorder', 'PixelTest.FilterBlurred100PxText'
+      ],
+  }
diff --git a/src/starboard/evergreen/arm/shared/gyp_configuration.gypi b/src/starboard/evergreen/arm/shared/gyp_configuration.gypi
new file mode 100644
index 0000000..404d3a3
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/gyp_configuration.gypi
@@ -0,0 +1,50 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'variables': {
+    'yasm_exists': 1,
+
+    'compiler_flags': [
+      '-isystem<(cobalt_repo_root)/third_party/musl/arch/arm',
+
+      # Force char to be signed.
+      '-fsigned-char',
+    ],
+
+    'linker_flags': [
+      '-fuse-ld=lld',
+    ],
+  },
+  'target_defaults': {
+    'defines' : [
+      # Ensure that the Starboardized __external_threading file is included.
+      '_LIBCPP_HAS_THREAD_API_EXTERNAL',
+
+      # Ensure that only the forward declarations and type definitions are included
+      # in __external_threading.
+      '_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL',
+
+      # Enable GNU extensions to get prototypes like ffsl.
+      '_GNU_SOURCE=1',
+    ],
+  },
+  'includes': [
+    '<(DEPTH)/starboard/evergreen/shared/compiler_flags.gypi',
+    '<(DEPTH)/starboard/evergreen/shared/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/evergreen/arm/shared/gyp_configuration.py b/src/starboard/evergreen/arm/shared/gyp_configuration.py
new file mode 100644
index 0000000..d442333
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/gyp_configuration.py
@@ -0,0 +1,103 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Starboard Evergreen ARM shared platform configuration for gyp_cobalt."""
+
+import os.path
+
+from starboard.build import clang as clang_build
+from starboard.evergreen.shared import gyp_configuration as shared_configuration
+from starboard.tools import build
+from starboard.tools.testing import test_filter
+from starboard.tools.toolchain import ar
+from starboard.tools.toolchain import bash
+from starboard.tools.toolchain import clang
+from starboard.tools.toolchain import clangxx
+from starboard.tools.toolchain import cp
+from starboard.tools.toolchain import evergreen_linker
+from starboard.tools.toolchain import touch
+
+
+class EvergreenArmConfiguration(shared_configuration.EvergreenConfiguration):
+  """Starboard Evergreen ARM platform configuration."""
+
+  def __init__(self,
+               platform_name='evergreen-arm',
+               asan_enabled_by_default=False,
+               goma_supports_compiler=True,
+               sabi_json_path=None):
+    # pylint: disable=useless-super-delegation
+    super(EvergreenArmConfiguration,
+          self).__init__(platform_name, asan_enabled_by_default,
+                         goma_supports_compiler, sabi_json_path)
+    self.AppendApplicationConfigurationPath(os.path.dirname(__file__))
+    self._host_toolchain = None
+
+  def GetTargetToolchain(self):
+    return self.GetHostToolchain()
+
+  def GetHostToolchain(self):
+    if not self._host_toolchain:
+      if not hasattr(self, 'host_compiler_environment'):
+        self.host_compiler_environment = build.GetHostCompilerEnvironment(
+            clang_build.GetClangSpecification(), False)
+      cc_path = self.host_compiler_environment['CC_host']
+      cxx_path = self.host_compiler_environment['CXX_host']
+
+      # Takes the provided value of CXX_HOST with a prepended 'gomacc' and an
+      # appended 'bin/clang++' and strips them off, leaving us with an absolute
+      # path to the root directory of our toolchain.
+      begin_path_index = cxx_path.find('/')
+      end_path_index = cxx_path.rfind('/', 0, cxx_path.rfind('/')) + 1
+
+      cxx_path_root = cxx_path[begin_path_index:end_path_index]
+
+      self._host_toolchain = [
+          clang.CCompiler(path=cc_path),
+          clang.CxxCompiler(path=cxx_path),
+          clang.AssemblerWithCPreprocessor(path=cc_path),
+          ar.StaticThinLinker(),
+          ar.StaticLinker(),
+          clangxx.ExecutableLinker(path=cxx_path),
+          evergreen_linker.SharedLibraryLinker(
+              path=cxx_path_root, extra_flags=['-m armelf']),
+          cp.Copy(),
+          touch.Stamp(),
+          bash.Shell(),
+      ]
+    return self._host_toolchain
+
+  def GetTestFilters(self):
+    filters = super(EvergreenArmConfiguration, self).GetTestFilters()
+    for target, tests in self.__FILTERED_TESTS.iteritems():
+      filters.extend(test_filter.TestFilter(target, test) for test in tests)
+    return filters
+
+  def GetVariables(self, configuration):
+    variables = super(EvergreenArmConfiguration, self).GetVariables(configuration)
+    variables.update({
+        'include_path_platform_deploy_gypi':
+            'starboard/evergreen/arm/shared/platform_deploy.gypi',
+    })
+    return variables
+
+  __FILTERED_TESTS = {  # pylint: disable=invalid-name
+      'nplb': ['SbSystemGetStackTest.SunnyDayStackDirection',
+               'SbSystemGetStackTest.SunnyDay',
+               'SbSystemGetStackTest.SunnyDayShortStack',
+               'SbSystemSymbolizeTest.SunnyDay'],
+  }
+
+
+def CreatePlatformConfig():
+  return EvergreenArmConfiguration()
diff --git a/src/starboard/evergreen/arm/shared/platform_deploy.gypi b/src/starboard/evergreen/arm/shared/platform_deploy.gypi
new file mode 100644
index 0000000..fef9168
--- /dev/null
+++ b/src/starboard/evergreen/arm/shared/platform_deploy.gypi
@@ -0,0 +1,37 @@
+# Copyright 2020 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'variables': {
+    'deploy_executable_file': '<(target_deploy_dir)/lib/lib<(executable_name).so',
+    'executable_file': '<(PRODUCT_DIR)/lib/lib<(executable_name).so',
+  },
+  'includes': [ '<(DEPTH)/starboard/build/collect_deploy_content.gypi' ],
+  'actions': [
+    {
+      'action_name': 'deploy_executable',
+      'message': 'Strip executable: <(deploy_executable_file)',
+      'inputs': [
+        '<(executable_file)',
+        '<(content_deploy_stamp_file)',
+      ],
+      'outputs': [ '<(deploy_executable_file)' ],
+      'action': [
+        'arm-linux-gnueabi-strip',
+        '-o', '<(deploy_executable_file)',
+        '<(executable_file)',
+      ],
+    },
+  ],
+}
diff --git a/src/starboard/evergreen/arm/softfp/__init__.py b/src/starboard/evergreen/arm/softfp/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/__init__.py
diff --git a/src/starboard/evergreen/arm/softfp/atomic_public.h b/src/starboard/evergreen/arm/softfp/atomic_public.h
new file mode 100644
index 0000000..48e2e37
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/atomic_public.h
@@ -0,0 +1,21 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_EVERGREEN_ARM_SOFTFP_ATOMIC_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_SOFTFP_ATOMIC_PUBLIC_H_
+
+#include "starboard/atomic.h"
+#include "starboard/shared/gcc/atomic_gcc_public.h"
+
+#endif  // STARBOARD_EVERGREEN_ARM_SOFTFP_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/evergreen/arm/softfp/configuration_public.h b/src/starboard/evergreen/arm/softfp/configuration_public.h
new file mode 100644
index 0000000..1743bba
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/configuration_public.h
@@ -0,0 +1,203 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The Starboard configuration for X86_64. Other devices will have
+// specific Starboard implementations.
+
+// Other source files should never include this header directly, but should
+// include the generic "starboard/configuration.h" instead.
+
+#ifndef STARBOARD_EVERGREEN_ARM_SOFTFP_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_SOFTFP_CONFIGURATION_PUBLIC_H_
+
+// --- System Header Configuration -------------------------------------------
+
+// Any system headers listed here that are not provided by the platform will be
+// emulated in starboard/types.h.
+
+// Whether the current platform provides the standard header stdarg.h.
+#define SB_HAS_STDARG_H 1
+
+// Whether the current platform provides the standard header stdbool.h.
+#define SB_HAS_STDBOOL_H 1
+
+// Whether the current platform provides the standard header stddef.h.
+#define SB_HAS_STDDEF_H 1
+
+// Whether the current platform provides the standard header stdint.h.
+#define SB_HAS_STDINT_H 1
+
+// Whether the current platform provides the standard header inttypes.h.
+#define SB_HAS_INTTYPES_H 1
+
+// Whether the current platform provides the standard header sys/types.h.
+#define SB_HAS_SYS_TYPES_H 1
+
+// Whether the current platform provides the standard header wchar.h.
+#define SB_HAS_WCHAR_H 1
+
+// Whether the current platform provides the standard header limits.h.
+#define SB_HAS_LIMITS_H 1
+
+// Whether the current platform provides the standard header float.h.
+#define SB_HAS_FLOAT_H 1
+
+// Whether the current platform provides ssize_t.
+#define SB_HAS_SSIZE_T 1
+
+// Type detection for wchar_t.
+#if defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
+#define SB_IS_WCHAR_T_UTF32 1
+#elif defined(__WCHAR_MAX__) && \
+    (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff)
+#define SB_IS_WCHAR_T_UTF16 1
+#endif
+
+// Chrome only defines these two if ARMEL or MIPSEL are defined.
+#if defined(__ARMEL__)
+// Chrome has an exclusion for iOS here, we should too when we support iOS.
+#define SB_IS_WCHAR_T_UNSIGNED 1
+#elif defined(__MIPSEL__)
+#define SB_IS_WCHAR_T_SIGNED 1
+#endif
+
+// --- Compiler Configuration ------------------------------------------------
+
+// The platform's annotation for forcing a C function to be inlined.
+#define SB_C_FORCE_INLINE __inline__ __attribute__((always_inline))
+
+// The platform's annotation for marking a C function as suggested to be
+// inlined.
+#define SB_C_INLINE inline
+
+// The platform's annotation for marking a C function as forcibly not
+// inlined.
+#define SB_C_NOINLINE __attribute__((noinline))
+
+// The platform's annotation for marking a symbol as exported outside of the
+// current shared library.
+#define SB_EXPORT_PLATFORM __attribute__((visibility("default")))
+
+// The platform's annotation for marking a symbol as imported from outside of
+// the current linking unit.
+#define SB_IMPORT_PLATFORM
+
+// --- Extensions Configuration ----------------------------------------------
+
+// Do not use <unordered_map> and <unordered_set> for the hash table types.
+#define SB_HAS_STD_UNORDERED_HASH 0
+
+// GCC/Clang doesn't define a long long hash function, except for Android and
+// Game consoles.
+#define SB_HAS_LONG_LONG_HASH 0
+
+// GCC/Clang doesn't define a string hash function, except for Game Consoles.
+#define SB_HAS_STRING_HASH 0
+
+// Desktop Linux needs a using statement for the hash functions.
+#define SB_HAS_HASH_USING 0
+
+// Set this to 1 if hash functions for custom types can be defined as a
+// hash_value() function. Otherwise, they need to be placed inside a
+// partially-specified hash struct template with an operator().
+#define SB_HAS_HASH_VALUE 0
+
+// Set this to 1 if use of hash_map or hash_set causes a deprecation warning
+// (which then breaks the build).
+#define SB_HAS_HASH_WARNING 1
+
+// The location to include hash_map on this platform.
+#define SB_HASH_MAP_INCLUDE <ext/hash_map>
+
+// C++'s hash_map and hash_set are often found in different namespaces depending
+// on the compiler.
+#define SB_HASH_NAMESPACE __gnu_cxx
+
+// The location to include hash_set on this platform.
+#define SB_HASH_SET_INCLUDE <ext/hash_set>
+
+// Define this to how this platform copies varargs blocks.
+#define SB_VA_COPY(dest, source) va_copy(dest, source)
+
+// --- Graphics Configuration ------------------------------------------------
+
+// Specifies whether this platform supports a performant accelerated blitter
+// API. The basic requirement is a scaled, clipped, alpha-blended blit.
+#define SB_HAS_BLITTER 0
+
+// Indicates whether or not the given platform supports bilinear filtering.
+// This can be checked to enable/disable renderer tests that verify that this is
+// working properly.
+#define SB_HAS_BILINEAR_FILTERING_SUPPORT 1
+
+// Indicates whether or not the given platform supports rendering of NV12
+// textures. These textures typically originate from video decoders.
+#define SB_HAS_NV12_TEXTURE_SUPPORT 1
+
+// --- I/O Configuration -----------------------------------------------------
+
+// Whether the current platform has microphone supported.
+#define SB_HAS_MICROPHONE 0
+
+// Whether the current platform implements the on screen keyboard interface.
+#define SB_HAS_ON_SCREEN_KEYBOARD 0
+
+// Whether the current platform has speech recognizer.
+#define SB_HAS_SPEECH_RECOGNIZER 0
+
+// Whether the current platform has speech synthesis.
+#define SB_HAS_SPEECH_SYNTHESIS 0
+
+// --- Decoder-only Params ---
+
+// --- Memory Configuration --------------------------------------------------
+
+// Whether this platform has and should use an MMAP function to map physical
+// memory to the virtual address space.
+#if SB_API_VERSION < SB_MMAP_REQUIRED_VERSION
+#define SB_HAS_MMAP 1
+#endif
+
+// Whether this platform can map executable memory. Implies SB_HAS_MMAP. This is
+// required for platforms that want to JIT.
+#define SB_CAN_MAP_EXECUTABLE_MEMORY 1
+
+// --- Network Configuration -------------------------------------------------
+
+// Specifies whether this platform supports IPV6.
+#define SB_HAS_IPV6 1
+
+// Specifies whether this platform supports pipe.
+#define SB_HAS_PIPE 1
+
+// --- Thread Configuration --------------------------------------------------
+
+// --- Timing API ------------------------------------------------------------
+
+// Whether this platform has an API to retrieve how long the current thread
+// has spent in the executing state.
+#define SB_HAS_TIME_THREAD_NOW 1
+
+// --- Tuneable Parameters ---------------------------------------------------
+
+// --- User Configuration ----------------------------------------------------
+
+// --- Platform Specific Audits ----------------------------------------------
+
+#if !defined(__GNUC__)
+#error "Evergreen-arm builds need a GCC-like compiler (for the moment)."
+#endif
+
+#endif  // STARBOARD_EVERGREEN_ARM_SOFTFP_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/evergreen/arm/softfp/gyp_configuration.gypi b/src/starboard/evergreen/arm/softfp/gyp_configuration.gypi
new file mode 100644
index 0000000..cd963f7
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/gyp_configuration.gypi
@@ -0,0 +1,42 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'variables': {
+    'sb_target_platform': 'evergreen-arm-softfp',
+  },
+  'target_defaults': {
+    'default_configuration': 'evergreen-arm-softfp_debug',
+    'configurations': {
+      'evergreen-arm-softfp_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'evergreen-arm-softfp_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'evergreen-arm-softfp_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'evergreen-arm-softfp_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+  'includes': [
+    '<(DEPTH)/starboard/evergreen/arm/shared/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/evergreen/arm/softfp/gyp_configuration.py b/src/starboard/evergreen/arm/softfp/gyp_configuration.py
new file mode 100644
index 0000000..8c649b9
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/gyp_configuration.py
@@ -0,0 +1,25 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+"""Starboard evergreen-arm-softfp platform configuration for gyp_cobalt."""
+
+from starboard.evergreen.arm.shared import gyp_configuration as parent_configuration
+
+
+def CreatePlatformConfig():
+  return parent_configuration.EvergreenArmConfiguration(
+      'evergreen-arm-softfp',
+      sabi_json_path='starboard/sabi/arm/softfp/sabi.json')
diff --git a/src/starboard/evergreen/arm/softfp/starboard_platform.gyp b/src/starboard/evergreen/arm/softfp/starboard_platform.gyp
new file mode 100644
index 0000000..8787f61
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/starboard_platform.gyp
@@ -0,0 +1,25 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/evergreen/shared/starboard_platform.gyp',
+  ],
+}
+
diff --git a/src/starboard/evergreen/arm/softfp/thread_types_public.h b/src/starboard/evergreen/arm/softfp/thread_types_public.h
new file mode 100644
index 0000000..d739119
--- /dev/null
+++ b/src/starboard/evergreen/arm/softfp/thread_types_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_EVERGREEN_ARM_SOFTFP_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_EVERGREEN_ARM_SOFTFP_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/shared/pthread/types_public.h"
+
+#endif  // STARBOARD_EVERGREEN_ARM_SOFTFP_THREAD_TYPES_PUBLIC_H_