1d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org#!/usr/bin/python
2d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
3d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org# Copyright 2014 Google Inc.
4d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org#
5d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org# Use of this source code is governed by a BSD-style license that can be
6d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org# found in the LICENSE file.
7d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
8d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org"""Code for generating Android.mk for a tool."""
9d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
10d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
11d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgimport android_framework_gyp
12d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgimport gypd_parser
13d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgimport makefile_writer
14d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgimport os
15d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgimport vars_dict_lib
16d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
17f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollenSKIA_RESOURCES = (
18f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen"""
19f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen# Setup directory to store skia's resources in the directory structure that
20f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen# the Android testing infrastructure expects
21f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollenskia_res_dir := $(call intermediates-dir-for,PACKAGING,skia_resources)/DATA
22f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen$(shell mkdir -p $(skia_res_dir))
23f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen$(shell cp -r $(LOCAL_PATH)/../resources/. $(skia_res_dir)/skia_resources)
24f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollenLOCAL_PICKUP_FILES := $(skia_res_dir)
25f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollenskia_res_dir :=
26f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen
27f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen"""
28f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen)
29d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
30f50a79366f49fdc5ea726c74642ad6a706f1fe64scroggodef write_tool_android_mk(target_dir, var_dict):
31d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  """Write Android.mk for a Skia tool.
32d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
33d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  Args:
34d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    target_dir: Destination for the makefile. Must not be None.
35d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    var_dict: VarsDict containing variables for the makefile.
36d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  """
37d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  target_file = os.path.join(target_dir, 'Android.mk')
38d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  with open(target_file, 'w') as f:
39d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    f.write(makefile_writer.AUTOGEN_WARNING)
4061744ec1d2b0e287a652a419dac285c6a803e270commit-bot@chromium.org
41d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    makefile_writer.write_local_path(f)
42d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    makefile_writer.write_clear_vars(f)
43d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
44d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    makefile_writer.write_local_vars(f, var_dict, False, None)
45d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
46f056bd1e01078c02b35d00c22d55ef52b017ef7fdjsollen    f.write(SKIA_RESOURCES)
47f50a79366f49fdc5ea726c74642ad6a706f1fe64scroggo    f.write('include $(BUILD_NATIVE_TEST)\n')
48d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
49d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
50d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgdef generate_tool(gyp_dir, target_file, skia_trunk, dest_dir,
5161744ec1d2b0e287a652a419dac285c6a803e270commit-bot@chromium.org                  skia_lib_var_dict, local_module_name, local_module_tags,
5209acfc8d1fd1723d01b7103f58a6f1502648f428scroggo                  desired_targets, gyp_source_dir=None):
53d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  """Common steps for building one of the skia tools.
54d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
55d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  Parse a gyp file and create an Android.mk for this tool.
56d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
57d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  Args:
58d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    gyp_dir: Directory containing gyp files.
59d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    target_file: gyp file for the project to be built, contained in gyp_dir.
60d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    skia_trunk: Trunk of Skia, used for determining the destination to write
61d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      'Android.mk'.
62d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    dest_dir: Destination for 'Android.mk', relative to skia_trunk. Used for
63d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      both writing relative paths in the makefile and for determining the
64d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      destination to write the it.
65d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    skia_lib_var_dict: VarsDict representing libskia. Used as a reference to
66d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      ensure we do not duplicate anything in this Android.mk.
67d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    local_module_name: Name for this tool, to set as LOCAL_MODULE.
68d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    local_module_tags: Tags to pass to LOCAL_MODULE_TAG.
69950f89dd20325bf4dfce588d9f64644040787a06scroggo    desired_targets: List of targets to parse.
7009acfc8d1fd1723d01b7103f58a6f1502648f428scroggo    gyp_source_dir: Source directory for gyp.
71d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  """
72d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  result_file = android_framework_gyp.main(target_dir=gyp_dir,
73d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org                                           target_file=target_file,
74d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org                                           skia_arch_type='other',
7509acfc8d1fd1723d01b7103f58a6f1502648f428scroggo                                           have_neon=False,
7609acfc8d1fd1723d01b7103f58a6f1502648f428scroggo                                           gyp_source_dir=gyp_source_dir)
77d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
78d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  var_dict = vars_dict_lib.VarsDict()
79d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
80d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  # Add known targets from skia_lib, so we do not reparse them.
81d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  var_dict.KNOWN_TARGETS.set(skia_lib_var_dict.KNOWN_TARGETS)
82d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
83950f89dd20325bf4dfce588d9f64644040787a06scroggo  gypd_parser.parse_gypd(var_dict, result_file, dest_dir, desired_targets)
84d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
85d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  android_framework_gyp.clean_gypd_files(gyp_dir)
86d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
87d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  var_dict.LOCAL_MODULE.add(local_module_name)
88d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  for tag in local_module_tags:
89d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    var_dict.LOCAL_MODULE_TAGS.add(tag)
90d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
91d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  # No need for defines that are already in skia_lib.
92d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  for define in skia_lib_var_dict.DEFINES:
93d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    try:
94d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      var_dict.DEFINES.remove(define)
95d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    except ValueError:
96d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      # Okay if the define was not part of the parse for our tool.
97d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org      pass
98d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
99d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  if skia_trunk:
100d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    full_dest = os.path.join(skia_trunk, dest_dir)
101d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  else:
102d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    full_dest = dest_dir
103d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
104d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  # If the path does not exist, create it. This will happen during testing,
105d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  # where there is no subdirectory for each tool (just a temporary folder).
106d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org  if not os.path.exists(full_dest):
107d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org    os.mkdir(full_dest)
108d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org
109f50a79366f49fdc5ea726c74642ad6a706f1fe64scroggo  write_tool_android_mk(target_dir=full_dest, var_dict=var_dict)
110