This documentation explains how to compile Capstone on Windows using
Microsoft Visual Studio version 2010 or newer.

To compile Capstone on *nix, see COMPILE.TXT

To compile Capstone with CMake, see COMPILE_CMAKE.TXT

                        *-*-*-*-*-*

Capstone requires no prerequisite packages, so it is easy to compile & install.
Open the Visual Studio solution "msvc/capstone.sln" and follow the instructions
below.

NOTE: This requires Visual Studio 2010 or newer versions.


(0) Tailor Capstone to your need.

  Out of 8 archtitectures supported by Capstone (Arm, Arm64, Mips, PPC, Sparc,
  SystemZ, X86 & XCore), if you just need several selected archs, choose the ones
  you want to compile in by opening Visual Studio solution "msvc\capstone.sln",
  then directly editing the projects "capstone_static" & "capstone_dll" for static
  and dynamic libraries, respectively. This must be done before going to the
  next steps.

  In VisualStudio interface, modify the preprocessor definitions via
  "Project Properties" -> "Configuration Propertis" -> "C/C++" -> "Preprocessor"
  to customize Capstone library, as followings.

  - CAPSTONE_HAS_ARM: support ARM. Delete this to remove ARM support.
  - CAPSTONE_HAS_ARM64: support ARM64. Delete this to remove ARM64 support.
  - CAPSTONE_HAS_MIPS: support Mips. Delete this to remove Mips support.
  - CAPSTONE_HAS_PPC: support PPC. Delete this to remove PPC support.
  - CAPSTONE_HAS_SPARC: support Sparc. Delete this to remove Sparc support.
  - CAPSTONE_HAS_SYSZ: support SystemZ. Delete this to remove SystemZ support.
  - CAPSTONE_HAS_X86: support X86. Delete this to remove X86 support.
  - CAPSTONE_HAS_XCORE: support XCore. Delete this to remove XCore support.

  By default, all 8 architectures are compiled in.


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

  - CAPSTONE_USE_SYS_DYN_MEM: delete this to use your own dynamic memory management.
  - CAPSTONE_DIET_NO: rename this to "CAPSTONE_DIET" to make the binaries more compact.
  - CAPSTONE_X86_REDUCE_NO: rename this to "CAPSTONE_X86_REDUCE" to make X86 binary smaller.
  - CAPSTONE_X86_ATT_DISABLE_NO: rename this to "CAPSTONE_X86_ATT_DISABLE" to disable
    AT&T syntax on x86.

  By default, Capstone use system dynamic memory management, and both DIET and X86_REDUCE
  modes are disable.


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



(1) Compile from source on Windows with Visual Studio

  - Choose the configuration and the platform you want: Release/Debug & Win32/Win64.
  - Build only the libraries, or the libraries along with all the tests.



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