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