Skip to content

Commit e5d7120

Browse files
JornVerneeaquynh
authored andcommitted
Add cmake option to tell whether architectures should be included by default (capstone-engine#1463)
* Add cmake option to disable architectures by default * Add cmake option to disable architectures by default * Remove CAPSTONE_X86_ONLY cmake variable, and update build scripts to use the CAPSTONE_ARCHITECUTRE_DEFAULT option, which can be used with any architecture. * Updated cmake and nmake files to replace cmake-x86 and nmake-x86 * Simplified cmake wrapper scripts * Updated cmake build instructions * Tab to space in doc
1 parent c8716f5 commit e5d7120

6 files changed

+125
-36
lines changed

CMakeLists.txt

+14-14
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ option(CAPSTONE_BUILD_DIET "Build diet library" OFF)
2727
option(CAPSTONE_BUILD_TESTS "Build tests" ON)
2828
option(CAPSTONE_BUILD_CSTOOL "Build cstool" ON)
2929
option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
30+
option(CAPSTONE_ARCHITECTURE_DEFAULT "Whether architectures are enabled by default" ON)
3031

3132
set(SUPPORTED_ARCHITECTURES ARM ARM64 M68K MIPS PPC SPARC SYSZ XCORE X86 TMS320C64X M680X EVM MOS65XX)
3233
set(SUPPORTED_ARCHITECTURE_LABELS ARM ARM64 M68K MIPS PowerPC Sparc SystemZ XCore x86 TMS320C64x M680x EVM MOS65XX)
@@ -37,7 +38,7 @@ math(EXPR count "${count}-1")
3738
foreach(i RANGE ${count})
3839
list(GET SUPPORTED_ARCHITECTURES ${i} supported_architecture)
3940
list(GET SUPPORTED_ARCHITECTURE_LABELS ${i} supported_architecture_label)
40-
option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ON)
41+
option("CAPSTONE_${supported_architecture}_SUPPORT" "${supported_architecture_label} support" ${CAPSTONE_ARCHITECTURE_DEFAULT})
4142
endforeach(i)
4243

4344
# propagate architecture support variables to preprocessor
@@ -49,7 +50,6 @@ foreach(supported_architecture ${SUPPORTED_ARCHITECTURES})
4950
endif()
5051
endforeach(supported_architecture)
5152

52-
option(CAPSTONE_X86_ONLY "Enable just x86, and disable building every other architectures" OFF)
5353
option(CAPSTONE_X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF)
5454
option(CAPSTONE_X86_ATT_DISABLE "Disable x86 AT&T syntax" OFF)
5555
option(CAPSTONE_OSXKERNEL_SUPPORT "Support to embed Capstone into OS X Kernel extensions" OFF)
@@ -120,7 +120,7 @@ set(HEADERS_COMMON
120120
set(TEST_SOURCES test_basic.c test_detail.c test_skipdata.c test_iter.c)
121121

122122
## architecture support
123-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM_SUPPORT)
123+
if (CAPSTONE_ARM_SUPPORT)
124124
add_definitions(-DCAPSTONE_HAS_ARM)
125125
set(SOURCES_ARM
126126
arch/ARM/ARMDisassembler.c
@@ -157,7 +157,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM_SUPPORT)
157157
set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
158158
endif ()
159159

160-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM64_SUPPORT)
160+
if (CAPSTONE_ARM64_SUPPORT)
161161
add_definitions(-DCAPSTONE_HAS_ARM64)
162162
set(SOURCES_ARM64
163163
arch/AArch64/AArch64BaseInfo.c
@@ -194,7 +194,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_ARM64_SUPPORT)
194194
set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
195195
endif ()
196196

197-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MIPS_SUPPORT)
197+
if (CAPSTONE_MIPS_SUPPORT)
198198
add_definitions(-DCAPSTONE_HAS_MIPS)
199199
set(SOURCES_MIPS
200200
arch/Mips/MipsDisassembler.c
@@ -226,7 +226,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MIPS_SUPPORT)
226226
set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
227227
endif ()
228228

229-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_PPC_SUPPORT)
229+
if (CAPSTONE_PPC_SUPPORT)
230230
add_definitions(-DCAPSTONE_HAS_POWERPC)
231231
set(SOURCES_PPC
232232
arch/PowerPC/PPCDisassembler.c
@@ -313,7 +313,7 @@ if (CAPSTONE_X86_SUPPORT)
313313
set(TEST_SOURCES ${TEST_SOURCES} test_x86.c test_customized_mnem.c)
314314
endif ()
315315

316-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SPARC_SUPPORT)
316+
if (CAPSTONE_SPARC_SUPPORT)
317317
add_definitions(-DCAPSTONE_HAS_SPARC)
318318
set(SOURCES_SPARC
319319
arch/Sparc/SparcDisassembler.c
@@ -336,7 +336,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SPARC_SUPPORT)
336336
set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
337337
endif ()
338338

