summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlistair Strachan <astrachan@google.com>2018-04-19 13:20:10 -0700
committerGreg Hartman <ghartman@google.com>2018-08-23 17:30:51 -0700
commit296a770547279534aba2e1eef66fd5a00be0871d (patch)
tree23b7a0ebaaef77b50af9fb55dedb34b32f0b487c
parent7c2f03d54766702910e78e8d26610a9974762aef (diff)
downloaddevice_generic_opengl-transport-296a770547279534aba2e1eef66fd5a00be0871d.tar.gz
device_generic_opengl-transport-296a770547279534aba2e1eef66fd5a00be0871d.tar.bz2
device_generic_opengl-transport-296a770547279534aba2e1eef66fd5a00be0871d.zip
Add a fork of the emugen host tool
This change also adds a fork of the emugen host tool from external/qemu 799a545 to enable the generation of wrapper code using the emulator library templates. To regenerate the wrappers, use the following commands: $ emugen_cuttlefish -W eglwrapper -i eglwrapper egl $ emugen_cuttlefish -W eglwrapper -i eglwrapper gles1 $ emugen_cuttlefish -W eglwrapper -i eglwrapper gles3 Bug: 76027192 Bug: 74573450 Bug: 74572414 Bug: 74571771 Bug: 73780279 Test: this change is completely untested Change-Id: Ib5e26ff824fd073a670971174014ea4c1b86c9f6
-rw-r--r--host/commands/Android.bp21
-rw-r--r--host/commands/emugen/Android.bp13
-rw-r--r--host/commands/emugen/README.md17
-rw-r--r--host/commands/emugen/android/base/EnumFlags.h117
4 files changed, 168 insertions, 0 deletions
diff --git a/host/commands/Android.bp b/host/commands/Android.bp
new file mode 100644
index 000000000..8aebc1d83
--- /dev/null
+++ b/host/commands/Android.bp
@@ -0,0 +1,21 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// 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.
+
+subdirs = [
+ "emugen",
+ "launch",
+ "stop_cvd",
+ "record_audio",
+]
diff --git a/host/commands/emugen/Android.bp b/host/commands/emugen/Android.bp
new file mode 100644
index 000000000..717a96633
--- /dev/null
+++ b/host/commands/emugen/Android.bp
@@ -0,0 +1,13 @@
+cc_binary_host {
+ name: "emugen_cuttlefish",
+ srcs: [
+ "ApiGen.cpp",
+ "EntryPoint.cpp",
+ "main.cpp",
+ "Parser.cpp",
+ "strUtils.cpp",
+ "TypeFactory.cpp",
+ ],
+ cflags: ["-Wno-unused-parameter"],
+ defaults: ["cuttlefish_host_only"],
+}
diff --git a/host/commands/emugen/README.md b/host/commands/emugen/README.md
new file mode 100644
index 000000000..dfc130aa0
--- /dev/null
+++ b/host/commands/emugen/README.md
@@ -0,0 +1,17 @@
+# emugen (cuttlefish)
+
+This directory contains a fork of the emugen tool from the external/qemu project
+on the emu-master-dev branch. The tool is unmodified except for the following
+changes:
+
+1) The android/base/EnumFlags.h header has been forked, to avoid having to copy
+ over all of the host-side android-base port.
+
+2) The unittest infrastructure and all unittests have been removed.
+
+3) This README.md file replaces the upstream README file.
+
+4) The binary builds to `emugen_cuttlefish` so as to avoid conflicts.
+
+Do not contribute change only to this project; contribute them to external/qemu
+upstream, then cherry-pick them over.
diff --git a/host/commands/emugen/android/base/EnumFlags.h b/host/commands/emugen/android/base/EnumFlags.h
new file mode 100644
index 000000000..fec56b928
--- /dev/null
+++ b/host/commands/emugen/android/base/EnumFlags.h
@@ -0,0 +1,117 @@
+// Copyright 2015 The Android Open Source Project
+//
+// This software is licensed under the terms of the GNU General Public
+// License version 2, as published by the Free Software Foundation, and
+// may be copied, distributed, and modified under those terms.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+#pragma once
+
+#include <type_traits>
+
+// This header defines some utitily methods to manipulate scoped enums as flags
+// C++11 scoped enums by default don't support flag operations (e.g. if (a & b))
+// We need to define bitwise operations for them to be able to have strongly
+// typed flags in our code.
+//
+// To enable the flag operators for your enum, most probably you just need to
+// include this file. The only exception is if your enum is located in some
+// namespace other than android, android::base or global. In that case you also
+// need to add the following using to bring in the operators:
+//
+// using namespace ::android::base::EnumFlags;
+
+namespace android {
+namespace base {
+namespace EnumFlags {
+
+// A predicate which checks if template agument is a scoped enum
+template<class E>
+using is_scoped_enum = std::integral_constant<
+ bool,
+ std::is_enum<E>::value && !std::is_convertible<E, int>::value>;
+
+template <class E>
+using underlying_enum_type = typename std::underlying_type<E>::type;
+
+template <class E, class Res = E>
+using enable_if_scoped_enum =
+ typename std::enable_if<is_scoped_enum<E>::value, Res>::type;
+
+template <class E>
+enable_if_scoped_enum<E> operator|(E l, E r) {
+ return static_cast<E>(static_cast<underlying_enum_type<E>>(l)
+ | static_cast<underlying_enum_type<E>>(r));
+}
+
+template <class E>
+enable_if_scoped_enum<E> operator&(E l, E r) {
+ return static_cast<E>(static_cast<underlying_enum_type<E>>(l)
+ & static_cast<underlying_enum_type<E>>(r));
+}
+
+template <class E>
+enable_if_scoped_enum<E> operator~(E e) {
+ return static_cast<E>(~static_cast<underlying_enum_type<E>>(e));
+}
+
+template <class E>
+enable_if_scoped_enum<E> operator|=(E& l, E r) {
+ return l = (l | r);
+}
+
+template <class E>
+enable_if_scoped_enum<E> operator&=(E& l, E r) {
+ return l = (l & r);
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> operator!(E e) {
+ return !static_cast<underlying_enum_type<E>>(e);
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> operator!=(E e, int val) {
+ return static_cast<underlying_enum_type<E>>(e) !=
+ static_cast<underlying_enum_type<E>>(val);
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> operator!=(int val, E e) {
+ return e != val;
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> operator==(E e, int val) {
+ return static_cast<underlying_enum_type<E>>(e) ==
+ static_cast<underlying_enum_type<E>>(val);
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> operator==(int val, E e) {
+ return e == val;
+}
+
+template <class E>
+enable_if_scoped_enum<E, bool> nonzero(E e) {
+ return static_cast<underlying_enum_type<E>>(e) != 0;
+}
+
+} // namespace EnumFlags
+
+// For the ADL to kick in let's make sure we bring all the operators into our
+// main AndroidEmu namespaces...
+using namespace ::android::base::EnumFlags;
+
+} // namespace base
+
+using namespace ::android::base::EnumFlags;
+
+} // namespace android
+
+// ... and into the global one, where most of the client functions are
+using namespace ::android::base::EnumFlags;