blob: 3fce23aeb8825a9ac0924d9a5514bb23bd9c21bc [file] [log] [blame]
daniel96ecc332014-05-18 02:03:15 -07001cmake_minimum_required(VERSION 2.6)
2project(capstone)
3
Nguyen Anh Quynhe4c0f6c2015-01-30 11:25:24 +08004set(VERSION_MAJOR 3)
5set(VERSION_MINOR 0)
Nguyen Anh Quynhcd3d1862015-02-25 12:27:26 +08006set(VERSION_PATCH 2)
Nguyen Anh Quynh56e4efd2014-05-28 16:27:53 +08007
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +08008# to configure the options specify them in in the command line or change them in the cmake UI.
9# Don't edit the makefile!
Nguyen Anh Quynh4822f992015-02-03 18:25:12 +080010option(CAPSTONE_BUILD_STATIC_RUNTIME "Embed static runtime" OFF)
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020011option(CAPSTONE_BUILD_STATIC "Build static library" ON)
12option(CAPSTONE_BUILD_SHARED "Build shared library" ON)
13option(CAPSTONE_BUILD_DIET "Build diet library" OFF)
14option(CAPSTONE_BUILD_TESTS "Build tests" ON)
15option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080016
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020017option(CAPSTONE_ARM_SUPPORT "ARM support" ON)
18option(CAPSTONE_ARM64_SUPPORT "ARM64 support" ON)
19option(CAPSTONE_MIPS_SUPPORT "MIPS support" ON)
20option(CAPSTONE_PPC_SUPPORT "PowerPC support" ON)
Yegor Derevenetsebc4ced2014-09-21 19:52:57 +020021option(CAPSTONE_SPARC_SUPPORT "Sparc support" ON)
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020022option(CAPSTONE_SYSZ_SUPPORT "SystemZ support" ON)
23option(CAPSTONE_XCORE_SUPPORT "XCore support" ON)
24option(CAPSTONE_X86_SUPPORT "x86 support" ON)
25option(CAPSTONE_X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF)
Nguyen Anh Quynha8fd71f2014-10-14 07:55:30 +080026option(CAPSTONE_X86_ATT_DISABLE "Disable x86 AT&T syntax" OFF)
reverserbcf09f42015-04-09 18:28:19 +010027option(CAPSTONE_OSXKERNEL_SUPPORT "Support to embed Capstone into OS X Kernel extensions" OFF)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080028
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020029if (CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080030 add_definitions(-DCAPSTONE_DIET)
31endif ()
daniel96ecc332014-05-18 02:03:15 -070032
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020033if (CAPSTONE_USE_DEFAULT_ALLOC)
Nguyen Anh Quynhd765ab22014-06-03 17:38:29 +080034 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080035endif ()
36
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020037if (CAPSTONE_X86_REDUCE)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080038 add_definitions(-DCAPSTONE_X86_REDUCE)
daniel96ecc332014-05-18 02:03:15 -070039endif ()
40
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020041if (CAPSTONE_X86_ATT_DISABLE)
baguette86e84502014-08-17 20:59:05 +020042 add_definitions(-DCAPSTONE_X86_ATT_DISABLE)
43endif ()
44
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000045## sources
daniel96ecc332014-05-18 02:03:15 -070046set(SOURCES
47 cs.c
48 MCInst.c
49 MCInstrDesc.c
50 MCRegisterInfo.c
51 SStream.c
52 utils.c
53 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080054
Nguyen Anh Quynh0a2eca72014-10-11 00:36:16 +080055set(TEST_SOURCES test.c test_detail.c test_skipdata.c test_iter.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080056
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000057## architecture support
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020058if (CAPSTONE_ARM_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070059 add_definitions(-DCAPSTONE_HAS_ARM)
60 set(SOURCES
61 ${SOURCES}
62 arch/ARM/ARMDisassembler.c
63 arch/ARM/ARMInstPrinter.c
64 arch/ARM/ARMMapping.c
65 arch/ARM/ARMModule.c
66 )
67 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
68endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080069
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020070if (CAPSTONE_ARM64_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070071 add_definitions(-DCAPSTONE_HAS_ARM64)
72 set(SOURCES
73 ${SOURCES}
74 arch/AArch64/AArch64BaseInfo.c
75 arch/AArch64/AArch64Disassembler.c
76 arch/AArch64/AArch64InstPrinter.c
77 arch/AArch64/AArch64Mapping.c
78 arch/AArch64/AArch64Module.c
79 )
80 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
81endif ()
82
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020083if (CAPSTONE_MIPS_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070084 add_definitions(-DCAPSTONE_HAS_MIPS)
85 set(SOURCES
86 ${SOURCES}
87 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080088 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070089 arch/Mips/MipsMapping.c
90 arch/Mips/MipsModule.c
91 )
92 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
93endif ()
94
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020095if (CAPSTONE_PPC_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070096 add_definitions(-DCAPSTONE_HAS_POWERPC)
97 set(SOURCES
98 ${SOURCES}
99 arch/PowerPC/PPCDisassembler.c
100 arch/PowerPC/PPCInstPrinter.c
101 arch/PowerPC/PPCMapping.c
102 arch/PowerPC/PPCModule.c
103 )
104 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
105endif ()
106
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200107if (CAPSTONE_X86_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -0700108 add_definitions(-DCAPSTONE_HAS_X86)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +0800109 set(SOURCES
110 ${SOURCES}
111 arch/X86/X86Disassembler.c
112 arch/X86/X86DisassemblerDecoder.c
113 arch/X86/X86IntelInstPrinter.c
114 arch/X86/X86Mapping.c
115 arch/X86/X86Module.c
116 )
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200117 if (NOT CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +0800118 set(SOURCES ${SOURCES} arch/X86/X86ATTInstPrinter.c)
119 endif ()
daniel96ecc332014-05-18 02:03:15 -0700120 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
121endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800122
Yegor Derevenetsebc4ced2014-09-21 19:52:57 +0200123if (CAPSTONE_SPARC_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800124 add_definitions(-DCAPSTONE_HAS_SPARC)
125 set(SOURCES
126 ${SOURCES}
127 arch/Sparc/SparcDisassembler.c
128 arch/Sparc/SparcInstPrinter.c
129 arch/Sparc/SparcMapping.c
130 arch/Sparc/SparcModule.c
131 )
132 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
133endif ()
134
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200135if (CAPSTONE_SYSZ_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800136 add_definitions(-DCAPSTONE_HAS_SYSZ)
137 set(SOURCES
138 ${SOURCES}
139 arch/SystemZ/SystemZDisassembler.c
140 arch/SystemZ/SystemZInstPrinter.c
141 arch/SystemZ/SystemZMapping.c
142 arch/SystemZ/SystemZModule.c
143 arch/SystemZ/SystemZMCTargetDesc.c
144 )
145 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
146endif ()
147
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200148if (CAPSTONE_XCORE_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800149 add_definitions(-DCAPSTONE_HAS_XCORE)
150 set(SOURCES
151 ${SOURCES}
152 arch/XCore/XCoreDisassembler.c
153 arch/XCore/XCoreInstPrinter.c
154 arch/XCore/XCoreMapping.c
155 arch/XCore/XCoreModule.c
156 )
157 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
158endif ()
159
reverserbcf09f42015-04-09 18:28:19 +0100160if (CAPSTONE_OSXKERNEL_SUPPORT)
161 add_definitions(-DCAPSTONE_HAS_OSXKERNEL)
162endif ()
163
daniel96ecc332014-05-18 02:03:15 -0700164include_directories("${PROJECT_SOURCE_DIR}/include")
165
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000166## properties
167# version info
168set_property(GLOBAL PROPERTY VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
169set_property(GLOBAL PROPERTY SOVERSION SOVERSION ${VERSION_MAJOR})
170
171## targets
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200172if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000173 add_library(capstone-static STATIC ${SOURCES})
174 set_property(TARGET capstone-static PROPERTY OUTPUT_NAME capstone)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000175 set(default-target capstone-static)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800176endif ()
177
Nguyen Anh Quynh4822f992015-02-03 18:25:12 +0800178# Force static runtime libraries
179if (CAPSTONE_BUILD_STATIC_RUNTIME)
180 FOREACH(flag
181 CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
182 CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
183 CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
184 CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
185 STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
186 SET("${flag}" "${${flag}} /EHsc")
187 ENDFOREACH()
188endif ()
189
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200190if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000191 add_library(capstone-shared SHARED ${SOURCES})
192 set_property(TARGET capstone-shared PROPERTY OUTPUT_NAME capstone)
193 set_property(TARGET capstone-shared PROPERTY COMPILE_FLAGS -DCAPSTONE_SHARED)
194
learn_more455fa062015-04-14 17:00:57 +0200195 if (MSVC)
learn_morec85e3c32015-04-14 15:39:07 +0200196 set_target_properties(capstone-shared PROPERTIES IMPORT_SUFFIX _dll.lib)
learn_more455fa062015-04-14 17:00:57 +0200197 endif ()
learn_morec85e3c32015-04-14 15:39:07 +0200198
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000199 if(NOT DEFINED default-target) # honor `capstone-static` for tests first.
200 set(default-target capstone-shared)
201 add_definitions(-DCAPSTONE_SHARED)
202 endif ()
203endif ()
daniel96ecc332014-05-18 02:03:15 -0700204
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200205if (CAPSTONE_BUILD_TESTS)
daniel96ecc332014-05-18 02:03:15 -0700206 foreach (TSRC ${TEST_SOURCES})
flyingsymbolsd91f9642014-10-22 03:21:43 -0400207 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
208 add_executable(${TBIN} "tests/${TSRC}")
209 target_link_libraries(${TBIN} ${default-target})
daniel96ecc332014-05-18 02:03:15 -0700210 endforeach ()
flyingsymbolsd91f9642014-10-22 03:21:43 -0400211 if (CAPSTONE_ARM_SUPPORT)
212 set(ARM_REGRESS_TEST test_arm_regression.c)
213 STRING(REGEX REPLACE ".c$" "" ARM_REGRESS_BIN ${ARM_REGRESS_TEST})
214 add_executable(${ARM_REGRESS_BIN} "suite/arm/${ARM_REGRESS_TEST}")
215 target_link_libraries(${ARM_REGRESS_BIN} ${default-target})
216 endif()
daniel96ecc332014-05-18 02:03:15 -0700217endif ()
218
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000219## installation
Yegor Derevenets17176cd2014-09-20 18:44:21 +0200220set(INCLUDES arm64.h arm.h capstone.h mips.h ppc.h x86.h sparc.h systemz.h xcore.h platform.h)
daniel96ecc332014-05-18 02:03:15 -0700221foreach (INC ${INCLUDES})
222 install(FILES "include/${INC}" DESTINATION include/capstone)
223endforeach ()
Nguyen Anh Quynh73438482014-05-28 21:55:37 +0800224
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200225if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000226 install(TARGETS capstone-static
227 RUNTIME DESTINATION bin
228 LIBRARY DESTINATION lib
229 ARCHIVE DESTINATION lib)
230endif ()
231
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200232if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000233 install(TARGETS capstone-shared
234 RUNTIME DESTINATION bin
235 LIBRARY DESTINATION lib
236 ARCHIVE DESTINATION lib)
237endif ()