339-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SYSZ_SUPPORT)
339+
if (CAPSTONE_SYSZ_SUPPORT)
340340
add_definitions(-DCAPSTONE_HAS_SYSZ)
341341
set(SOURCES_SYSZ
342342
arch/SystemZ/SystemZDisassembler.c
@@ -361,7 +361,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_SYSZ_SUPPORT)
361361
set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
362362
endif ()
363363

364-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_XCORE_SUPPORT)
364+
if (CAPSTONE_XCORE_SUPPORT)
365365
add_definitions(-DCAPSTONE_HAS_XCORE)
366366
set(SOURCES_XCORE
367367
arch/XCore/XCoreDisassembler.c
@@ -382,7 +382,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_XCORE_SUPPORT)
382382
set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
383383
endif ()
384384

385-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M68K_SUPPORT)
385+
if (CAPSTONE_M68K_SUPPORT)
386386
add_definitions(-DCAPSTONE_HAS_M68K)
387387
set(SOURCES_M68K
388388
arch/M68K/M68KDisassembler.c
@@ -395,7 +395,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M68K_SUPPORT)
395395
set(TEST_SOURCES ${TEST_SOURCES} test_m68k.c)
396396
endif ()
397397

398-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_TMS320C64X_SUPPORT)
398+
if (CAPSTONE_TMS320C64X_SUPPORT)
399399
add_definitions(-DCAPSTONE_HAS_TMS320C64X)
400400
set(SOURCES_TMS320C64X
401401
arch/TMS320C64x/TMS320C64xDisassembler.c
@@ -415,7 +415,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_TMS320C64X_SUPPORT)
415415
set(TEST_SOURCES ${TEST_SOURCES} test_tms320c64x.c)
416416
endif ()
417417

418-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M680X_SUPPORT)
418+
if (CAPSTONE_M680X_SUPPORT)
419419
add_definitions(-DCAPSTONE_HAS_M680X)
420420
set(SOURCES_M680X
421421
arch/M680X/M680XDisassembler.c
@@ -430,7 +430,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_M680X_SUPPORT)
430430
set(TEST_SOURCES ${TEST_SOURCES} test_m680x.c)
431431
endif ()
432432

433-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_EVM_SUPPORT)
433+
if (CAPSTONE_EVM_SUPPORT)
434434
add_definitions(-DCAPSTONE_HAS_EVM)
435435
set(SOURCES_EVM
436436
arch/EVM/EVMDisassembler.c
@@ -447,7 +447,7 @@ if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_EVM_SUPPORT)
447447
set(TEST_SOURCES ${TEST_SOURCES} test_evm.c)
448448
endif ()
449449

