How To Compile, install & run Capstone for Linux, Mac OSX, *BSD and Windows
                        *-*-*-*-*-*

Capstone requires no prerequisite packages, so it is easy to compile & install.



(0) Tailor Capstone to your need.

  Out of 4 archtitectures supported by Capstone (Arm, Arm64, Mips & X86), if
  you just need several selected archs, you can choose which ones you want
  to compile in by modifying config.mk before going to next steps.

  By default, all 4 architectures are compiled.



(1) Compile from source

  On *nix (such as MacOSX, Linux & FreeBSD):

  - To compile for current platform, run either:

		$ ./compile.sh
	or:
		$ make

	For FreeBSD/OpenBSD, use 'gmake' instread of 'make':

		$ gmake
	or:
		$ ./compile.sh bsd

	Then run "./tests/test*" to see the tests disassembling sample code.

  - On 64-bit OS, run command below to cross-compile Capstone for 32-bit binary:

	$ ./compile.sh nix32

	Then similarly, run "./tests/test*" to see the tests disassembling sample code.



(2) Install Capstone on *nix

  To install Capstone, run:

	$ sudo make install
	
	For FreeBSD/OpenBSD, use 'gmake' instead of 'make':

	$ sudo gmake install

  Users are then required to enter root password to copy Capstone into machine
  system directories.

  NOTE: The core framework that will be installed by "make install" consist of
  only following files:

	/usr/include/capstone/capstone.h
	/usr/include/capstone/x86.h
	/usr/include/capstone/arm.h
	/usr/include/capstone/arm64.h
	/usr/include/capstone/mips.h
	/usr/lib/libcapstone.so (for Linux/*nix), or /usr/lib/libcapstone.dylib (OSX)
	/usr/lib/libcapstone.a



(3) Cross-compile Windows from *nix

  To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64
  for 64-bit binaries) are required.

	- To cross-compile Windows 32-bit binary, simply run
		$ ./compile.sh cross-win32

	- To cross-compile Windows 64-bit binary, simply run
		$ ./compile.sh cross-win64

  Resulted files "capstone.dll" and "tests/test*.exe" can then be used on Windows machine.



(4) Compile on Windows with Cygwin

  To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run:

        - To compile Windows 32-bit binary under Cygwin, simply run
                $ ./compile.sh cygwin-mingw32

        - To compile Windows 64-bit binary under Cygwin, simply run
                $ ./compile.sh cygwin-mingw64


(5) By default, cc (default c compiler on the system) is used as compiler.

	- To use "clang" compiler instead, run command below:

		$ ./compile.sh clang

	- To use "gcc" compiler instead, run this command:

		$ ./compile.sh gcc




(6) Language bindings

  So far, Python, Ruby, Ocaml, Java, C# and Go are supported by bindings. Look for
  the bindings under directory bindings/, and refer to README file of
  corresponding languages.
