189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org#!/usr/bin/python 289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# Copyright 2014 Google Inc. 489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# 589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# Use of this source code is governed by a BSD-style license that can be 689335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# found in the LICENSE file. 789335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 889335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org""" 989335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.orgModified version of gyp_skia, used by gyp_to_android.py to generate Android.mk 1089335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org""" 1189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 1289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.orgimport os 1389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.orgimport sys 1489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 1589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.orgSCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) 1689335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 1789335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# Unlike gyp_skia, this file is nested deep inside Skia. Find Skia's trunk dir. 1889335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org# This line depends on the fact that the script is three levels deep 19d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org# (specifically, it is in platform_tools/android/gyp_gen). 2089335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.orgSKIA_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir, 2189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org os.pardir)) 2264ca10287a6191dbb6835bb0583a6d1fbe684650commit-bot@chromium.orgDIR_CONTENTS = os.listdir(SKIA_DIR) 2364ca10287a6191dbb6835bb0583a6d1fbe684650commit-bot@chromium.orgassert 'gyp' in DIR_CONTENTS 2489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 252932276444fc56f86c53a57acb5c25587a094787scroggoDEBUG_FAILURE = True 262932276444fc56f86c53a57acb5c25587a094787scroggo 2760936c732b1d21940a21a95f5757ae24c666877bscroggodef main(target_dir, target_file, skia_arch_type, have_neon, 2860936c732b1d21940a21a95f5757ae24c666877bscroggo gyp_source_dir=None): 29d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org """Create gypd files based on target_file. 30d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org 31d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org Args: 32d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org target_dir: Directory containing all gyp files, including common.gypi 33d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org target_file: Gyp file to start on. Other files within target_dir will 34d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org be read if target_file depends on them. 35d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org skia_arch_type: Target architecture to pass to gyp. 36d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org have_neon: Whether to generate files including neon optimizations. 37d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org Only meaningful if skia_arch_type is 'arm'. 3860936c732b1d21940a21a95f5757ae24c666877bscroggo gyp_source_dir: Directory of the gyp source code. The default is in 3960936c732b1d21940a21a95f5757ae24c666877bscroggo third_party/externals/gyp. 40d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org 41d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org Returns: 42d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org path: Path to root gypd file created by running gyp. 4389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org """ 4460936c732b1d21940a21a95f5757ae24c666877bscroggo # Ensure we import our current gyp source's module, not any version 4560936c732b1d21940a21a95f5757ae24c666877bscroggo # pre-installed in your PYTHONPATH. 4660936c732b1d21940a21a95f5757ae24c666877bscroggo if not gyp_source_dir: 472932276444fc56f86c53a57acb5c25587a094787scroggo if DEBUG_FAILURE: 482932276444fc56f86c53a57acb5c25587a094787scroggo print 'gyp_source_dir not provided. using the default!' 4960936c732b1d21940a21a95f5757ae24c666877bscroggo gyp_source_dir = os.path.join(SKIA_DIR, 'third_party', 'externals', 'gyp') 502932276444fc56f86c53a57acb5c25587a094787scroggo 512932276444fc56f86c53a57acb5c25587a094787scroggo if DEBUG_FAILURE: 522932276444fc56f86c53a57acb5c25587a094787scroggo print 'gyp_source_dir is "%s"' % gyp_source_dir 532932276444fc56f86c53a57acb5c25587a094787scroggo if not os.path.exists(gyp_source_dir): 542932276444fc56f86c53a57acb5c25587a094787scroggo print 'and it does not exist!' 552932276444fc56f86c53a57acb5c25587a094787scroggo 5660936c732b1d21940a21a95f5757ae24c666877bscroggo assert os.path.exists(gyp_source_dir) 5760936c732b1d21940a21a95f5757ae24c666877bscroggo 5860936c732b1d21940a21a95f5757ae24c666877bscroggo sys.path.insert(0, os.path.join(gyp_source_dir, 'pylib')) 5960936c732b1d21940a21a95f5757ae24c666877bscroggo 6060936c732b1d21940a21a95f5757ae24c666877bscroggo import gyp 6160936c732b1d21940a21a95f5757ae24c666877bscroggo 6289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # Set GYP_DEFINES for building for the android framework. 6389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org gyp_defines = ('skia_android_framework=1 OS=android skia_arch_type=%s ' 6489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org % skia_arch_type) 6589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org if skia_arch_type == 'arm': 662d33a1d0b03dc7cb171c6f34680f1966fa686d38mtklein # Always version 7 (which implies thumb) for arm 672d33a1d0b03dc7cb171c6f34680f1966fa686d38mtklein gyp_defines += 'arm_version=7 ' 6889335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org if have_neon: 6989335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org gyp_defines += 'arm_neon=1 ' 7089335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org else: 7189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org gyp_defines += 'arm_neon=0 ' 7289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 7389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org os.environ['GYP_DEFINES'] = gyp_defines 7489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 7589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org args = [] 7689335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org args.extend(['--depth', '.']) 7789335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org full_path = os.path.join(target_dir, target_file) 7889335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org args.extend([full_path]) 7989335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # Common conditions 8089335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org args.extend(['-I', os.path.join(target_dir, 'common.gypi')]) 8189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # Use the debugging format. We'll use these to create one master make file. 8289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org args.extend(['-f', 'gypd']) 8389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 8489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # Off we go... 8589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org ret = gyp.main(args) 8689335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 8789335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org if ret != 0: 8889335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org raise Exception("gyp failed!") 8989335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 9089335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # Running gyp should have created a gypd file, with the same name as 9189335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org # full_path but with a 'd' on the end. 9289335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org gypd_file = full_path + 'd' 9389335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org if not os.path.exists(gypd_file): 9489335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org raise Exception("gyp failed to produce gypd file!") 9589335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org 9689335631749b29ea92e55ed710f030692aa13297commit-bot@chromium.org return gypd_file 97d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org 98d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org 99d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.orgdef clean_gypd_files(folder): 100d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org """Remove the gypd files generated by main(). 101d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org 102d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org Args: 103d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org folder: Folder in which to delete all files ending with 'gypd'. 104d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org """ 105d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org assert os.path.isdir(folder) 106d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org files = os.listdir(folder) 107d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org for f in files: 108d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org if f.endswith('gypd'): 109d6656854697b2039fb88a4afd6bc1995bf6dfa02commit-bot@chromium.org os.remove(os.path.join(folder, f)) 110