450-
if (NOT CAPSTONE_X86_ONLY AND CAPSTONE_MOS65XX_SUPPORT)
450+
if (CAPSTONE_MOS65XX_SUPPORT)
451451
add_definitions(-DCAPSTONE_HAS_MOS65XX)
452452
set(SOURCES_MOS65XX
453453
arch/MOS65XX/MOS65XXModule.c

COMPILE_CMAKE.TXT

+30
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Get CMake for free from http://www.cmake.org.
3333
- CAPSTONE_X86_TMS320C64X: support TMS320C64X. Run cmake with -DCAPSTONE_TMS320C64X_SUPPORT=0 to remove TMS320C64X.
3434
- CAPSTONE_X86_M680X: support M680X. Run cmake with -DCAPSTONE_M680X_SUPPORT=0 to remove M680X.
3535
- CAPSTONE_X86_EVM: support EVM. Run cmake with -DCAPSTONE_EVM_SUPPORT=0 to remove EVM.
36+
- CAPSTONE_ARCHITECUTRE_DEFAULT: Whether architectures are enabled by default.
37+
Set this of OFF with -DCAPSTONE_ARCHITECUTRE_DEFAULT=OFF to dissable all architectures by default.
38+
You can then enable them again with one of the CAPSTONE_<ARCH>_SUPPORT options.
3639

3740
By default, all architectures are compiled in.
3841

@@ -56,6 +59,17 @@ Get CMake for free from http://www.cmake.org.
5659
(1) CMake allows you to generate different generators to build Capstone. Below is
5760
some examples on how to build Capstone on Windows with CMake.
5861

62+
(*) You can let CMake select a generator for you. Do:
63+
64+
mkdir build
65+
cd build
66+
cmake ..
67+
68+
This last command is also where you can pass additional CMake configuration flags
69+
using `-D<key>=<value>`. Then to build use:
70+
71+
cmake --build . --config Release
72+
5973

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

@@ -83,3 +97,19 @@ Get CMake for free from http://www.cmake.org.
8397
(2) You can make sure the prior steps successfully worked by launching one of the
8498
testing binary (test*.exe).
8599

100+
(3) You can also enable just one specific architecture by passing the architecture name
101+
to either the cmake.sh or nmake.bat scripts. e.g.:
102+
103+
../cmake.sh x86
104+
105+
Will just target the x86 architecture. The list of available architectures is: ARM,
106+
ARM64, M68K, MIPS, PowerPC, Sparc, SystemZ, XCore, x86, TMS320C64x, M680x, EVM, MOS65XX.
107+
108+
(4) You can also create an installation image with cmake, by using the 'install' target.
109+
Use:
110+
111+
cmake --build . --config Release --target install
112+
113+
This will normally install an image in a default location (`C:\Program Files` on Windows),
114+
so it's good to explicitly set this location when configuring CMake. Use: `-DCMAKE_INSTALL_PREFIX=image`
115+
for instance, to put the installation in the 'image' subdirectory of the build directory.

cmake-x86.sh

-10
This file was deleted.

cmake.sh

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Capstone disassembler engine (www.capstone-engine.org)
2+
# Build Capstone libs for specified architecture, or all if none is specified (libcapstone.so & libcapstone.a) on *nix with CMake & make
3+
# By Nguyen Anh Quynh, Jorn Vernee, 2019
4+
5+
FLAGS="-DCMAKE_BUILD_TYPE=Release"
6+
# Uncomment below line to compile in Diet mode
7+
# FLAGS+=" -DCAPSTONE_BUILD_DIET=ON"
8+
9+
case $1 in
10+
ARM)
11+
ARCH=ARM
12+
;;
13+
ARM64)
14+
ARCH=ARM64
15+
;;
16+
M68K)
17+
ARCH=M68K
18+
;;
19+
MIPS)
20+
ARCH=MIPS
21+
;;
22+
PowerPC)
23+
ARCH=PPC
24+
;;
25+
Sparc)
26+
ARCH=SPARC
27+
;;
28+
SystemZ)
29+
ARCH=SYSZ
30+
;;
31+
XCore)
32+
ARCH=XCORE
33+
;;
34+
x86)
35+
ARCH=X86
36+
;;
37+
TMS320C64x)
38+
ARCH=TMS320C64X
39+
;;
40+
M680x)
41+
ARCH=M680X
42+
;;
43+
EVM)
44+
ARCH=EVM
45+
;;
46+
MOS65XX)
47+
ARCH=MOS65XX
48+
;;
49+
*)
50+
;;
51+
esac
52+
53+
if test "x$ARCH" = "x"; then
54+
FLAGS+=" -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_$ARCH_SUPPORT=ON"
55+
fi
56+
57+
cmake $FLAGS ..
58+
59+
make -j8

nmake-x86.bat

-10
This file was deleted.

nmake.bat

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
11
:: Capstone disassembler engine (www.capstone-engine.org)
22
:: Build Capstone libs (capstone.dll & capstone.lib) on Windows with CMake & Nmake
3-
:: By Nguyen Anh Quynh, 2017
3+
:: By Nguyen Anh Quynh, Jorn Vernee, 2017, 2019
44

5-
cmake -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_STATIC_RUNTIME=ON -G "NMake Makefiles" ..
5+
@echo off
6+
7+
set flags="-DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_STATIC_RUNTIME=ON"
8+
9+
if "%1"=="ARM" set %arch%=ARM
10+
if "%1"=="ARM64" set %arch%=ARM64
11+
if "%1"=="M68K" set %arch%=M68K
12+
if "%1"=="MIPS" set %arch%=MIPS
13+
if "%1"=="PowerPC" set %arch%=PPC
14+
if "%1"=="Sparc" set %arch%=SPARC
15+
if "%1"=="SystemZ" set %arch%=SYSZ
16+
if "%1"=="XCore" set %arch%=XCORE
17+
if "%1"=="x86" set %arch%=X86
18+
if "%1"=="TMS320C64x" set %arch%=TMS320C64X
19+
if "%1"=="M680x" set %arch%=M680X
20+
if "%1"=="EVM" set %arch%=EVM
21+
if "%1"=="MOS65XX" set %arch%=MOS65XX
22+
23+
if not "%arch%"=="" set flags=%flags% and " -DCAPSTONE_ARCHITECTURE_DEFAULT=OFF -DCAPSTONE_%arch%_SUPPORT=ON"
24+
25+
cmake %flags% -G "NMake Makefiles" ..
626
nmake
727

0 commit comments

Comments
 (0)