xref: /aosp_15_r20/external/capstone/COMPILE.TXT (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf EbrahimiThis documentation explains how to compile, install & run Capstone on MacOSX,
2*9a0e4156SSadaf EbrahimiLinux, *BSD & Solaris. We also show steps to cross-compile for Microsoft Windows.
3*9a0e4156SSadaf Ebrahimi
4*9a0e4156SSadaf EbrahimiTo natively compile for Windows using Microsoft Visual Studio, see COMPILE_MSVC.TXT.
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf EbrahimiTo compile using CMake, see COMPILE_CMAKE.TXT.
7*9a0e4156SSadaf Ebrahimi
8*9a0e4156SSadaf EbrahimiTo compile using XCode on MacOSX, see xcode/README.md.
9*9a0e4156SSadaf Ebrahimi
10*9a0e4156SSadaf EbrahimiTo compile for Windows CE (a.k.a, Windows Embedded Compact), see windowsce/COMPILE.md.
11*9a0e4156SSadaf Ebrahimi
12*9a0e4156SSadaf Ebrahimi                        *-*-*-*-*-*
13*9a0e4156SSadaf Ebrahimi
14*9a0e4156SSadaf EbrahimiCapstone requires no prerequisite packages, so it is easy to compile & install.
15*9a0e4156SSadaf Ebrahimi
16*9a0e4156SSadaf Ebrahimi
17*9a0e4156SSadaf Ebrahimi
18*9a0e4156SSadaf Ebrahimi(0) Tailor Capstone to your need.
19*9a0e4156SSadaf Ebrahimi
20*9a0e4156SSadaf Ebrahimi  Out of all archtitectures supported by Capstone, if you just need several
21*9a0e4156SSadaf Ebrahimi  selected archs, choose the ones you want to compile in by editing "config.mk"
22*9a0e4156SSadaf Ebrahimi  before going to next steps.
23*9a0e4156SSadaf Ebrahimi
24*9a0e4156SSadaf Ebrahimi  By default, all architectures are compiled.
25*9a0e4156SSadaf Ebrahimi
26*9a0e4156SSadaf Ebrahimi  The other way of customize Capstone without having to edit config.mk is to
27*9a0e4156SSadaf Ebrahimi  pass the desired options on the commandline to ./make.sh. Currently,
28*9a0e4156SSadaf Ebrahimi  Capstone supports 7 options, as followings.
29*9a0e4156SSadaf Ebrahimi
30*9a0e4156SSadaf Ebrahimi  - CAPSTONE_ARCHS: specify list of architectures to compiled in.
31*9a0e4156SSadaf Ebrahimi  - CAPSTONE_USE_SYS_DYN_MEM: change this if you have your own dynamic memory management.
32*9a0e4156SSadaf Ebrahimi  - CAPSTONE_DIET: use this to make the output binaries more compact.
33*9a0e4156SSadaf Ebrahimi  - CAPSTONE_X86_REDUCE: another option to make X86 binary smaller.
34*9a0e4156SSadaf Ebrahimi  - CAPSTONE_X86_ATT_DISABLE: disables AT&T syntax on x86.
35*9a0e4156SSadaf Ebrahimi  - CAPSTONE_STATIC: build static library.
36*9a0e4156SSadaf Ebrahimi  - CAPSTONE_SHARED: build dynamic (shared) library.
37*9a0e4156SSadaf Ebrahimi
38*9a0e4156SSadaf Ebrahimi  By default, Capstone uses system dynamic memory management, both DIET and X86_REDUCE
39*9a0e4156SSadaf Ebrahimi  modes are disable, and builds all the static & shared libraries.
40*9a0e4156SSadaf Ebrahimi
41*9a0e4156SSadaf Ebrahimi  To avoid editing config.mk for these customization, we can pass their values to
42*9a0e4156SSadaf Ebrahimi  make.sh, as followings.
43*9a0e4156SSadaf Ebrahimi
44*9a0e4156SSadaf Ebrahimi  $ CAPSTONE_ARCHS="arm aarch64 x86" CAPSTONE_USE_SYS_DYN_MEM=no CAPSTONE_DIET=yes CAPSTONE_X86_REDUCE=yes ./make.sh
45*9a0e4156SSadaf Ebrahimi
46*9a0e4156SSadaf Ebrahimi  NOTE: on commandline, put these values in front of ./make.sh, not after it.
47*9a0e4156SSadaf Ebrahimi
48*9a0e4156SSadaf Ebrahimi  For each option, refer to docs/README for more details.
49*9a0e4156SSadaf Ebrahimi
50*9a0e4156SSadaf Ebrahimi
51*9a0e4156SSadaf Ebrahimi
52*9a0e4156SSadaf Ebrahimi(1) Compile from source
53*9a0e4156SSadaf Ebrahimi
54*9a0e4156SSadaf Ebrahimi  On *nix (such as MacOSX, Linux, *BSD, Solaris):
55*9a0e4156SSadaf Ebrahimi
56*9a0e4156SSadaf Ebrahimi  - To compile for current platform, run:
57*9a0e4156SSadaf Ebrahimi
58*9a0e4156SSadaf Ebrahimi		$ ./make.sh
59*9a0e4156SSadaf Ebrahimi
60*9a0e4156SSadaf Ebrahimi  - On 64-bit OS, run the command below to cross-compile Capstone for 32-bit binary:
61*9a0e4156SSadaf Ebrahimi
62*9a0e4156SSadaf Ebrahimi		$ ./make.sh nix32
63*9a0e4156SSadaf Ebrahimi
64*9a0e4156SSadaf Ebrahimi
65*9a0e4156SSadaf Ebrahimi
66*9a0e4156SSadaf Ebrahimi(2) Install Capstone on *nix
67*9a0e4156SSadaf Ebrahimi
68*9a0e4156SSadaf Ebrahimi  To install Capstone, run:
69*9a0e4156SSadaf Ebrahimi
70*9a0e4156SSadaf Ebrahimi	$ sudo ./make.sh install
71*9a0e4156SSadaf Ebrahimi
72*9a0e4156SSadaf Ebrahimi	For FreeBSD/OpenBSD, where sudo is unavailable, run:
73*9a0e4156SSadaf Ebrahimi
74*9a0e4156SSadaf Ebrahimi		$ su; ./make.sh install
75*9a0e4156SSadaf Ebrahimi
76*9a0e4156SSadaf Ebrahimi  Users are then required to enter root password to copy Capstone into machine
77*9a0e4156SSadaf Ebrahimi  system directories.
78*9a0e4156SSadaf Ebrahimi
79*9a0e4156SSadaf Ebrahimi  Afterwards, run ./tests/test* to see the tests disassembling sample code.
80*9a0e4156SSadaf Ebrahimi
81*9a0e4156SSadaf Ebrahimi
82*9a0e4156SSadaf Ebrahimi  NOTE: The core framework installed by "./make.sh install" consist of
83*9a0e4156SSadaf Ebrahimi  following files:
84*9a0e4156SSadaf Ebrahimi
85*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/arm.h
86*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/arm64.h
87*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/capstone.h
88*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/evm.h
89*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/m680x.h
90*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/m68k.h
91*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/mips.h
92*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/mos65xx.h
93*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/platform.h
94*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/ppc.h
95*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/sparc.h
96*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/systemz.h
97*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/tms320c64x.h
98*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/x86.h
99*9a0e4156SSadaf Ebrahimi	/usr/include/capstone/xcore.h
100*9a0e4156SSadaf Ebrahimi	/usr/lib/libcapstone.a
101*9a0e4156SSadaf Ebrahimi	/usr/lib/libcapstone.so (for Linux/*nix), or /usr/lib/libcapstone.dylib (OSX)
102*9a0e4156SSadaf Ebrahimi
103*9a0e4156SSadaf Ebrahimi
104*9a0e4156SSadaf Ebrahimi
105*9a0e4156SSadaf Ebrahimi(3) Cross-compile for Windows from *nix
106*9a0e4156SSadaf Ebrahimi
107*9a0e4156SSadaf Ebrahimi  To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64
108*9a0e4156SSadaf Ebrahimi  for 64-bit binaries) are required.
109*9a0e4156SSadaf Ebrahimi
110*9a0e4156SSadaf Ebrahimi	- To cross-compile Windows 32-bit binary, simply run:
111*9a0e4156SSadaf Ebrahimi
112*9a0e4156SSadaf Ebrahimi		$ ./make.sh cross-win32
113*9a0e4156SSadaf Ebrahimi
114*9a0e4156SSadaf Ebrahimi	- To cross-compile Windows 64-bit binary, run:
115*9a0e4156SSadaf Ebrahimi
116*9a0e4156SSadaf Ebrahimi		$ ./make.sh cross-win64
117*9a0e4156SSadaf Ebrahimi
118*9a0e4156SSadaf Ebrahimi  Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
119*9a0e4156SSadaf Ebrahimi  be used on Windows machine.
120*9a0e4156SSadaf Ebrahimi
121*9a0e4156SSadaf Ebrahimi
122*9a0e4156SSadaf Ebrahimi
123*9a0e4156SSadaf Ebrahimi(4) Cross-compile for iOS from Mac OSX.
124*9a0e4156SSadaf Ebrahimi
125*9a0e4156SSadaf Ebrahimi  To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required.
126*9a0e4156SSadaf Ebrahimi
127*9a0e4156SSadaf Ebrahimi	- To cross-compile for ArmV7 (iPod 4, iPad 1/2/3, iPhone4, iPhone4S), run:
128*9a0e4156SSadaf Ebrahimi		$ ./make.sh ios_armv7
129*9a0e4156SSadaf Ebrahimi
130*9a0e4156SSadaf Ebrahimi	- To cross-compile for ArmV7s (iPad 4, iPhone 5C, iPad mini), run:
131*9a0e4156SSadaf Ebrahimi		$ ./make.sh ios_armv7s
132*9a0e4156SSadaf Ebrahimi
133*9a0e4156SSadaf Ebrahimi	- To cross-compile for Arm64 (iPhone 5S, iPad mini Retina, iPad Air), run:
134*9a0e4156SSadaf Ebrahimi		$ ./make.sh ios_arm64
135*9a0e4156SSadaf Ebrahimi
136*9a0e4156SSadaf Ebrahimi	- To cross-compile for all iDevices (armv7 + armv7s + arm64), run:
137*9a0e4156SSadaf Ebrahimi		$ ./make.sh ios
138*9a0e4156SSadaf Ebrahimi
139*9a0e4156SSadaf Ebrahimi  Resulted files libcapstone.dylib, libcapstone.a & tests/test* can then
140*9a0e4156SSadaf Ebrahimi  be used on iOS devices.
141*9a0e4156SSadaf Ebrahimi
142*9a0e4156SSadaf Ebrahimi
143*9a0e4156SSadaf Ebrahimi
144*9a0e4156SSadaf Ebrahimi(5) Cross-compile for Android
145*9a0e4156SSadaf Ebrahimi
146*9a0e4156SSadaf Ebrahimi  To cross-compile for Android (smartphone/tablet), Android NDK is required.
147*9a0e4156SSadaf Ebrahimi  NOTE: Only ARM and ARM64 are currently supported.
148*9a0e4156SSadaf Ebrahimi
149*9a0e4156SSadaf Ebrahimi	$ NDK=/android/android-ndk-r10e ./make.sh cross-android arm
150*9a0e4156SSadaf Ebrahimi  or
151*9a0e4156SSadaf Ebrahimi	$ NDK=/android/android-ndk-r10e ./make.sh cross-android arm64
152*9a0e4156SSadaf Ebrahimi
153*9a0e4156SSadaf Ebrahimi  Resulted files libcapstone.so, libcapstone.a & tests/test* can then
154*9a0e4156SSadaf Ebrahimi  be used on Android devices.
155*9a0e4156SSadaf Ebrahimi
156*9a0e4156SSadaf Ebrahimi
157*9a0e4156SSadaf Ebrahimi
158*9a0e4156SSadaf Ebrahimi(6) Compile on Windows with Cygwin
159*9a0e4156SSadaf Ebrahimi
160*9a0e4156SSadaf Ebrahimi  To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run:
161*9a0e4156SSadaf Ebrahimi
162*9a0e4156SSadaf Ebrahimi        - To compile Windows 32-bit binary under Cygwin, run:
163*9a0e4156SSadaf Ebrahimi
164*9a0e4156SSadaf Ebrahimi                $ ./make.sh cygwin-mingw32
165*9a0e4156SSadaf Ebrahimi
166*9a0e4156SSadaf Ebrahimi        - To compile Windows 64-bit binary under Cygwin, run:
167*9a0e4156SSadaf Ebrahimi
168*9a0e4156SSadaf Ebrahimi                $ ./make.sh cygwin-mingw64
169*9a0e4156SSadaf Ebrahimi
170*9a0e4156SSadaf Ebrahimi  Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
171*9a0e4156SSadaf Ebrahimi  be used on Windows machine.
172*9a0e4156SSadaf Ebrahimi
173*9a0e4156SSadaf Ebrahimi
174*9a0e4156SSadaf Ebrahimi
175*9a0e4156SSadaf Ebrahimi(7) By default, "cc" (default C compiler on the system) is used as compiler.
176*9a0e4156SSadaf Ebrahimi
177*9a0e4156SSadaf Ebrahimi	- To use "clang" compiler instead, run the command below:
178*9a0e4156SSadaf Ebrahimi
179*9a0e4156SSadaf Ebrahimi		$ ./make.sh clang
180*9a0e4156SSadaf Ebrahimi
181*9a0e4156SSadaf Ebrahimi	- To use "gcc" compiler instead, run:
182*9a0e4156SSadaf Ebrahimi
183*9a0e4156SSadaf Ebrahimi		$ ./make.sh gcc
184*9a0e4156SSadaf Ebrahimi
185*9a0e4156SSadaf Ebrahimi
186*9a0e4156SSadaf Ebrahimi
187*9a0e4156SSadaf Ebrahimi(8) To uninstall Capstone, run the command below:
188*9a0e4156SSadaf Ebrahimi
189*9a0e4156SSadaf Ebrahimi		$ sudo ./make.sh uninstall
190*9a0e4156SSadaf Ebrahimi
191*9a0e4156SSadaf Ebrahimi
192*9a0e4156SSadaf Ebrahimi
193*9a0e4156SSadaf Ebrahimi(9) Language bindings
194*9a0e4156SSadaf Ebrahimi
195*9a0e4156SSadaf Ebrahimi  So far, Python, Ocaml & Java are supported by bindings in the main code.
196*9a0e4156SSadaf Ebrahimi  Look for the bindings under directory bindings/, and refer to README file
197*9a0e4156SSadaf Ebrahimi  of corresponding languages.
198*9a0e4156SSadaf Ebrahimi
199*9a0e4156SSadaf Ebrahimi  Community also provide bindings for C#, Go, Ruby, NodeJS, C++ & Vala. Links to
200*9a0e4156SSadaf Ebrahimi  these can be found at address http://capstone-engine.org/download.html
201