Files
opensbi/scripts/carray.sh
Samuel Holland df1c100001 treewide: Make carray arrays const and NULL-terminated
This allows the compiler to generate significantly better code, because
it does not have to maintain either the loop counter or loop limit. Plus
there are half as many symbols to relocate. This also simplifies passing
carray arrays to helper functions.

Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
2024-11-28 17:09:17 +05:30

78 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
function usage()
{
echo "Usage:"
echo " $0 [options]"
echo "Options:"
echo " -h Display help or usage"
echo " -i <input_config> Input config file"
echo " -l <variable_list> List of variables in the array (Optional)"
exit 1;
}
# Command line options
CONFIG_FILE=""
VAR_LIST=""
while getopts "hi:l:" o; do
case "${o}" in
h)
usage
;;
i)
CONFIG_FILE=${OPTARG}
;;
l)
VAR_LIST=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z "${CONFIG_FILE}" ]; then
echo "Must specify input config file"
usage
fi
if [ ! -f "${CONFIG_FILE}" ]; then
echo "The input config file should be a present"
usage
fi
TYPE_HEADER=`cat ${CONFIG_FILE} | awk '{ if ($1 == "HEADER:") { printf $2; exit 0; } }'`
if [ -z "${TYPE_HEADER}" ]; then
echo "Must specify HEADER: in input config file"
usage
fi
TYPE_NAME=`cat ${CONFIG_FILE} | awk '{ if ($1 == "TYPE:") { printf $2; for (i=3; i<=NF; i++) printf " %s", $i; exit 0; } }'`
if [ -z "${TYPE_NAME}" ]; then
echo "Must specify TYPE: in input config file"
usage
fi
ARRAY_NAME=`cat ${CONFIG_FILE} | awk '{ if ($1 == "NAME:") { printf $2; exit 0; } }'`
if [ -z "${ARRAY_NAME}" ]; then
echo "Must specify NAME: in input config file"
usage
fi
printf "// Generated with $(basename $0) from $(basename ${CONFIG_FILE})\n"
printf "#include <%s>\n\n" "${TYPE_HEADER}"
for VAR in ${VAR_LIST}; do
printf "extern %s %s;\n" "${TYPE_NAME}" "${VAR}"
done
printf "\n"
printf "%s *const %s[] = {\n" "${TYPE_NAME}" "${ARRAY_NAME}"
for VAR in ${VAR_LIST}; do
printf "\t&%s,\n" "${VAR}"
done
printf "\tNULL\n"
printf "};\n"