blob: 7db3e7e0518e8cf0bbc9c1a806096cc54a1abf81 [file] [log] [blame]
#!/bin/bash -u
# Copyright 2018 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.
# This script extracts command line options to build bad item.
# The generated script will be used by pass level bisection.
#
source android/common.sh
abs_path=$1
# The item will be `-o relative-path-to-object `, which will be used
# for seeking command in populate log.
# We care about the `-o` at the beginning and ` ` at the end are necessary,
# so that we can get build command for exact this object file.
# Example: prebuilt/../clang++ -O3 -MF obj1.o.d -o obj.o obj.cpp
# We should count this command as one to build obj.o, not obj1.o.d.
real_path=$(realpath --relative-to="${BISECT_WORK_BUILD}" "${abs_path}")
item="-o $real_path "
populate_log=${BISECT_BAD_BUILD}/_POPULATE_LOG
output='#!/bin/bash -u\n'
output+='source android/common.sh\n'
result=$(egrep -m 1 -- "${item}" ${populate_log})
# Remove `:` after cd command
result=$(sed 's/cd\:/cd/g' <<< ${result})
# Add environment variable which helps pass level bisection
result=$(sed 's/ \-o / $LIMIT_FLAGS \-o /g' <<< ${result})
output+=${result}
echo -e "${output}" > android/cmd_script.sh
chmod u+x android/cmd_script.sh
echo 'Script created as android/cmd_script.sh'
# Check if compiler is LLVM.
if grep -q "clang" android/cmd_script.sh
then
exit 0
else
echo 'Pass/transformation level bisection only works for LLVM compiler.'
exit 1
fi