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