blob: 1b435444b6c42c3ce03905d4b473274979033a95 [file] [log] [blame]
daniel96ecc332014-05-18 02:03:15 -07001cmake_minimum_required(VERSION 2.6)
2project(capstone)
3
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +08004# Compile-time options
5# Modify the following options to customize Capstone engine
daniel96ecc332014-05-18 02:03:15 -07006option(BUILD_STATIC "Build static library" ON)
Nguyen Anh Quynh56e4efd2014-05-28 16:27:53 +08007
8option(BUILD_DIET "Build diet library" OFF)
daniel96ecc332014-05-18 02:03:15 -07009option(BUILD_TESTS "Build tests" ON)
10option(USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080011
daniel96ecc332014-05-18 02:03:15 -070012option(ARM_SUPPORT "ARM support" ON)
13option(ARM64_SUPPORT "ARM64 support" ON)
14option(MIPS_SUPPORT "MIPS support" ON)
15option(PPC_SUPPORT "PowerPC support" ON)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +080016option(SPARC_SUPPORT "Sparc support" ON)
17option(SYSZ_SUPPORT "SystemZ support" ON)
18option(XCORE_SUPPORT "XCore support" ON)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080019option(X86_SUPPORT "X86 support" ON)
20option(X86_REDUCE "X86 with reduce instruction sets to minimize library" OFF)
21# End of compile-time option
22# DO NOT modify anything below
23
24set(VERSION_MAJOR 2)
25set(VERSION_MINOR 1)
26set(VERSION_PATCH 2)
daniel96ecc332014-05-18 02:03:15 -070027
28if (USE_DEFAULT_ALLOC)
Nguyen Anh Quynh2f661e02014-05-28 14:41:39 +080029 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
daniel96ecc332014-05-18 02:03:15 -070030endif ()
31
32set(SOURCES
33 cs.c
34 MCInst.c
35 MCInstrDesc.c
36 MCRegisterInfo.c
37 SStream.c
38 utils.c
39 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080040
Nguyen Anh Quynh6a899ff2014-05-28 16:09:09 +080041set(TEST_SOURCES test.c test_detail.c test_skipdata.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080042
daniel96ecc332014-05-18 02:03:15 -070043if (ARM_SUPPORT)
44 add_definitions(-DCAPSTONE_HAS_ARM)
45 set(SOURCES
46 ${SOURCES}
47 arch/ARM/ARMDisassembler.c
48 arch/ARM/ARMInstPrinter.c
49 arch/ARM/ARMMapping.c
50 arch/ARM/ARMModule.c
51 )
52 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
53endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080054
daniel96ecc332014-05-18 02:03:15 -070055if (ARM64_SUPPORT)
56 add_definitions(-DCAPSTONE_HAS_ARM64)
57 set(SOURCES
58 ${SOURCES}
59 arch/AArch64/AArch64BaseInfo.c
60 arch/AArch64/AArch64Disassembler.c
61 arch/AArch64/AArch64InstPrinter.c
62 arch/AArch64/AArch64Mapping.c
63 arch/AArch64/AArch64Module.c
64 )
65 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
66endif ()
67
68if (MIPS_SUPPORT)
69 add_definitions(-DCAPSTONE_HAS_MIPS)
70 set(SOURCES
71 ${SOURCES}
72 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080073 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070074 arch/Mips/MipsMapping.c
75 arch/Mips/MipsModule.c
76 )
77 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
78endif ()
79
80if (PPC_SUPPORT)
81 add_definitions(-DCAPSTONE_HAS_POWERPC)
82 set(SOURCES
83 ${SOURCES}
84 arch/PowerPC/PPCDisassembler.c
85 arch/PowerPC/PPCInstPrinter.c
86 arch/PowerPC/PPCMapping.c
87 arch/PowerPC/PPCModule.c
88 )
89 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
90endif ()
91
92if (X86_SUPPORT)
93 add_definitions(-DCAPSTONE_HAS_X86)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080094if (BUILD_DIET)
95 set(SOURCES
96 ${SOURCES}
97 arch/X86/X86Disassembler.c
98 arch/X86/X86DisassemblerDecoder.c
99 arch/X86/X86IntelInstPrinter.c
100 arch/X86/X86Mapping.c
101 arch/X86/X86Module.c
102 )
103else ()
daniel96ecc332014-05-18 02:03:15 -0700104 set(SOURCES
105 ${SOURCES}
106 arch/X86/X86ATTInstPrinter.c
107 arch/X86/X86Disassembler.c
108 arch/X86/X86DisassemblerDecoder.c
109 arch/X86/X86IntelInstPrinter.c
110 arch/X86/X86Mapping.c
111 arch/X86/X86Module.c
112 )
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +0800113endif ()
daniel96ecc332014-05-18 02:03:15 -0700114 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
115endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800116
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800117if (SPARC_SUPPORT)
118 add_definitions(-DCAPSTONE_HAS_SPARC)
119 set(SOURCES
120 ${SOURCES}
121 arch/Sparc/SparcDisassembler.c
122 arch/Sparc/SparcInstPrinter.c
123 arch/Sparc/SparcMapping.c
124 arch/Sparc/SparcModule.c
125 )
126 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
127endif ()
128
129if (SYSZ_SUPPORT)
130 add_definitions(-DCAPSTONE_HAS_SYSZ)
131 set(SOURCES
132 ${SOURCES}
133 arch/SystemZ/SystemZDisassembler.c
134 arch/SystemZ/SystemZInstPrinter.c
135 arch/SystemZ/SystemZMapping.c
136 arch/SystemZ/SystemZModule.c
137 arch/SystemZ/SystemZMCTargetDesc.c
138 )
139 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
140endif ()
141
142if (XCORE_SUPPORT)
143 add_definitions(-DCAPSTONE_HAS_XCORE)
144 set(SOURCES
145 ${SOURCES}
146 arch/XCore/XCoreDisassembler.c
147 arch/XCore/XCoreInstPrinter.c
148 arch/XCore/XCoreMapping.c
149 arch/XCore/XCoreModule.c
150 )
151 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
152endif ()
153
daniel96ecc332014-05-18 02:03:15 -0700154include_directories("${PROJECT_SOURCE_DIR}/include")
155
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800156if (BUILD_DIET)
157 add_definitions(-DCAPSTONE_DIET)
158endif ()
159
Nguyen Anh Quynh31ec5422014-05-28 15:58:35 +0800160if (X86_REDUCE)
161 add_definitions(-DCAPSTONE_X86_REDUCE)
162endif ()
163
daniel96ecc332014-05-18 02:03:15 -0700164if (BUILD_STATIC)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800165 add_library(libcapstone STATIC ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700166else ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800167 add_library(libcapstone SHARED ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700168endif ()
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800169
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800170set_target_properties(libcapstone PROPERTIES
daniel96ecc332014-05-18 02:03:15 -0700171 VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
172 SOVERSION ${VERSION_MAJOR})
173
174if (BUILD_TESTS)
175 foreach (TSRC ${TEST_SOURCES})
176 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
177 add_executable(${TBIN} "tests/${TSRC}")
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800178 target_link_libraries(${TBIN} libcapstone)
daniel96ecc332014-05-18 02:03:15 -0700179 endforeach ()
180endif ()
181
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800182set(INCLUDES arm64.h arm.h capstone.h mips.h ppc.h x86.h sparc.h systemz.h xcore.h)
daniel96ecc332014-05-18 02:03:15 -0700183foreach (INC ${INCLUDES})
184 install(FILES "include/${INC}" DESTINATION include/capstone)
185endforeach ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800186install(TARGETS libcapstone
daniel96ecc332014-05-18 02:03:15 -0700187 RUNTIME DESTINATION bin
188 LIBRARY DESTINATION lib
189 ARCHIVE DESTINATION lib)