add linux wayland platform this make cobalt run with wayland on Ubuntu 17.10 or any other Ubuntus build local wayland and Weston. need mesa 10.1.3 configuration: ./autogen.sh --prefix=$WLD --enable-egl --enable-opengl --enable-gles2 --with-egl-platforms=x11,wayland,drm --enable-gbm --enable-shared-glapi --with-gallium-drivers=r600,swrast,nouveau --enable-gallium-egl --disable-gallium-llvm building refer: https://wayland.freedesktop.org/building.html dependences: https://cobalt-review.googlesource.com/c/cobalt/+/4450 https://cobalt-review.googlesource.com/c/cobalt/+/4430 Change-Id: Ia1caf124fb8ba5e0555dc62a955338bcf8e73cd5
diff --git a/src/starboard/contrib/linux/x64wl/atomic_public.h b/src/starboard/contrib/linux/x64wl/atomic_public.h new file mode 100644 index 0000000..63bcc6a --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/atomic_public.h
@@ -0,0 +1,20 @@ +// Copyright 2017 Google Inc. 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_CONTRIB_LINUX_X64WL_ATOMIC_PUBLIC_H_ +#define STARBOARD_CONTRIB_LINUX_X64WL_ATOMIC_PUBLIC_H_ + +#include "starboard/linux/shared/atomic_public.h" + +#endif // STARBOARD_CONTRIB_LINUX_X64WL_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/contrib/linux/x64wl/configuration_public.h b/src/starboard/contrib/linux/x64wl/configuration_public.h new file mode 100644 index 0000000..9628a6e --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/configuration_public.h
@@ -0,0 +1,127 @@ +// Copyright 2016 Google Inc. 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 Desktop X86 Linux. Other devices will have +// specific Starboard implementations, even if they ultimately are running some +// version of Linux. + +// Other source files should never include this header directly, but should +// include the generic "starboard/configuration.h" instead. + +#ifndef STARBOARD_CONTRIB_LINUX_X64WL_CONFIGURATION_PUBLIC_H_ +#define STARBOARD_CONTRIB_LINUX_X64WL_CONFIGURATION_PUBLIC_H_ + +// --- Architecture Configuration -------------------------------------------- + +// Whether the current platform is big endian. SB_IS_LITTLE_ENDIAN will be +// automatically set based on this. +#define SB_IS_BIG_ENDIAN 0 + +// Whether the current platform is an ARM architecture. +#define SB_IS_ARCH_ARM 0 + +// Whether the current platform is a MIPS architecture. +#define SB_IS_ARCH_MIPS 0 + +// Whether the current platform is a PPC architecture. +#define SB_IS_ARCH_PPC 0 + +// Whether the current platform is an x86 architecture. +#define SB_IS_ARCH_X86 1 + +// Whether the current platform is a 32-bit architecture. +#if defined(__i386__) +#define SB_IS_32_BIT 1 +#else +#define SB_IS_32_BIT 0 +#endif + +// Whether the current platform is a 64-bit architecture. +#if defined(__x86_64__) +#define SB_IS_64_BIT 1 +#else +#define SB_IS_64_BIT 0 +#endif + +// Whether the current platform's pointers are 32-bit. +// Whether the current platform's longs are 32-bit. +#if SB_IS(32_BIT) +#define SB_HAS_32_BIT_POINTERS 1 +#define SB_HAS_32_BIT_LONG 1 +#else +#define SB_HAS_32_BIT_POINTERS 0 +#define SB_HAS_32_BIT_LONG 0 +#endif + +// Whether the current platform's pointers are 64-bit. +// Whether the current platform's longs are 64-bit. +#if SB_IS(64_BIT) +#define SB_HAS_64_BIT_POINTERS 1 +#define SB_HAS_64_BIT_LONG 1 +#else +#define SB_HAS_64_BIT_POINTERS 0 +#define SB_HAS_64_BIT_LONG 0 +#endif + +// Configuration parameters that allow the application to make some general +// compile-time decisions with respect to the the number of cores likely to be +// available on this platform. For a definitive measure, the application should +// still call SbSystemGetNumberOfProcessors at runtime. + +// Whether the current platform is expected to have many cores (> 6), or a +// wildly varying number of cores. +#define SB_HAS_MANY_CORES 1 + +// Whether the current platform is expected to have exactly 1 core. +#define SB_HAS_1_CORE 0 + +// Whether the current platform is expected to have exactly 2 cores. +#define SB_HAS_2_CORES 0 + +// Whether the current platform is expected to have exactly 4 cores. +#define SB_HAS_4_CORES 0 + +// Whether the current platform is expected to have exactly 6 cores. +#define SB_HAS_6_CORES 0 + +// Whether the current platform's thread scheduler will automatically balance +// threads between cores, as opposed to systems where threads will only ever run +// on the specifically pinned core. +#define SB_HAS_CROSS_CORE_SCHEDULER 1 + +// --- Graphics Configuration ------------------------------------------------ + +// 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 + +// Whether the current platform has speech synthesis. +#define SB_HAS_SPEECH_SYNTHESIS 0 + +// Include the Linux configuration that's common between all Desktop Linuxes. +#include "starboard/linux/shared/configuration_public.h" + +// The current platform has microphone supported. +#undef SB_HAS_MICROPHONE +#define SB_HAS_MICROPHONE 1 + +#if SB_API_VERSION >= 8 +// Whether the current platform implements the on screen keyboard interface. +#define SB_HAS_ON_SCREEN_KEYBOARD 0 + +// Whether the current platform uses a media player that relies on a URL. +#define SB_HAS_PLAYER_WITH_URL 0 +#endif // SB_API_VERSION >= 8 + +#endif // STARBOARD_CONTRIB_LINUX_X64WL_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/contrib/linux/x64wl/gyp_configuration.gypi b/src/starboard/contrib/linux/x64wl/gyp_configuration.gypi new file mode 100644 index 0000000..0683968 --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/gyp_configuration.gypi
@@ -0,0 +1,52 @@ +# Copyright 2017 Google Inc. 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. + +{ + 'target_defaults': { + 'default_configuration': 'linux-x64wl_debug', + 'configurations': { + 'linux-x64wl_debug': { + 'inherit_from': ['debug_base'], + }, + 'linux-x64wl_devel': { + 'inherit_from': ['devel_base'], + }, + 'linux-x64wl_qa': { + 'inherit_from': ['qa_base'], + }, + 'linux-x64wl_gold': { + 'inherit_from': ['gold_base'], + }, + }, # end of configurations + }, + + 'includes': [ + '<(DEPTH)/starboard/linux/shared/gyp_configuration.gypi', + '<(DEPTH)/starboard/linux/shared/compiler_flags.gypi', + ], + + 'variables': { + 'gl_type': 'system_gles2', + + 'platform_libraries': [ + '-lEGL', + '-lGLESv2', + '-lwayland-egl', + '-lwayland-client', + ], + 'linker_flags': [ + '-Wl,--wrap=eglGetDisplay', + ], + }, +}
diff --git a/src/starboard/contrib/linux/x64wl/gyp_configuration.py b/src/starboard/contrib/linux/x64wl/gyp_configuration.py new file mode 100644 index 0000000..6c2e7ed --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/gyp_configuration.py
@@ -0,0 +1,57 @@ +# Copyright 2017 Google Inc. 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 Linux X64 Wayland platform configuration.""" + +from starboard.linux.shared import gyp_configuration as shared_configuration +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 touch + + +class LinuxX64WaylandConfiguration(shared_configuration.LinuxConfiguration): + """Starboard Linux X64 Wayland platform configuration.""" + + def __init__(self, + platform_name='linux-x64wl', + asan_enabled_by_default=False, + goma_supports_compiler=True): + super(LinuxX64WaylandConfiguration, self).__init__( + platform_name, asan_enabled_by_default, goma_supports_compiler) + + def GetTargetToolchain(self): + return self.GetHostToolchain() + + def GetHostToolchain(self): + environment_variables = self.GetEnvironmentVariables() + cc_path = environment_variables['CC'] + cxx_path = environment_variables['CXX'] + + return [ + clang.CCompiler(path=cc_path), + clang.CxxCompiler(path=cxx_path), + clang.AssemblerWithCPreprocessor(path=cc_path), + ar.StaticThinLinker(), + ar.StaticLinker(), + clangxx.ExecutableLinker(path=cxx_path), + cp.Copy(), + touch.Stamp(), + bash.Shell(), + ] + + +def CreatePlatformConfig(): + return LinuxX64WaylandConfiguration()
diff --git a/src/starboard/contrib/linux/x64wl/main.cc b/src/starboard/contrib/linux/x64wl/main.cc new file mode 100644 index 0000000..c835977 --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/main.cc
@@ -0,0 +1,36 @@ +// Copyright 2016 Google Inc. 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. + +#include <time.h> + +#include "starboard/configuration.h" +#include "starboard/shared/signal/crash_signals.h" +#include "starboard/shared/signal/suspend_signals.h" +#include "starboard/shared/starboard/link_receiver.h" +#include "starboard/shared/wayland/application_wayland.h" + +extern "C" SB_EXPORT_PLATFORM int main(int argc, char** argv) { + tzset(); + starboard::shared::signal::InstallCrashSignalHandlers(); + starboard::shared::signal::InstallSuspendSignalHandlers(); + starboard::shared::wayland::ApplicationWayland application; + int result = 0; + { + starboard::shared::starboard::LinkReceiver receiver(&application); + result = application.Run(argc, argv); + } + starboard::shared::signal::UninstallSuspendSignalHandlers(); + starboard::shared::signal::UninstallCrashSignalHandlers(); + return result; +}
diff --git a/src/starboard/contrib/linux/x64wl/player_output_mode_supported.cc b/src/starboard/contrib/linux/x64wl/player_output_mode_supported.cc new file mode 100644 index 0000000..91978c0 --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/player_output_mode_supported.cc
@@ -0,0 +1,39 @@ +// Copyright 2017 Google Inc. 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. + +#include "starboard/player.h" + +#include "starboard/configuration.h" +#include "starboard/log.h" +#include "starboard/shared/starboard/player/filter/video_decoder_internal.h" + +#if SB_HAS(PLAYER_WITH_URL) + +bool SbPlayerOutputModeSupportedWithUrl(SbPlayerOutputMode output_mode) { + // Stub. + return false; +} + +#else + +bool SbPlayerOutputModeSupported(SbPlayerOutputMode output_mode, + SbMediaVideoCodec codec, + SbDrmSystem drm_system) { + if (kSbPlayerOutputModePunchOut == output_mode) + return false; + return starboard::shared::starboard::player::filter::VideoDecoder:: + OutputModeSupported(output_mode, codec, drm_system); +} + +#endif // SB_HAS(PLAYER_WITH_URL)
diff --git a/src/starboard/contrib/linux/x64wl/starboard_platform.gyp b/src/starboard/contrib/linux/x64wl/starboard_platform.gyp new file mode 100644 index 0000000..3b085fa --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/starboard_platform.gyp
@@ -0,0 +1,35 @@ +# Copyright 2017 Google Inc. 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. +{ + 'includes': [ + 'starboard_platform.gypi' + ], + 'targets': [ + { + 'target_name': 'starboard_platform', + 'type': 'static_library', + 'sources': [ + '<@(starboard_platform_sources)', + ], + 'defines': [ + # This must be defined when building Starboard, and must not when + # building Starboard client code. + 'STARBOARD_IMPLEMENTATION', + ], + 'dependencies': [ + '<@(starboard_platform_dependencies)', + ], + }, + ], +}
diff --git a/src/starboard/contrib/linux/x64wl/starboard_platform.gypi b/src/starboard/contrib/linux/x64wl/starboard_platform.gypi new file mode 100644 index 0000000..78a4930 --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/starboard_platform.gypi
@@ -0,0 +1,44 @@ +# Copyright 2016 Google Inc. 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. +{ + 'includes': ['<(DEPTH)/starboard/linux/shared/starboard_platform.gypi'], + + 'variables': { + 'starboard_platform_sources': [ + '<(DEPTH)/starboard/contrib/linux/x64wl/main.cc', + '<(DEPTH)/starboard/contrib/linux/x64wl/system_get_property.cc', + '<(DEPTH)/starboard/contrib/linux/x64wl/player_output_mode_supported.cc', + '<(DEPTH)/starboard/shared/starboard/link_receiver.cc', + '<(DEPTH)/starboard/shared/wayland/application_wayland.cc', + '<(DEPTH)/starboard/shared/wayland/dev_input.cc', + '<(DEPTH)/starboard/shared/wayland/egl_workaround.cc', + '<(DEPTH)/starboard/shared/wayland/native_display_type.cc', + '<(DEPTH)/starboard/shared/wayland/window_create.cc', + '<(DEPTH)/starboard/shared/wayland/window_destroy.cc', + '<(DEPTH)/starboard/shared/wayland/window_get_platform_handle.cc', + '<(DEPTH)/starboard/shared/wayland/window_get_size.cc', + '<(DEPTH)/starboard/shared/wayland/window_internal.cc', + ], + 'starboard_platform_sources!': [ + '<(DEPTH)/starboard/shared/linux/dev_input/dev_input.cc', + '<(DEPTH)/starboard/shared/linux/dev_input/dev_input.h', + '<(DEPTH)/starboard/shared/starboard/player/player_output_mode_supported.cc', + ], + }, + 'target_defaults': { + 'include_dirs!': [ + '<(DEPTH)/third_party/khronos', + ], + }, +}
diff --git a/src/starboard/contrib/linux/x64wl/system_get_property.cc b/src/starboard/contrib/linux/x64wl/system_get_property.cc new file mode 100644 index 0000000..a9651c5 --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/system_get_property.cc
@@ -0,0 +1,122 @@ +// Copyright 2016 Google Inc. 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. + +#include "starboard/system.h" + +#include <netdb.h> +#include <linux/if.h> // NOLINT(build/include_alpha) +#include <sys/ioctl.h> +#include <sys/socket.h> + +#include "starboard/log.h" +#include "starboard/string.h" + +namespace { + +const char* kFriendlyName = "Linux Desktop"; +const char* kPlatformName = "Wayland; Linux x86_64"; + +bool CopyStringAndTestIfSuccess(char* out_value, + int value_length, + const char* from_value) { + if (SbStringGetLength(from_value) + 1 > value_length) + return false; + SbStringCopy(out_value, from_value, value_length); + return true; +} + +#if SB_API_VERSION < SB_PROPERTY_UUID_REMOVED_API_VERSION + +bool GetPlatformUuid(char* out_value, int value_length) { + struct ifreq interface; + struct ifconf config; + char buf[1024]; + + int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (fd == -1) { + return false; + } + config.ifc_len = sizeof(buf); + config.ifc_buf = buf; + int result = ioctl(fd, SIOCGIFCONF, &config); + if (result == -1) { + return false; + } + + struct ifreq* cur_interface = config.ifc_req; + const struct ifreq* const end = cur_interface + + (config.ifc_len / sizeof(struct ifreq)); + + for (; cur_interface != end; ++cur_interface) { + SbStringCopy(interface.ifr_name, + cur_interface->ifr_name, + sizeof(cur_interface->ifr_name)); + if (ioctl(fd, SIOCGIFFLAGS, &interface) == -1) { + continue; + } + if (interface.ifr_flags & IFF_LOOPBACK) { + continue; + } + if (ioctl(fd, SIOCGIFHWADDR, &interface) == -1) { + continue; + } + SbStringFormatF(out_value, value_length, "%x:%x:%x:%x:%x:%x", + interface.ifr_addr.sa_data[0], interface.ifr_addr.sa_data[1], + interface.ifr_addr.sa_data[2], interface.ifr_addr.sa_data[3], + interface.ifr_addr.sa_data[4], interface.ifr_addr.sa_data[5]); + return true; + } + return false; +} + +#endif // SB_API_VERSION < SB_PROPERTY_UUID_REMOVED_API_VERSION + +} // namespace + +bool SbSystemGetProperty(SbSystemPropertyId property_id, + char* out_value, + int value_length) { + if (!out_value || !value_length) { + return false; + } + + switch (property_id) { + case kSbSystemPropertyBrandName: + case kSbSystemPropertyChipsetModelNumber: + case kSbSystemPropertyFirmwareVersion: + case kSbSystemPropertyModelName: + case kSbSystemPropertyModelYear: + case kSbSystemPropertyNetworkOperatorName: + case kSbSystemPropertySpeechApiKey: + return false; + + case kSbSystemPropertyFriendlyName: + return CopyStringAndTestIfSuccess(out_value, value_length, kFriendlyName); + + case kSbSystemPropertyPlatformName: + return CopyStringAndTestIfSuccess(out_value, value_length, kPlatformName); + +#if SB_API_VERSION < SB_PROPERTY_UUID_REMOVED_API_VERSION + case kSbSystemPropertyPlatformUuid: + return GetPlatformUuid(out_value, value_length); +#endif // SB_API_VERSION < SB_PROPERTY_UUID_REMOVED_API_VERSION + + default: + SB_DLOG(WARNING) << __FUNCTION__ + << ": Unrecognized property: " << property_id; + break; + } + + return false; +}
diff --git a/src/starboard/contrib/linux/x64wl/thread_types_public.h b/src/starboard/contrib/linux/x64wl/thread_types_public.h new file mode 100644 index 0000000..f8df35f --- /dev/null +++ b/src/starboard/contrib/linux/x64wl/thread_types_public.h
@@ -0,0 +1,22 @@ +// Copyright 2017 Google Inc. 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. + +// Includes threading primitive types and initializers. + +#ifndef STARBOARD_CONTRIB_LINUX_X64WL_THREAD_TYPES_PUBLIC_H_ +#define STARBOARD_CONTRIB_LINUX_X64WL_THREAD_TYPES_PUBLIC_H_ + +#include "starboard/linux/shared/thread_types_public.h" + +#endif // STARBOARD_CONTRIB_LINUX_X64WL_THREAD_TYPES_PUBLIC_H_