1*fb1b10abSAndroid Build Coastguard Worker#!/bin/bash -e 2*fb1b10abSAndroid Build Coastguard Worker# 3*fb1b10abSAndroid Build Coastguard Worker# Copyright (c) 2012 The Chromium Authors. All rights reserved. 4*fb1b10abSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*fb1b10abSAndroid Build Coastguard Worker# found in the LICENSE file. 6*fb1b10abSAndroid Build Coastguard Worker 7*fb1b10abSAndroid Build Coastguard Worker# This script is used to compare vpx_config.h and vpx_config.asm to 8*fb1b10abSAndroid Build Coastguard Worker# verify the two files match. 9*fb1b10abSAndroid Build Coastguard Worker# 10*fb1b10abSAndroid Build Coastguard Worker# Arguments: 11*fb1b10abSAndroid Build Coastguard Worker# 12*fb1b10abSAndroid Build Coastguard Worker# -h - C Header file. 13*fb1b10abSAndroid Build Coastguard Worker# -a - ASM file. 14*fb1b10abSAndroid Build Coastguard Worker# -p - Print the options if correct. 15*fb1b10abSAndroid Build Coastguard Worker# -o - Output file. 16*fb1b10abSAndroid Build Coastguard Worker# 17*fb1b10abSAndroid Build Coastguard Worker# Usage: 18*fb1b10abSAndroid Build Coastguard Worker# 19*fb1b10abSAndroid Build Coastguard Worker# # Compare the two configuration files and output the final results. 20*fb1b10abSAndroid Build Coastguard Worker# ./lint_config.sh -h vpx_config.h -a vpx_config.asm -o libvpx.config -p 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Workerexport LC_ALL=C 23*fb1b10abSAndroid Build Coastguard Workerprint_final="no" 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Workerwhile getopts "h:a:o:p" flag 26*fb1b10abSAndroid Build Coastguard Workerdo 27*fb1b10abSAndroid Build Coastguard Worker if [ "$flag" = "h" ]; then 28*fb1b10abSAndroid Build Coastguard Worker header_file=$OPTARG 29*fb1b10abSAndroid Build Coastguard Worker elif [ "$flag" = "a" ]; then 30*fb1b10abSAndroid Build Coastguard Worker asm_file=$OPTARG 31*fb1b10abSAndroid Build Coastguard Worker elif [ "$flag" = "o" ]; then 32*fb1b10abSAndroid Build Coastguard Worker out_file=$OPTARG 33*fb1b10abSAndroid Build Coastguard Worker elif [ "$flag" = "p" ]; then 34*fb1b10abSAndroid Build Coastguard Worker print_final="yes" 35*fb1b10abSAndroid Build Coastguard Worker fi 36*fb1b10abSAndroid Build Coastguard Workerdone 37*fb1b10abSAndroid Build Coastguard Worker 38*fb1b10abSAndroid Build Coastguard Workerif [ -z "$header_file" ]; then 39*fb1b10abSAndroid Build Coastguard Worker echo "Header file not specified." 40*fb1b10abSAndroid Build Coastguard Worker false 41*fb1b10abSAndroid Build Coastguard Worker exit 42*fb1b10abSAndroid Build Coastguard Workerfi 43*fb1b10abSAndroid Build Coastguard Worker 44*fb1b10abSAndroid Build Coastguard Workerif [ -z "$asm_file" ]; then 45*fb1b10abSAndroid Build Coastguard Worker echo "ASM file not specified." 46*fb1b10abSAndroid Build Coastguard Worker false 47*fb1b10abSAndroid Build Coastguard Worker exit 48*fb1b10abSAndroid Build Coastguard Workerfi 49*fb1b10abSAndroid Build Coastguard Worker 50*fb1b10abSAndroid Build Coastguard Worker# Concat header file and assembly file and select those ended with 0 or 1. 51*fb1b10abSAndroid Build Coastguard Workercombined_config="$(cat $header_file $asm_file | grep -E ' +[01] *$')" 52*fb1b10abSAndroid Build Coastguard Worker 53*fb1b10abSAndroid Build Coastguard Worker# Extra filtering for known exceptions. 54*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)" 55*fb1b10abSAndroid Build Coastguard Worker 56*fb1b10abSAndroid Build Coastguard Worker# Remove all spaces. 57*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/[ \t]//g')" 58*fb1b10abSAndroid Build Coastguard Worker 59*fb1b10abSAndroid Build Coastguard Worker# Remove #define in the header file. 60*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/.*define//')" 61*fb1b10abSAndroid Build Coastguard Worker 62*fb1b10abSAndroid Build Coastguard Worker# Remove equ in the ASM file. 63*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/\.equ//')" # gas style 64*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/equ//')" # rvds style 65*fb1b10abSAndroid Build Coastguard Worker 66*fb1b10abSAndroid Build Coastguard Worker# Remove %define in YASM ASM files. 67*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/%define\s *//')" # yasm style 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Worker# Remove useless comma in gas style assembly file. 70*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/,//')" 71*fb1b10abSAndroid Build Coastguard Worker 72*fb1b10abSAndroid Build Coastguard Worker# Substitute 0 with =no. 73*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/0$/=no/')" 74*fb1b10abSAndroid Build Coastguard Worker 75*fb1b10abSAndroid Build Coastguard Worker# Substitute 1 with =yes. 76*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | sed 's/1$/=yes/')" 77*fb1b10abSAndroid Build Coastguard Worker 78*fb1b10abSAndroid Build Coastguard Worker# Find the mismatch variables. 79*fb1b10abSAndroid Build Coastguard Workerodd_config="$(echo "$combined_config" | sort | uniq -u)" 80*fb1b10abSAndroid Build Coastguard Workerodd_vars="$(echo "$odd_config" | sed 's/=.*//' | uniq)" 81*fb1b10abSAndroid Build Coastguard Worker 82*fb1b10abSAndroid Build Coastguard Workerfor var in $odd_vars; do 83*fb1b10abSAndroid Build Coastguard Worker echo "Error: Configuration mismatch for $var." 84*fb1b10abSAndroid Build Coastguard Worker echo "Header file: $header_file" 85*fb1b10abSAndroid Build Coastguard Worker echo "$(cat -n $header_file | grep "$var[ \t]")" 86*fb1b10abSAndroid Build Coastguard Worker echo "Assembly file: $asm_file" 87*fb1b10abSAndroid Build Coastguard Worker echo "$(cat -n $asm_file | grep "$var[ \t]")" 88*fb1b10abSAndroid Build Coastguard Worker echo "" 89*fb1b10abSAndroid Build Coastguard Workerdone 90*fb1b10abSAndroid Build Coastguard Worker 91*fb1b10abSAndroid Build Coastguard Workerif [ -n "$odd_vars" ]; then 92*fb1b10abSAndroid Build Coastguard Worker false 93*fb1b10abSAndroid Build Coastguard Worker exit 94*fb1b10abSAndroid Build Coastguard Workerfi 95*fb1b10abSAndroid Build Coastguard Worker 96*fb1b10abSAndroid Build Coastguard Workerif [ "$print_final" = "no" ]; then 97*fb1b10abSAndroid Build Coastguard Worker exit 98*fb1b10abSAndroid Build Coastguard Workerfi 99*fb1b10abSAndroid Build Coastguard Worker 100*fb1b10abSAndroid Build Coastguard Worker# Do some additional filter to make libvpx happy. 101*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | grep -v ARCH_X86=no)" 102*fb1b10abSAndroid Build Coastguard Workercombined_config="$(echo "$combined_config" | grep -v ARCH_X86_64=no)" 103*fb1b10abSAndroid Build Coastguard Worker 104*fb1b10abSAndroid Build Coastguard Worker# Print out the unique configurations. 105*fb1b10abSAndroid Build Coastguard Workerif [ -n "$out_file" ]; then 106*fb1b10abSAndroid Build Coastguard Worker echo "$combined_config" | sort | uniq > $out_file 107*fb1b10abSAndroid Build Coastguard Workerelse 108*fb1b10abSAndroid Build Coastguard Worker echo "$combined_config" | sort | uniq 109*fb1b10abSAndroid Build Coastguard Workerfi 110