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