forked from Mirrors/opensbi

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>
78 lines
1.6 KiB
Bash
Executable File
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"
|