1#!/usr/bin/python 2 3# Copyright 2014 Google Inc. 4# 5# Use of this source code is governed by a BSD-style license that can be 6# found in the LICENSE file. 7 8"""Code for generating Android.mk for a tool.""" 9 10 11import android_framework_gyp 12import gypd_parser 13import makefile_writer 14import os 15import vars_dict_lib 16 17 18def write_tool_android_mk(target_dir, var_dict, place_in_local_tmp): 19 """Write Android.mk for a Skia tool. 20 21 Args: 22 target_dir: Destination for the makefile. Must not be None. 23 var_dict: VarsDict containing variables for the makefile. 24 place_in_local_tmp: If True, the executable will be synced to 25 /data/local/tmp. 26 """ 27 target_file = os.path.join(target_dir, 'Android.mk') 28 with open(target_file, 'w') as f: 29 f.write(makefile_writer.AUTOGEN_WARNING) 30 31 if place_in_local_tmp: 32 f.write('local_target_dir := $(TARGET_OUT_DATA)/local/tmp\n') 33 34 makefile_writer.write_local_path(f) 35 makefile_writer.write_clear_vars(f) 36 37 makefile_writer.write_local_vars(f, var_dict, False, None) 38 39 if place_in_local_tmp: 40 f.write('LOCAL_MODULE_PATH := $(local_target_dir)\n') 41 42 makefile_writer.write_include_stlport(f) 43 f.write('include $(BUILD_EXECUTABLE)\n') 44 45 46def generate_tool(gyp_dir, target_file, skia_trunk, dest_dir, 47 skia_lib_var_dict, local_module_name, local_module_tags, 48 place_in_local_tmp=False): 49 """Common steps for building one of the skia tools. 50 51 Parse a gyp file and create an Android.mk for this tool. 52 53 Args: 54 gyp_dir: Directory containing gyp files. 55 target_file: gyp file for the project to be built, contained in gyp_dir. 56 skia_trunk: Trunk of Skia, used for determining the destination to write 57 'Android.mk'. 58 dest_dir: Destination for 'Android.mk', relative to skia_trunk. Used for 59 both writing relative paths in the makefile and for determining the 60 destination to write the it. 61 skia_lib_var_dict: VarsDict representing libskia. Used as a reference to 62 ensure we do not duplicate anything in this Android.mk. 63 local_module_name: Name for this tool, to set as LOCAL_MODULE. 64 local_module_tags: Tags to pass to LOCAL_MODULE_TAG. 65 place_in_local_tmp: If True, the executable will be synced to 66 /data/local/tmp. 67 """ 68 result_file = android_framework_gyp.main(target_dir=gyp_dir, 69 target_file=target_file, 70 skia_arch_type='other', 71 have_neon=False) 72 73 var_dict = vars_dict_lib.VarsDict() 74 75 # Add known targets from skia_lib, so we do not reparse them. 76 var_dict.KNOWN_TARGETS.set(skia_lib_var_dict.KNOWN_TARGETS) 77 78 gypd_parser.parse_gypd(var_dict, result_file, dest_dir) 79 80 android_framework_gyp.clean_gypd_files(gyp_dir) 81 82 var_dict.LOCAL_MODULE.add(local_module_name) 83 for tag in local_module_tags: 84 var_dict.LOCAL_MODULE_TAGS.add(tag) 85 86 # No need for defines that are already in skia_lib. 87 for define in skia_lib_var_dict.DEFINES: 88 try: 89 var_dict.DEFINES.remove(define) 90 except ValueError: 91 # Okay if the define was not part of the parse for our tool. 92 pass 93 94 if skia_trunk: 95 full_dest = os.path.join(skia_trunk, dest_dir) 96 else: 97 full_dest = dest_dir 98 99 # If the path does not exist, create it. This will happen during testing, 100 # where there is no subdirectory for each tool (just a temporary folder). 101 if not os.path.exists(full_dest): 102 os.mkdir(full_dest) 103 104 write_tool_android_mk(target_dir=full_dest, var_dict=var_dict, 105 place_in_local_tmp=place_in_local_tmp) 106