Files
kaizen/BUILDING.md
irisz64 16a2cf3873 Squashed 'external/capstone/' changes from b102f1b8..5af28808
5af28808 Update Auto-Sync to Python 3.13 and tree-sitter-py 24.0 (#2705)
99f018ac Python binding: (#2742)
a07baf83 Auto-Sync update Sparc LLVM-18 (#2704)
81c5c93d Enable to generate legacy MC tests for the fuzzer. (#2733)
a25d4980 Add warning about naive search and replace to patch reg names. (#2728)
7ac87d17 Print immediate only memory operands for AArch64. (#2732)
c34034c8 Add x30 implicit read to the RET alias. (#2739)
95a4ca3e Update source list before installing valgrind. (#2730)
6909724e Make assertion hit warnings optional in release builds. (#2729)
fe6bdc6e Make SStream respect the CS_OPT_UNSIGNED flag. (#2723)
21ce3624 Use cs_ac_type for operand access mode in all arches and use cs_xtensa_op_type for Xtensa operand type (#2721)
df26583f clang-format: change license to BSD-3-Clause (#2724)
280b749e Remove unused files. (#2709)
87908ece Add flag for the SoftFail case of the LLVM disassembler. (#2707)
efc0ba44 Fix missing operand for smstart, due to space replaced by tab (#2720)
2ae64133 Fix missing sp register read in ret instruction (#2719)
8df252a6 Fix arm pop reg access (#2718)
14612272 ARM: fix typo, cspr -> cpsr (#2716)
f2f0a3c3 Fix LoongArch ld/st instructions register info (#2701)
829be2bf LoongArch: Compute absolute address for address operand (#2699)
42fbce6c Add jump group for generic jirl (#2698)
fc525c73 Apple AArch64 proprietary (#2692)
895f2f2e Build PDB for debugging on Windows (#2685)
5c3aef03 Version: Update to v6.0.0-alpha4 (#2682)
106f7d3b Update read/written registers for x87 comparison instructions (#2680)
ebe3ef2a Add workflow for building on Windows (#2675)
72f7d305 Revert "Add a script to compare the inc file content with the latest generate…" (#2678)
5b5c5ed8 Fix nanomips decoding of jalrc (#2672)
ae03cca4 Mips32r6_64r632 is for both mips32r6 and mips64r6 (#2673)
21178aea Add a script to compare the inc file content with the latest generated ones. (#2667)
81a6ba03 MIPS: Fix MIPS16 decoding, wrong flags and ghost registers (#2665)
98a393e3 Stringify BH fields when printing ppc details (#2663)
2607d0f3 Remove undefined constants in riscv_const.py (#2660) (#2661)
5058c634 Decode BH field in print_insn_detail_ppc (#2662)
6461ed08 Add Call group to svc, smc and hvc. (#2651)
e2f1dc8d Tms32c64x Little Endian (#2648)
5464c91d Fix build for compilers requiring explicit static for inline functions.. (#2645)
bb2f6579 Enhance shift value and types of shift instructions. (#2638)
cd282ef5 Update operand type enums of all arch modules to the one in `capstone.h` (#2633)
dc0c0909 cmake: Fix building capstone as sub-project (#2629)
cd8dd20c - Added missing files for sdist archive (#2624)
9affd99b Give the user some guidance where to add missing enumeration values. (#2639)
1bea3fab Add checks for MIPS details on cstest_py (#2640)
ace8056c Add aliases mapping for MIPS & test for id, alias_id (#2635)
1abe1868 Build Tarball before DEB/RPM package. (#2627)
0a012190 Switch to ubuntu-24.04-arm runner image (#2625)
4e0b8c48 Fix wrong version requirement of tricore instructions: (#2620)
8ac2843b chore(version): Update Version to 6.0.0-Alpha3 (#2616)
d7ef910b Rebased #2570 (#2614)
c831cd5e Fix SystemZ macro in Makefile (#2603)
30601176 Apply new EVM opcode updates (#2602)
3c4d7fc8 Add tricore tc1.8 instructions (#2595)
5f290cad Create debian and rpm package on releases (#2590)
0f09210a delete travis (#2600)
5c5f756f Downgrade labeler to v4 due to https://github.com/actions/labeler/issues/710. (#2598)

git-subtree-dir: external/capstone
git-subtree-split: 5af288083e9f03e32723f9708c305692f866b666
2025-06-26 22:15:44 +02:00

4.6 KiB

Building Capstone

This guide describes how to build Capstone with CMake.

Build commands

Unix

cmake -B build -DCMAKE_BUILD_TYPE=Release # For debug build change "Release" to "Debug"
cmake --build build
cmake --install build --prefix "<install-prefix>"

To create rpm, debian and OSX packages, run the following

cmake -B build -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
cd build
cpack -G DEB
cpack -G RPM
cpack -G DragNDrop

Windows

cmake.exe -B build
cmake.exe --build build --config Release # For debug build change "Release" to "Debug"
cmake.exe --install build

Tailor Capstone to your needs.

Enable and disable options in the "configure" step (first cmake command from above). Options are added with -D<OPTION>=ON/OFF or -D<OPTION>=1/0

Exclude architecture modules

You can build Capstone with only the architectures you need. By default all are enabled.

  • CAPSTONE_ARCHITECTURE_DEFAULT: Whether all architectures are enabled by default.
  • CAPSTONE_ARM_SUPPORT: Support ARM.
  • CAPSTONE_AARCH64_SUPPORT: Support AARCH64.
  • CAPSTONE_ALPHA_SUPPORT: Support Alpha.
  • CAPSTONE_ARC_SUPPORT: Support ARC.
  • CAPSTONE_HPPA_SUPPORT: Support HPPA.
  • CAPSTONE_LOONGARCH_SUPPORT: Support LoongArch.
  • CAPSTONE_M680X_SUPPORT: Support M680X.
  • CAPSTONE_M68K_SUPPORT: Support M68K.
  • CAPSTONE_MIPS_SUPPORT: Support Mips.
  • CAPSTONE_MOS65XX_SUPPORT: Support MOS65XX.
  • CAPSTONE_PPC_SUPPORT: Support PPC.
  • CAPSTONE_SPARC_SUPPORT: Support Sparc.
  • CAPSTONE_SYSTEMZ_SUPPORT: Support SystemZ.
  • CAPSTONE_XCORE_SUPPORT: Support XCore.
  • CAPSTONE_TRICORE_SUPPORT: Support TriCore.
  • CAPSTONE_X86_SUPPORT: Support X86.
  • CAPSTONE_TMS320C64X_SUPPORT: Support TMS320C64X.
  • CAPSTONE_M680X_SUPPORT: Support M680X.
  • CAPSTONE_EVM_SUPPORT: Support EVM.
  • CAPSTONE_WASM_SUPPORT: Support Web Assembly.
  • CAPSTONE_BPF_SUPPORT: Support BPF.
  • CAPSTONE_RISCV_SUPPORT: Support RISCV.

Module registration

If you're building a static library that you intend to link into multiple consumers, and they have differing architecture requirements, you may want -DCAPSTONE_USE_ARCH_REGISTRATION=1.

In your consumer code you can call cs_arch_register_*() to register the specific module for initialization.

In this way you only pay footprint size for the architectures you're actually using in each consumer, without having to compile Capstone multiple times.

Additional options

Capstone allows some more customization via the following options:

  • CAPSTONE_BUILD_SHARED_LIBS: Build shared libraries.
  • CAPSTONE_BUILD_STATIC_LIBS: Build static libraries (ON by default).
  • CAPSTONE_BUILD_STATIC_MSVC_RUNTIME: (Windows only) - Build with static MSVC runtime. Always set if CAPSTONE_BUILD_SHARED_LIBS=ON.
  • CAPSTONE_BUILD_CSTOOL: Enable/disable build of cstool. Default is enabled if build runs from the repository root.
  • CAPSTONE_USE_SYS_DYN_MEM: change this to OFF to use your own dynamic memory management.
  • CAPSTONE_BUILD_MACOS_THIN: MacOS only. Disables universal2 build. So you only get the binary for you processor architecture.
  • CAPSTONE_BUILD_DIET: change this to ON to make the binaries more compact.
  • CAPSTONE_X86_REDUCE: change this to ON to make X86 binary smaller.
  • CAPSTONE_X86_ATT_DISABLE: change this to ON to disable AT&T syntax on x86.

By default, Capstone use system dynamic memory management, and both DIET and X86_REDUCE modes are disabled. To use your own memory allocations, turn ON both DIET & X86_REDUCE, run "cmake" with: -DCAPSTONE_USE_SYS_DYN_MEM=0, -DCAPSTONE_BUILD_DIET=1, -DCAPSTONE_X86_REDUCE=1

Developer specific options

  • CAPSTONE_DEBUG: Change this to ON to enable extra debug assertions. Automatically enabled with Debug build.
  • CAPSTONE_BUILD_CSTEST: Build cstest in suite/cstest/. Note: cstest requires libyaml on your system. It attempts to build it from source otherwise.
  • CMAKE_EXPORT_COMPILE_COMMANDS: To export compile_commands.json for clangd and other language servers.
  • ENABLE_ASAN: Compiles Capstone with the address sanitizer.
  • ENABLE_COVERAGE: Generate coverage files.
  • CAPSTONE_BUILD_LEGACY_TESTS: Build some legacy integration tests.

Building cstest

cstest is build together with Capstone by adding the flag -DCAPSTONE_BUILD_CSTEST.

The build requires libyaml. It is a fairly common package and should be provided by your package manager.

Note: Currently cstest us only supported on Linux.

If you run another operation system, please install cstest_py. See bindings/python/BUILDING.md for instructions.