1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#!/usr/bin/env python
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Copyright 2017 Google Inc.
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Use of this source code is governed by a BSD-style license that can be
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# found in the LICENSE file.
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot"""Create the asset."""
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport argparse
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport common
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport grp
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport os
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport pwd
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport shutil
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport subprocess
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport sys
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport tempfile
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport urllib2
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport utils
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotVALGRIND = 'valgrind-3.13.0'
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotTARBALL = '%s.tar.bz2' % VALGRIND
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDOWNLOAD_URL = 'ftp://sourceware.org/pub/valgrind/%s' % TARBALL
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotTEMP_DIR = os.path.join(tempfile.gettempdir(), 'skia-%s' % VALGRIND)
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotINSTALL_DIR = os.path.join(TEMP_DIR, 'valgrind_install')
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef download_tarball():
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  with utils.chdir(TEMP_DIR):
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    if os.path.isfile(TARBALL):
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      return
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    with open(TARBALL, 'wb') as f:
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      f.write(urllib2.urlopen(DOWNLOAD_URL).read())
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef unzip_tarball():
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  with utils.chdir(TEMP_DIR):
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    if os.path.isdir(VALGRIND):
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      return
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    subprocess.check_call(['tar', 'xvjf', TARBALL])
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef create_install_dir():
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  if os.path.isdir(INSTALL_DIR):
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  os.makedirs(INSTALL_DIR)
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef build_valgrind():
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  if os.path.isfile(os.path.join(INSTALL_DIR, 'bin', 'valgrind')):
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)):
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    subprocess.check_call(['./configure', '--prefix=%s' % INSTALL_DIR])
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    subprocess.check_call(['make'])
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    subprocess.check_call(['make', 'install'])
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef copy_files(target_dir):
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)):
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    os.mkdir(os.path.join(target_dir, 'bin'))
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    shutil.copy(os.path.join(INSTALL_DIR, 'bin', 'valgrind'),
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                os.path.join(target_dir, 'bin', 'valgrind'))
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    os.mkdir(os.path.join(target_dir, 'lib'))
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    os.mkdir(os.path.join(target_dir, 'lib', 'valgrind'))
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for lib in ['memcheck-amd64-linux']:
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', lib),
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  os.path.join(target_dir, 'lib', 'valgrind', lib))
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for lib in ['core', 'memcheck']:
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      libname = 'vgpreload_%s-amd64-linux.so' % lib
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', libname),
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  os.path.join(target_dir, 'lib', 'valgrind', libname))
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    shutil.copy('default.supp',
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                os.path.join(target_dir, 'lib', 'valgrind', 'default.supp'))
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef create_asset(target_dir):
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  """Create the asset."""
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  if os.name == 'nt':
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    print 'This script does not run on Windows.'
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sys.exit(1)
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  create_install_dir()
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  if not os.path.isdir(TEMP_DIR):
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    os.makedirs(TEMP_DIR)
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  download_tarball()
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  unzip_tarball()
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  build_valgrind()
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  copy_files(target_dir)
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef main():
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  parser = argparse.ArgumentParser()
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  parser.add_argument('--target_dir', '-t', required=True)
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  args = parser.parse_args()
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  create_asset(args.target_dir)
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotif __name__ == '__main__':
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot  main()
105