xref: /aosp_15_r20/external/libvpx/lint_config.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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