130 lines
4.0 KiB
Python
130 lines
4.0 KiB
Python
# Copyright 2017 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Helper functions to put user defined flags to mk/bp files"""
|
|
|
|
from __future__ import print_function
|
|
|
|
import config
|
|
import os
|
|
import subprocess
|
|
|
|
|
|
# Find the makefile/blueprint based on the benchmark, and make a copy of
|
|
# it for restoring later.
|
|
def backup_file(bench, file_type):
|
|
mk_file = os.path.join(config.android_home, config.bench_dict[bench],
|
|
'Android.' + file_type)
|
|
try:
|
|
# Make a copy of the makefile/blueprint so that we can recover it after
|
|
# building the benchmark
|
|
subprocess.check_call([
|
|
'cp', mk_file,
|
|
os.path.join(config.android_home, config.bench_dict[bench],
|
|
'tmp_makefile')
|
|
])
|
|
except subprocess.CalledProcessError():
|
|
raise OSError('Cannot backup Android.%s file for %s' % (file_type,
|
|
bench))
|
|
|
|
|
|
# Insert lines to add LOCAL_CFLAGS/LOCAL_LDFLAGS to the benchmarks
|
|
# makefile/blueprint
|
|
def replace_flags(bench, android_type, file_type, cflags, ldflags):
|
|
# Use format ["Flag1", "Flag2"] for bp file
|
|
if file_type == 'bp':
|
|
if cflags:
|
|
cflags = '\", \"'.join(cflags.split())
|
|
if ldflags:
|
|
ldflags = '\", \"'.join(ldflags.split())
|
|
|
|
if not cflags:
|
|
cflags = ''
|
|
else:
|
|
cflags = '\"' + cflags + '\",'
|
|
if not ldflags:
|
|
ldflags = ''
|
|
else:
|
|
ldflags = '\"' + ldflags + '\",'
|
|
|
|
# Two different diffs are used for aosp or internal android repo.
|
|
if android_type == 'aosp':
|
|
bench_diff = bench + '_flags_aosp.diff'
|
|
else:
|
|
bench_diff = bench + '_flags_internal.diff'
|
|
|
|
# Replace CFLAGS_FOR_BENCH_SUITE marker with proper cflags
|
|
output = ''
|
|
with open(bench_diff) as f:
|
|
for line in f:
|
|
line = line.replace('CFLAGS_FOR_BENCH_SUITE', cflags)
|
|
line = line.replace('LDFLAGS_FOR_BENCH_SUITE', ldflags)
|
|
output += line
|
|
|
|
with open('modified.diff', 'w') as f:
|
|
f.write(output)
|
|
|
|
|
|
def apply_patches(bench):
|
|
bench_dir = os.path.join(config.android_home, config.bench_dict[bench])
|
|
bench_diff = 'modified.diff'
|
|
flags_patch = os.path.join(
|
|
os.path.dirname(os.path.realpath(__file__)), bench_diff)
|
|
try:
|
|
subprocess.check_call(['git', '-C', bench_dir, 'apply', flags_patch])
|
|
except subprocess.CalledProcessError:
|
|
raise OSError('Patch for adding flags for %s does not succeed.' % bench)
|
|
|
|
|
|
def replace_flags_in_dir(bench, cflags, ldflags):
|
|
bench_mk = os.path.join(config.android_home, config.bench_dict[bench],
|
|
'Android.mk')
|
|
|
|
if not cflags:
|
|
cflags = ''
|
|
if not ldflags:
|
|
ldflags = ''
|
|
|
|
output = ''
|
|
with open(bench_mk) as f:
|
|
for line in f:
|
|
line = line.replace('$(CFLAGS_FOR_BENCH_SUITE)', cflags)
|
|
line = line.replace('$(LDFLAGS_FOR_BENCH_SUITE)', ldflags)
|
|
output += line
|
|
with open(bench_mk, 'w') as f:
|
|
f.write(output)
|
|
|
|
|
|
def add_flags_Panorama(cflags, ldflags):
|
|
backup_file('Panorama', 'mk')
|
|
replace_flags_in_dir('Panorama', cflags, ldflags)
|
|
|
|
|
|
def add_flags_Synthmark(cflags, ldflags):
|
|
backup_file('Synthmark', 'mk')
|
|
replace_flags_in_dir('Synthmark', cflags, ldflags)
|
|
|
|
|
|
def add_flags_Skia(cflags, ldflags):
|
|
backup_file('Skia', 'bp')
|
|
replace_flags('Skia', config.android_type, 'bp', cflags, ldflags)
|
|
apply_patches('Skia')
|
|
|
|
|
|
def add_flags_Binder(cflags, ldflags):
|
|
backup_file('Binder', 'bp')
|
|
replace_flags('Binder', config.android_type, 'bp', cflags, ldflags)
|
|
apply_patches('Binder')
|
|
|
|
|
|
def add_flags_Hwui(cflags, ldflags):
|
|
backup_file('Hwui', 'bp')
|
|
replace_flags('Hwui', config.android_type, 'bp', cflags, ldflags)
|
|
apply_patches('Hwui')
|
|
|
|
|
|
def add_flags_Dex2oat(cflags, ldflags):
|
|
backup_file('Dex2oat', 'bp')
|
|
replace_flags('Dex2oat', config.android_type, 'bp', cflags, ldflags)
|
|
apply_patches('Dex2oat')
|