This documentation explains how to compile Capstone with CMake, focus on
using Microsoft Visual C as the compiler.

To compile Capstone on Windows using Visual Studio, see COMPILE_MSVC.TXT.

                        *-*-*-*-*-*

This documentation requires CMake & Windows SDK or MS Visual Studio installed on
your machine.

Get CMake for free from http://www.cmake.org.



(0) Tailor Capstone to your need.

  Out of architectures supported by Capstone, if you just need several selected archs,
  run "cmake" with the unwanted archs disabled (set to 0) as followings.

  - CAPSTONE_ARM_SUPPORT: support ARM. Run cmake with -DCAPSTONE_ARM_SUPPORT=0 to remove ARM.
  - CAPSTONE_AARCH64_SUPPORT: support AARCH64. Run cmake with -DCAPSTONE_AARCH64_SUPPORT=0 to remove AARCH64.
  - CAPSTONE_ALPHA_SUPPORT: support Alpha. Run cmake with -DCAPSTONE_ALPHA_SUPPORT=0 to remove Alpha.
  - CAPSTONE_HPPA_SUPPORT: support HPPA. Run cmake with -DCAPSTONE_HPPA_SUPPORT=0 to remove HPPA.
  - CAPSTONE_LOONGARCH_SUPPORT: support LoongArch. Run cmake with -DCAPSTONE_LOONGARCH_SUPPORT=0 to remove LoongArch.
  - CAPSTONE_M680X_SUPPORT: support M680X. Run cmake with -DCAPSTONE_M680X_SUPPORT=0 to remove M680X.
  - CAPSTONE_M68K_SUPPORT: support M68K. Run cmake with -DCAPSTONE_M68K_SUPPORT=0 to remove M68K.
  - CAPSTONE_MIPS_SUPPORT: support Mips. Run cmake with -DCAPSTONE_MIPS_SUPPORT=0 to remove Mips.
  - CAPSTONE_MOS65XX_SUPPORT: support MOS65XX. Run cmake with -DCAPSTONE_MOS65XX_SUPPORT=0 to remove MOS65XX.
  - CAPSTONE_PPC_SUPPORT: support PPC. Run cmake with -DCAPSTONE_PPC_SUPPORT=0 to remove PPC.
  - CAPSTONE_SPARC_SUPPORT: support Sparc. Run cmake with -DCAPSTONE_SPARC_SUPPORT=0 to remove Sparc.
  - CAPSTONE_SYSZ_SUPPORT: support SystemZ. Run cmake with -DCAPSTONE_SYSZ_SUPPORT=0 to remove SystemZ.
  - CAPSTONE_XCORE_SUPPORT: support XCore. Run cmake with -DCAPSTONE_XCORE_SUPPORT=0 to remove XCore.
  - CAPSTONE_TRICORE_SUPPORT: support TriCore. Run cmake with -DCAPSTONE_TRICORE_SUPPORT=0 to remove TriCore.
  - CAPSTONE_X86_SUPPORT: support X86. Run cmake with -DCAPSTONE_X86_SUPPORT=0 to remove X86.
  - CAPSTONE_TMS320C64X_SUPPORT: support TMS320C64X. Run cmake with -DCAPSTONE_TMS320C64X_SUPPORT=0 to remove TMS320C64X.
  - CAPSTONE_M680X_SUPPORT: support M680X. Run cmake with -DCAPSTONE_M680X_SUPPORT=0 to remove M680X.
  - CAPSTONE_EVM_SUPPORT: support EVM. Run cmake with -DCAPSTONE_EVM_SUPPORT=0 to remove EVM.
  - CAPSTONE_WASM_SUPPORT: support Web Assembly. Run cmake with -DCAPSTONE_WASM_SUPPORT=0 to remove WASM.
  - CAPSTONE_BPF_SUPPORT: support BPF. Run cmake with -DCAPSTONE_BPF_SUPPORT=0 to remove BPF.
  - CAPSTONE_RISCV_SUPPORT: support RISCV. Run cmake with -DCAPSTONE_RISCV_SUPPORT=0 to remove RISCV.
  - CAPSTONE_ARCHITECTURE_DEFAULT: Whether architectures are enabled by default.
      Set this of OFF with -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF to disable all architectures by default.
      You can then enable them again with one of the CAPSTONE_<ARCH>_SUPPORT options.

  By default, all architectures are compiled in. 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
  and call cs_arch_register_*() for the architectures you need in each particular consumer. 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.

  Besides, Capstone also allows some more customization via following macros.

  - CAPSTONE_USE_SYS_DYN_MEM: change this to OFF to use your own dynamic memory management.
  - 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.
  - CAPSTONE_DEBUG: change this to ON to enable extra debug assertions.
  - CAPSTONE_BUILD_CSTEST: Build `cstest` in `suite/cstest/`. `cstest` requires `libyaml` on your system.
  - ENABLE_ASAN: Compiles Capstone with the address sanitizer.

  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


  For each option, refer to docs/README for more details.



(1) CMake allows you to generate different generators to build Capstone. Below is
    some examples on how to build Capstone on Windows with CMake.

  (*) You can let CMake select a generator for you. Do:
  
      mkdir build
      cd build
      cmake ..
      
    This last command is also where you can pass additional CMake configuration flags
    using `-D<key>=<value>`.
    For a debug build add `-DCMAKE_BUILD_TYPE=Debug`.
    To export `compile_commands.json` add `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON`.
    
    Then to build use:
    
      cmake --build . --config [Release/Debug]
      

  (*) To build Capstone using Nmake of Windows SDK, do:

      mkdir build
      cd build
      ..\nmake.bat

  After this, find the samples test*.exe, capstone.lib & capstone.dll
  in the same directory.



  (*) To build Capstone using Visual Studio, choose the generator accordingly to the
  version of Visual Studio on your machine. For example, with Visual Studio 2013, do:

      mkdir build
      cd build
      cmake -G "Visual Studio 12" ..

  After this, find capstone.sln in the same directory. Open it with Visual Studio
  and build the solution including libraries & all test as usual.



(2) You can make sure the prior steps successfully worked by launching one of the
  testing binary (test*.exe).

(3) You can also enable just one specific architecture by passing the architecture name
  to either the cmake.sh or nmake.bat scripts. e.g.:
  
    ../cmake.sh x86

  Will just target the x86 architecture. The list of available architectures is: ARM,
  AARCH64, M68K, MIPS, PowerPC, Sparc, SystemZ, XCore, x86, TMS320C64x, M680x, EVM, MOS65XX,
  WASM, BPF, RISCV, Alpha, HPPA, LoongArch.
  
(4) You can also create an installation image with cmake, by using the 'install' target.
  Use:

    cmake --build . --config Release --target install

  This will normally install an image in a default location (`C:\Program Files` on Windows),
  so it's good to explicitly set this location when configuring CMake. Use: `-DCMAKE_INSTALL_PREFIX=image`
  for instance, to put the installation in the 'image' subdirectory of the build directory.
