1#!/bin/sh 2# generate all ARCH*.inc files for Capstone, by Nguyen Anh Quynh 3 4# Syntax: genall-arch.sh <LLVM-dir-with-inc-files> <clean-old-Capstone-arch-ARCH-dir> <arch> 5 6# ./genall-arch.sh tablegen ~/projects/capstone.git/arch/ARM ARM 7# ./genall-arch.sh tablegen ~/projects/capstone.git/arch/ARM AArch64 8# ./genall-arch.sh tablegen ~/projects/capstone.git/arch/ARM PowerPC 9 10ARCH=$3 11 12echo "Generating ${ARCH}GenAsmWriter.inc" 13./asmwriter.py $1/${ARCH}GenAsmWriter.inc ${ARCH}GenAsmWriter.inc ${ARCH}GenRegisterName.inc ${ARCH} 14 15echo "Generating ${ARCH}MappingInsnName.inc" 16./mapping_insn_name-arch.py $1/${ARCH}GenAsmMatcher.inc > ${ARCH}MappingInsnName.inc 17#./mapping_insn_name-arch.py tablegen/ARMGenAsmMatcher.inc 18 19echo "Generating ${ARCH}MappingInsn.inc" 20./mapping_insn-arch.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsn.inc > ${ARCH}MappingInsn.inc 21 22echo "Generating ${ARCH}GenInstrInfo.inc" 23./instrinfo-arch.py $1/${ARCH}GenInstrInfo.inc ${ARCH} > ${ARCH}GenInstrInfo.inc 24 25echo "Generating ${ARCH}GenDisassemblerTables.inc" 26./disassemblertables-arch.py $1/${ARCH}GenDisassemblerTables.inc ${ARCH} > ${ARCH}GenDisassemblerTables.inc 27 28echo "Generating ${ARCH}GenRegisterInfo.inc" 29./registerinfo.py $1/${ARCH}GenRegisterInfo.inc ${ARCH} > ${ARCH}GenRegisterInfo.inc 30 31echo "Generating ${ARCH}GenSubtargetInfo.inc" 32./subtargetinfo.py $1/${ARCH}GenSubtargetInfo.inc ${ARCH} > ${ARCH}GenSubtargetInfo.inc 33 34case $3 in 35 ARM) 36 # for ARM only 37 echo "Generating ${ARCH}GenAsmWriter-digit.inc" 38 ./asmwriter.py $1/${ARCH}GenAsmWriter-digit.inc ${ARCH}GenAsmWriter.inc ${ARCH}GenRegisterName_digit.inc ${ARCH} 39 echo "Generating ${ARCH}GenSystemRegister.inc" 40 ./systemregister.py $1/${ARCH}GenSystemRegister.inc > ${ARCH}GenSystemRegister.inc 41 echo "Generating instruction enum in insn_list.txt (for include/capstone/<arch>.h)" 42 ./insn.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsn.inc > insn_list.txt 43 # then copy these instructions to include/capstone/<arch>.h 44 echo "Generating ${ARCH}MappingInsnOp.inc" 45 ./mapping_insn_op-arch.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsnOp.inc > ${ARCH}MappingInsnOp.inc 46 echo "Generating ${ARCH}GenSystemRegister.inc" 47 ./systemregister.py $1/${ARCH}GenSystemRegister.inc > ${ARCH}GenSystemRegister.inc 48 ;; 49 AArch64) 50 echo "Generating ${ARCH}GenSystemOperands.inc" 51 ./systemoperand.py tablegen/AArch64GenSystemOperands.inc AArch64GenSystemOperands.inc AArch64GenSystemOperands_enum.inc 52 echo "Generating instruction enum in insn_list.txt (for include/capstone/<arch>.h)" 53 ./insn.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsn.inc > insn_list.txt 54 # then copy these instructions to include/capstone/<arch>.h 55 ./arm64_gen_vreg > AArch64GenRegisterV.inc 56 echo "Generating ${ARCH}MappingInsnOp.inc" 57 ./mapping_insn_op-arch.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsnOp.inc > ${ARCH}MappingInsnOp.inc 58 make arm64 59 ;; 60 PowerPC) 61 # PowerPC 62 ./insn3.py $1/${ARCH}GenAsmMatcher.inc > insn_list.txt 63 # then copy these instructions to include/capstone/arch.h 64 ;; 65 *) 66 echo "Generating instruction enum in insn_list.txt (for include/capstone/<arch>.h)" 67 ./insn.py $1/${ARCH}GenAsmMatcher.inc $1/${ARCH}GenInstrInfo.inc $2/${ARCH}MappingInsn.inc > insn_list.txt 68 ;; 69esac 70 71