#!/bin/sh if [ $# -lt 4 ]; then echo "Usage: $0 > ${MAKEFILE_TMP} $echo "include ${globalmk}" >> ${MAKEFILE_TMP} $echo >> ${MAKEFILE_TMP} OPCODES=`find ${input} -name '*c' -and -not -name '*.tmpl.c' -exec basename {} \; | cut -d . -f 3 | sort | uniq` # Génération des en-têtes de décodage for arch in $*; do $echo -n "${arch}_HEADER_FILES =" | tr [a-z] [A-Z] >> ${MAKEFILE_TMP} has_header="" for op in $OPCODES; do template="${input}/*${arch}_.${op}.c" sources=`ls $template 2> /dev/null` if [ -z "${sources}" ]; then continue fi for src in ${sources}; do has_header="yes" $echo -ne " \\" >> ${MAKEFILE_TMP} $echo -ne "\n\t" >> ${MAKEFILE_TMP} $echo -n ${src} | sed "s/${op}.c$/opcodes.h/" >> ${MAKEFILE_TMP} done done $echo >> ${MAKEFILE_TMP} $echo >> ${MAKEFILE_TMP} $echo -n "${arch}_opcodes.h: " >> ${MAKEFILE_TMP} $echo "\$(${arch}_HEADER_FILES)" | tr [a-z] [A-Z] >> ${MAKEFILE_TMP} if [ -z "${has_header}" ]; then $echo -e "\techo > \$@" >> ${MAKEFILE_TMP} else $echo -e "\t\$(cini_verbose)cat ${input}/${arch}_.opcodes.tmpl.h > \$@" >> ${MAKEFILE_TMP} $echo -e "\t\$(cgen_verbose)cat \$^ >> \$@" >> ${MAKEFILE_TMP} $echo -e "\t\$(cfini_verbose)echo >> \$@" >> ${MAKEFILE_TMP} $echo -en "\t\$(cfini_verbose)echo \"#endif\t /* " >> ${MAKEFILE_TMP} $echo -en '`cat \$@ | grep "#define" | cut -d " " -f 2`' >> ${MAKEFILE_TMP} $echo -e " */\" >> \$@" >> ${MAKEFILE_TMP} fi $echo >> ${MAKEFILE_TMP} done $echo >> ${MAKEFILE_TMP} # Génération des codes d'instructions for op in $OPCODES; do for arch in $*; do template="${input}/*${arch}_.${op}.c" sources=`ls $template 2> /dev/null` if [ -z "${sources}" ]; then continue fi $echo -n "${op}_${arch}_FILES =" | tr [a-z] [A-Z] >> ${MAKEFILE_TMP} for src in ${sources}; do $echo -ne " \\" >> ${MAKEFILE_TMP} $echo -ne "\n\t${src}" >> ${MAKEFILE_TMP} done $echo >> ${MAKEFILE_TMP} $echo >> ${MAKEFILE_TMP} $echo -n "${arch}_${op}.c: " >> ${MAKEFILE_TMP} $echo -n "\$(${op}_${arch}_FILES)" | tr [a-z] [A-Z] >> ${MAKEFILE_TMP} $echo " ${arch}_opcodes.h" >> ${MAKEFILE_TMP} $echo -e "\t\$(cini_verbose)cat ${input}/${arch}_.${op}.tmpl.c > \$@" >> ${MAKEFILE_TMP} $echo -ne "\t\$(cgen_verbose)cat \$(" >> ${MAKEFILE_TMP} $echo -ne "${op}_${arch}_FILES" | tr [a-z] [A-Z] >> ${MAKEFILE_TMP} $echo -e ") >> \$@" >> ${MAKEFILE_TMP} $echo >> ${MAKEFILE_TMP} done done $echo >> ${MAKEFILE_TMP} # Génération de la liste des sources $echo -n "GENERATED_FILES =" >> ${MAKEFILE_TMP} for arch in $*; do $echo -ne " \\" >> ${MAKEFILE_TMP} $echo -ne "\n\t${arch}_opcodes.h" >> ${MAKEFILE_TMP} for op in $OPCODES; do template="${input}/*${arch}_.${op}.c" sources=`ls $template 2> /dev/null` if [ ! -z "${sources}" ]; then $echo -ne " \\" >> ${MAKEFILE_TMP} $echo -ne "\n\t${arch}_${op}.c" >> ${MAKEFILE_TMP} continue fi done done $echo >> ${MAKEFILE_TMP} $echo >> ${MAKEFILE_TMP} # Validation finale if [ ! -f ]; then rm -rf ${MAKEFILE_EXT} mv ${MAKEFILE_TMP} ${MAKEFILE_EXT} else hash_tmp=`md5sum ${MAKEFILE_TMP} | cut -d ' ' -f 1` hash_ext=`md5sum ${MAKEFILE_EXT} | cut -d ' ' -f 1` if [ "${hash_tmp}" = "${hash_ext}" ]; then rm -f ${MAKEFILE_TMP} echo "${MAKEFILE_EXT} is up to date." else rm -f ${MAKEFILE_EXT} mv ${MAKEFILE_TMP} ${MAKEFILE_EXT} echo "${MAKEFILE_EXT} is updated." fi fi cd ${OLDPWD}