aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRisan <risan@google.com>2017-12-07 12:35:19 +0900
committerRisan <risan@google.com>2018-01-19 16:06:43 +0900
commitedc20e2864aa41fe5b0a039e9f67443a83ce89b9 (patch)
tree81160e84ee694f4c20a840611e72389f9930754f
parentcf86eeff81b51841769b5bb052878423ddb95951 (diff)
downloadlibmojo-edc20e2864aa41fe5b0a039e9f67443a83ce89b9.tar.gz
Convert libmojo C++ to use Android.bp
Patches from lhchavez@'s ag/318044. The Java generator is TODO. Bug: 27569341 Test: mmma -j32 external/libmojo Change-Id: Ifbbb7f2311a8877bc5d79ba45d98fc3e4da95d5c
-rw-r--r--Android.bp397
-rw-r--r--build/Android.bp12
-rw-r--r--build/android/Android.bp13
-rw-r--r--build/android/gyp/Android.bp13
-rw-r--r--mojo/public/tools/bindings/Android.bp27
-rw-r--r--mojo/public/tools/bindings/pylib/Android.bp12
-rwxr-xr-xsoong/jni_generator_helper.sh42
-rwxr-xr-xsoong/mojom_source_generator.sh86
-rw-r--r--third_party/Android.bp17
-rw-r--r--third_party/catapult/devil/Android.bp12
10 files changed, 631 insertions, 0 deletions
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..0b715dc
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,397 @@
+// Copyright 2017 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+filegroup {
+ name: "libmojo_mojom_files",
+ srcs: [
+ "ipc/ipc.mojom",
+ "mojo/common/file.mojom",
+ "mojo/common/string16.mojom",
+ "mojo/common/text_direction.mojom",
+ "mojo/common/time.mojom",
+ "mojo/common/unguessable_token.mojom",
+ "mojo/common/version.mojom",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom",
+ "ui/gfx/geometry/mojo/geometry.mojom",
+ "ui/gfx/range/mojo/range.mojom",
+ ],
+}
+
+// TODO(risan): move this to third_party/catapult/Android.bp and enable embedded_launcher.
+python_library_host {
+ name: "catapult",
+ srcs: [
+ "third_party/catapult/devil/devil/**/*.py",
+ ],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
+
+// TODO(risan): split this into python_libraries.
+python_binary_host {
+ name: "jni_generator",
+ main: "base/android/jni_generator/jni_generator.py",
+ srcs: [
+ "base/android/jni_generator/jni_generator.py",
+ "build/**/*.py",
+ ],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+ libs: [
+ "catapult",
+ ],
+}
+
+cc_prebuilt_binary {
+ name: "mojom_source_generator_sh",
+ srcs: ["soong/mojom_source_generator.sh"],
+ host_supported: true,
+}
+
+// TODO(risan): Generate java out.
+genrule {
+ name: "libmojo_mojom_headers",
+ cmd: "$(location mojom_source_generator_sh)" +
+ " --mojom_bindings_generator=$(location mojom_bindings_generator)" +
+ " --package=external/libmojo" +
+ " --output_dir=$(genDir)" +
+ " --bytecode_path=$(genDir)" +
+ " --typemap=$(location gen/mojo/common/common_custom_types__type_mappings)" +
+ " --generators=c++" +
+ " --use_new_wrapper_types" +
+ " $(in)",
+
+ tools: [
+ "mojom_bindings_generator",
+ "mojom_source_generator_sh",
+ ],
+
+ tool_files: [
+ // This file was copied from out/Release in a Chrome checkout.
+ // TODO(lhchavez): Generate this file instead of hardcoding it.
+ "gen/mojo/common/common_custom_types__type_mappings",
+ ],
+
+ srcs: [":libmojo_mojom_files"],
+
+ out: [
+ "ipc/ipc.mojom.h",
+ "ipc/ipc.mojom-shared.h",
+ "ipc/ipc.mojom-shared-internal.h",
+ "mojo/common/file.mojom.h",
+ "mojo/common/file.mojom-shared.h",
+ "mojo/common/file.mojom-shared-internal.h",
+ "mojo/common/string16.mojom.h",
+ "mojo/common/string16.mojom-shared.h",
+ "mojo/common/string16.mojom-shared-internal.h",
+ "mojo/common/text_direction.mojom.h",
+ "mojo/common/text_direction.mojom-shared.h",
+ "mojo/common/text_direction.mojom-shared-internal.h",
+ "mojo/common/time.mojom.h",
+ "mojo/common/time.mojom-shared.h",
+ "mojo/common/time.mojom-shared-internal.h",
+ "mojo/common/unguessable_token.mojom.h",
+ "mojo/common/unguessable_token.mojom-shared.h",
+ "mojo/common/unguessable_token.mojom-shared-internal.h",
+ "mojo/common/version.mojom.h",
+ "mojo/common/version.mojom-shared.h",
+ "mojo/common/version.mojom-shared-internal.h",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom.h",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared.h",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared-internal.h",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom.h",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared.h",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared-internal.h",
+ "ui/gfx/geometry/mojo/geometry.mojom.h",
+ "ui/gfx/geometry/mojo/geometry.mojom-shared.h",
+ "ui/gfx/geometry/mojo/geometry.mojom-shared-internal.h",
+ "ui/gfx/range/mojo/range.mojom.h",
+ "ui/gfx/range/mojo/range.mojom-shared.h",
+ "ui/gfx/range/mojo/range.mojom-shared-internal.h",
+ ],
+}
+
+genrule {
+ name: "libmojo_mojom_srcs",
+ cmd: "$(location mojom_source_generator_sh)" +
+ " --mojom_bindings_generator=$(location mojom_bindings_generator)" +
+ " --package=external/libmojo" +
+ " --output_dir=$(genDir)" +
+ " --bytecode_path=$(genDir)" +
+ " --typemap=$(location gen/mojo/common/common_custom_types__type_mappings)" +
+ " --generators=c++" +
+ " --use_new_wrapper_types" +
+ " $(in)",
+
+ tools: [
+ "mojom_bindings_generator",
+ "mojom_source_generator_sh",
+ ],
+
+ tool_files: [
+ // This file was copied from out/Release in a Chrome checkout.
+ // TODO(lhchavez): Generate this file instead of hardcoding it.
+ "gen/mojo/common/common_custom_types__type_mappings",
+ "soong/mojom_source_generator.sh",
+ ],
+
+ srcs: [":libmojo_mojom_files"],
+
+ out: [
+ "ipc/ipc.mojom.cc",
+ "ipc/ipc.mojom-shared.cc",
+ "mojo/common/file.mojom.cc",
+ "mojo/common/file.mojom-shared.cc",
+ "mojo/common/string16.mojom.cc",
+ "mojo/common/string16.mojom-shared.cc",
+ "mojo/common/text_direction.mojom.cc",
+ "mojo/common/text_direction.mojom-shared.cc",
+ "mojo/common/time.mojom.cc",
+ "mojo/common/time.mojom-shared.cc",
+ "mojo/common/unguessable_token.mojom.cc",
+ "mojo/common/unguessable_token.mojom-shared.cc",
+ "mojo/common/version.mojom.cc",
+ "mojo/common/version.mojom-shared.cc",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom.cc",
+ "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared.cc",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom.cc",
+ "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared.cc",
+ "ui/gfx/geometry/mojo/geometry.mojom.cc",
+ "ui/gfx/geometry/mojo/geometry.mojom-shared.cc",
+ "ui/gfx/range/mojo/range.mojom.cc",
+ "ui/gfx/range/mojo/range.mojom-shared.cc",
+ ],
+}
+
+genrule {
+ name: "libmojo_jni_headers",
+ cmd: "$(location soong/jni_generator_helper.sh)" +
+ " --jni_generator=$(location jni_generator)" +
+ " --output_dir=$(genDir)/jni" +
+ " --includes=base/android/jni_generator/jni_generator_helper.h" +
+ " --ptr_type=long" +
+ " --native_exports_optional" +
+ " $(in)",
+
+ tools: [
+ "jni_generator",
+ ],
+
+ tool_files: [
+ "soong/jni_generator_helper.sh",
+ ],
+
+ srcs: [
+ "base/android/java/src/org/chromium/base/BuildInfo.java",
+ "base/android/java/src/org/chromium/base/ContentUriUtils.java",
+ "base/android/java/src/org/chromium/base/ContextUtils.java",
+ "base/android/java/src/org/chromium/base/PathUtils.java",
+ "base/android/java/src/org/chromium/base/SystemMessageHandler.java",
+ // Runtime.class is added (instead of Runtime.java that lives in
+ // libcore) since the script that generates the JNI files does not
+ // handle compiling it well.
+ "jni/java/lang/Runtime.class",
+ "mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java",
+ "mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java",
+ "mojo/android/system/src/org/chromium/mojo/system/impl/WatcherImpl.java",
+ ],
+
+ out: [
+ "jni/BuildInfo_jni.h",
+ "jni/ContentUriUtils_jni.h",
+ "jni/ContextUtils_jni.h",
+ "jni/PathUtils_jni.h",
+ "jni/SystemMessageHandler_jni.h",
+ "jni/Runtime_jni.h",
+ "jni/BaseRunLoop_jni.h",
+ "jni/CoreImpl_jni.h",
+ "jni/WatcherImpl_jni.h",
+ ],
+}
+
+// TODO(risan): Change the name to libmojo once Android.mk is removed.
+cc_library_shared {
+ name: "libmojo_bp",
+
+ generated_headers: [
+ "libmojo_jni_headers",
+ "libmojo_mojom_headers",
+ ],
+
+ generated_sources: [
+ "libmojo_mojom_srcs",
+ ],
+
+ export_generated_headers: [
+ "libmojo_jni_headers",
+ "libmojo_mojom_headers",
+ ],
+
+ srcs: [
+ "base/android/build_info.cc",
+ "base/android/content_uri_utils.cc",
+ "base/android/context_utils.cc",
+ "base/android/java_runtime.cc",
+ "base/android/jni_android.cc",
+ "base/android/jni_string.cc",
+ "base/android/path_utils.cc",
+ "base/android/scoped_java_ref.cc",
+ "base/base_paths.cc",
+ "base/base_paths_android.cc",
+ "base/debug/proc_maps_linux.cc",
+ "base/debug/stack_trace_android.cc",
+ "base/files/file_util_android.cc",
+ "base/message_loop/message_pump_android.cc",
+ "base/path_service.cc",
+ "base/trace_event/java_heap_dump_provider_android.cc",
+ "base/trace_event/trace_event_android.cc",
+ "base/unguessable_token.cc",
+ "device/bluetooth/bluetooth_advertisement.cc",
+ "device/bluetooth/bluetooth_uuid.cc",
+ "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.cc",
+ "ipc/ipc_message.cc",
+ "ipc/ipc_message_attachment.cc",
+ "ipc/ipc_message_attachment_set.cc",
+ "ipc/ipc_message_utils.cc",
+ "ipc/ipc_mojo_handle_attachment.cc",
+ "ipc/ipc_mojo_message_helper.cc",
+ "ipc/ipc_mojo_param_traits.cc",
+ "ipc/ipc_platform_file_attachment_posix.cc",
+ "mojo/android/system/base_run_loop.cc",
+ "mojo/android/system/core_impl.cc",
+ "mojo/android/system/watcher_impl.cc",
+ "mojo/common/common_custom_types_struct_traits.cc",
+ "mojo/edk/embedder/connection_params.cc",
+ "mojo/edk/embedder/embedder.cc",
+ "mojo/edk/embedder/entrypoints.cc",
+ "mojo/edk/embedder/platform_channel_pair.cc",
+ "mojo/edk/embedder/platform_channel_pair_posix.cc",
+ "mojo/edk/embedder/platform_channel_utils_posix.cc",
+ "mojo/edk/embedder/platform_handle.cc",
+ "mojo/edk/embedder/platform_handle_utils_posix.cc",
+ "mojo/edk/embedder/platform_shared_buffer.cc",
+ "mojo/edk/embedder/pending_process_connection.cc",
+ "mojo/edk/embedder/test_embedder.cc",
+ "mojo/edk/system/awakable_list.cc",
+ "mojo/edk/system/broker_host.cc",
+ "mojo/edk/system/broker_posix.cc",
+ "mojo/edk/system/channel.cc",
+ "mojo/edk/system/channel_posix.cc",
+ "mojo/edk/system/configuration.cc",
+ "mojo/edk/system/core.cc",
+ "mojo/edk/system/data_pipe_consumer_dispatcher.cc",
+ "mojo/edk/system/data_pipe_control_message.cc",
+ "mojo/edk/system/data_pipe_producer_dispatcher.cc",
+ "mojo/edk/system/dispatcher.cc",
+ "mojo/edk/system/handle_table.cc",
+ "mojo/edk/system/mapping_table.cc",
+ "mojo/edk/system/message_for_transit.cc",
+ "mojo/edk/system/message_pipe_dispatcher.cc",
+ "mojo/edk/system/node_channel.cc",
+ "mojo/edk/system/node_controller.cc",
+ "mojo/edk/system/platform_handle_dispatcher.cc",
+ "mojo/edk/system/ports/event.cc",
+ "mojo/edk/system/ports/message.cc",
+ "mojo/edk/system/ports/message_queue.cc",
+ "mojo/edk/system/ports/name.cc",
+ "mojo/edk/system/ports/node.cc",
+ "mojo/edk/system/ports/port.cc",
+ "mojo/edk/system/ports/port_ref.cc",
+ "mojo/edk/system/ports_message.cc",
+ "mojo/edk/system/request_context.cc",
+ "mojo/edk/system/shared_buffer_dispatcher.cc",
+ "mojo/edk/system/wait_set_dispatcher.cc",
+ "mojo/edk/system/waiter.cc",
+ "mojo/edk/system/watcher.cc",
+ "mojo/edk/system/watcher_set.cc",
+ "mojo/public/c/system/thunks.cc",
+ "mojo/public/cpp/bindings/lib/array_internal.cc",
+ "mojo/public/cpp/bindings/lib/associated_group.cc",
+ "mojo/public/cpp/bindings/lib/associated_group_controller.cc",
+ "mojo/public/cpp/bindings/lib/binding_state.cc",
+ "mojo/public/cpp/bindings/lib/connector.cc",
+ "mojo/public/cpp/bindings/lib/control_message_handler.cc",
+ "mojo/public/cpp/bindings/lib/control_message_proxy.cc",
+ "mojo/public/cpp/bindings/lib/filter_chain.cc",
+ "mojo/public/cpp/bindings/lib/fixed_buffer.cc",
+ "mojo/public/cpp/bindings/lib/interface_endpoint_client.cc",
+ "mojo/public/cpp/bindings/lib/message.cc",
+ "mojo/public/cpp/bindings/lib/message_buffer.cc",
+ "mojo/public/cpp/bindings/lib/message_builder.cc",
+ "mojo/public/cpp/bindings/lib/message_header_validator.cc",
+ "mojo/public/cpp/bindings/lib/multiplex_router.cc",
+ "mojo/public/cpp/bindings/lib/native_struct.cc",
+ "mojo/public/cpp/bindings/lib/native_struct_data.cc",
+ "mojo/public/cpp/bindings/lib/native_struct_serialization.cc",
+ "mojo/public/cpp/bindings/lib/pipe_control_message_handler.cc",
+ "mojo/public/cpp/bindings/lib/pipe_control_message_proxy.cc",
+ "mojo/public/cpp/bindings/lib/scoped_interface_endpoint_handle.cc",
+ "mojo/public/cpp/bindings/lib/serialization_context.cc",
+ "mojo/public/cpp/bindings/lib/sync_handle_registry.cc",
+ "mojo/public/cpp/bindings/lib/sync_handle_watcher.cc",
+ "mojo/public/cpp/bindings/lib/validation_context.cc",
+ "mojo/public/cpp/bindings/lib/validation_errors.cc",
+ "mojo/public/cpp/bindings/lib/validation_util.cc",
+ "mojo/public/cpp/system/buffer.cc",
+ "mojo/public/cpp/system/platform_handle.cc",
+ "mojo/public/cpp/system/watcher.cc",
+ "ui/gfx/geometry/insets.cc",
+ "ui/gfx/geometry/insets_f.cc",
+ "ui/gfx/geometry/point.cc",
+ "ui/gfx/geometry/point_conversions.cc",
+ "ui/gfx/geometry/point_f.cc",
+ "ui/gfx/geometry/rect.cc",
+ "ui/gfx/geometry/rect_f.cc",
+ "ui/gfx/geometry/size.cc",
+ "ui/gfx/geometry/size_conversions.cc",
+ "ui/gfx/geometry/size_f.cc",
+ "ui/gfx/geometry/vector2d.cc",
+ "ui/gfx/geometry/vector2d_f.cc",
+ "ui/gfx/range/range.cc",
+ "ui/gfx/range/range_f.cc",
+ ],
+
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wno-unused-parameter",
+ "-Wno-missing-field-initializers",
+ "-DMOJO_EDK_LEGACY_PROTOCOL",
+ ],
+
+ // We use OS_POSIX since we need to communicate with Chrome.
+ // We also pass NO_ASHMEM to make base::SharedMemory avoid using it and prefer
+ // the POSIX versions.
+ cppflags: [
+ "-Wno-sign-promo",
+ "-Wno-non-virtual-dtor",
+ "-Wno-ignored-qualifiers",
+ "-Wno-extra",
+ "-DOS_POSIX",
+ "-DNO_ASHMEM",
+ "-DNO_TCMALLOC",
+ ],
+
+ shared_libs: [
+ "libevent",
+ "liblog",
+ "libchrome",
+ "libchrome-crypto",
+ ],
+
+ export_include_dirs: ["."],
+}
diff --git a/build/Android.bp b/build/Android.bp
new file mode 100644
index 0000000..afb4997
--- /dev/null
+++ b/build/Android.bp
@@ -0,0 +1,12 @@
+python_library_host {
+ name: "mojom_build",
+ srcs: ["gn_helpers.py"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/build/android/Android.bp b/build/android/Android.bp
new file mode 100644
index 0000000..d015454
--- /dev/null
+++ b/build/android/Android.bp
@@ -0,0 +1,13 @@
+python_library_host {
+ name: "mojom_build_android",
+ srcs: ["pylib/**/*.py"],
+ libs: ["mojom_build_android_gyp"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/build/android/gyp/Android.bp b/build/android/gyp/Android.bp
new file mode 100644
index 0000000..75d3238
--- /dev/null
+++ b/build/android/gyp/Android.bp
@@ -0,0 +1,13 @@
+python_library_host {
+ name: "mojom_build_android_gyp",
+ srcs: ["**/*.py"],
+ libs: ["mojom_build"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/mojo/public/tools/bindings/Android.bp b/mojo/public/tools/bindings/Android.bp
new file mode 100644
index 0000000..16af6b4
--- /dev/null
+++ b/mojo/public/tools/bindings/Android.bp
@@ -0,0 +1,27 @@
+python_binary_host {
+ name: "mojom_bindings_generator",
+ main: "mojom_bindings_generator.py",
+ libs: [
+ "mojom_build_android",
+ "mojom_bindings_pylib",
+ "mojom_third_party",
+ ],
+ srcs: [
+ "generators/*.py",
+ "*.py",
+ ],
+ data: [
+ "generators/js_templates/*.tmpl",
+ "generators/java_templates/*.tmpl",
+ "generators/cpp_templates/*.tmpl",
+ ],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
+
diff --git a/mojo/public/tools/bindings/pylib/Android.bp b/mojo/public/tools/bindings/pylib/Android.bp
new file mode 100644
index 0000000..2dd4c58
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/Android.bp
@@ -0,0 +1,12 @@
+python_library_host {
+ name: "mojom_bindings_pylib",
+ srcs: ["**/*.py"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/soong/jni_generator_helper.sh b/soong/jni_generator_helper.sh
new file mode 100755
index 0000000..d610801
--- /dev/null
+++ b/soong/jni_generator_helper.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# 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.
+#
+# Generates jni.
+
+set -e
+
+args=()
+files=()
+
+jni_generator=''
+
+for arg in "$@"; do
+ case "${arg}" in
+ --jni_generator=*)
+ jni_generator=${arg#'--jni_generator='}
+ ;;
+ --*)
+ args=("${args[@]}" "${arg}")
+ ;;
+ *)
+ files=("${files[@]}" "${arg}")
+ ;;
+ esac
+done
+
+for file in "${files[@]}"; do
+ "${jni_generator}" "${args[@]}" --input_file="${file}"
+done
diff --git a/soong/mojom_source_generator.sh b/soong/mojom_source_generator.sh
new file mode 100755
index 0000000..24a34ee
--- /dev/null
+++ b/soong/mojom_source_generator.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# 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.
+#
+# Generates mojo sources given a list of .mojom files and args.
+# Usage: $0 --mojom_bindings_generator=<abs_path> --package=<package_directory>
+# --output_dir=<output_directory>
+# [<extra_args_for_bindings_generator>] <list_of_mojom_files>
+
+set -e
+
+args=()
+files=()
+
+mojom_bindings_generator=""
+package=""
+output_dir=""
+
+# Given a path to directory or file, return the absolute path.
+get_abs_path() {
+ if [[ -d $1 ]] ; then
+ cd "$1"
+ filename=""
+ else
+ filepath=$1
+ dir="${filepath%/*}"
+ cd "${dir}"
+ filename="${filepath#${dir}/}"
+ fi
+ absdir=`pwd`
+ cd - > /dev/null
+ echo "${absdir}/${filename}"
+}
+
+for arg in "$@"; do
+ case "${arg}" in
+ --mojom_bindings_generator=*)
+ mojom_bindings_generator="${arg#'--mojom_bindings_generator='}"
+ mojom_bindings_generator="$(get_abs_path ${mojom_bindings_generator})"
+ ;;
+ --package=*)
+ package="${arg#'--package='}"
+ ;;
+ --output_dir=*)
+ output_dir="${arg#'--output_dir='}"
+ output_dir="$(get_abs_path ${output_dir})"
+ ;;
+ --typemap=*)
+ typemap="${arg#'--typemap='}"
+ typemap="$(get_abs_path ${typemap})"
+ ;;
+ --bytecode_path=*)
+ bytecode_path="${arg#'--bytecode_path='}"
+ bytecode_path="$(get_abs_path ${bytecode_path})"
+ ;;
+ --*)
+ args=("${args[@]}" "${arg}")
+ ;;
+ *)
+ files=("${files[@]}" "$(get_abs_path ${arg})")
+ ;;
+ esac
+done
+
+cd "${package}"
+"${mojom_bindings_generator}" precompile -o "${output_dir}"
+
+for file in "${files[@]}"; do
+ "${mojom_bindings_generator}" generate -o "${output_dir}" "${args[@]}" \
+ --typemap="${typemap}" --bytecode_path="${bytecode_path}" "${file}"
+ "${mojom_bindings_generator}" generate -o "${output_dir}" \
+ --generate_non_variant_code "${args[@]}" --typemap="${typemap}" \
+ --bytecode_path="${bytecode_path}" "${file}"
+done
diff --git a/third_party/Android.bp b/third_party/Android.bp
new file mode 100644
index 0000000..9ea21c3
--- /dev/null
+++ b/third_party/Android.bp
@@ -0,0 +1,17 @@
+python_library_host {
+ name: "mojom_third_party",
+ srcs: [
+ "jinja2/**/*.py",
+ "markupsafe/**/*.py",
+ "ply/**/*.py",
+ ],
+ libs: ["mojom_third_party_devil"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/third_party/catapult/devil/Android.bp b/third_party/catapult/devil/Android.bp
new file mode 100644
index 0000000..d466196
--- /dev/null
+++ b/third_party/catapult/devil/Android.bp
@@ -0,0 +1,12 @@
+python_library_host {
+ name: "mojom_third_party_devil",
+ srcs: ["devil/**/*.py"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}