blob: b1cf5462a12e74edecba17792ac300c33a5c38ab [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)
6set(VERSION_PATCH 1)
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)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080027
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020028if (CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080029 add_definitions(-DCAPSTONE_DIET)
30endif ()
daniel96ecc332014-05-18 02:03:15 -070031
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020032if (CAPSTONE_USE_DEFAULT_ALLOC)
Nguyen Anh Quynhd765ab22014-06-03 17:38:29 +080033 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080034endif ()
35
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020036if (CAPSTONE_X86_REDUCE)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080037 add_definitions(-DCAPSTONE_X86_REDUCE)
daniel96ecc332014-05-18 02:03:15 -070038endif ()
39
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020040if (CAPSTONE_X86_ATT_DISABLE)
baguette86e84502014-08-17 20:59:05 +020041 add_definitions(-DCAPSTONE_X86_ATT_DISABLE)
42endif ()
43
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000044## sources
daniel96ecc332014-05-18 02:03:15 -070045set(SOURCES
46 cs.c
47 MCInst.c
48 MCInstrDesc.c
49 MCRegisterInfo.c
50 SStream.c
51 utils.c
52 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080053
Nguyen Anh Quynh0a2eca72014-10-11 00:36:16 +080054set(TEST_SOURCES test.c test_detail.c test_skipdata.c test_iter.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080055
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000056## architecture support
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020057if (CAPSTONE_ARM_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070058 add_definitions(-DCAPSTONE_HAS_ARM)
59 set(SOURCES
60 ${SOURCES}
61 arch/ARM/ARMDisassembler.c
62 arch/ARM/ARMInstPrinter.c
63 arch/ARM/ARMMapping.c
64 arch/ARM/ARMModule.c
65 )
66 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
67endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080068
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020069if (CAPSTONE_ARM64_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070070 add_definitions(-DCAPSTONE_HAS_ARM64)
71 set(SOURCES
72 ${SOURCES}
73 arch/AArch64/AArch64BaseInfo.c
74 arch/AArch64/AArch64Disassembler.c
75 arch/AArch64/AArch64InstPrinter.c
76 arch/AArch64/AArch64Mapping.c
77 arch/AArch64/AArch64Module.c
78 )
79 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
80endif ()
81
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020082if (CAPSTONE_MIPS_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070083 add_definitions(-DCAPSTONE_HAS_MIPS)
84 set(SOURCES
85 ${SOURCES}
86 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080087 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070088 arch/Mips/MipsMapping.c
89 arch/Mips/MipsModule.c
90 )
91 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
92endif ()
93
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020094if (CAPSTONE_PPC_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070095 add_definitions(-DCAPSTONE_HAS_POWERPC)
96 set(SOURCES
97 ${SOURCES}
98 arch/PowerPC/PPCDisassembler.c
99 arch/PowerPC/PPCInstPrinter.c
100 arch/PowerPC/PPCMapping.c
101 arch/PowerPC/PPCModule.c
102 )
103 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
104endif ()
105
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200106if (CAPSTONE_X86_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -0700107 add_definitions(-DCAPSTONE_HAS_X86)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +0800108 set(SOURCES
109 ${SOURCES}
110 arch/X86/X86Disassembler.c
111 arch/X86/X86DisassemblerDecoder.c
112 arch/X86/X86IntelInstPrinter.c
113 arch/X86/X86Mapping.c
114 arch/X86/X86Module.c
115 )
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200116 if (NOT CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +0800117 set(SOURCES ${SOURCES} arch/X86/X86ATTInstPrinter.c)
118 endif ()
daniel96ecc332014-05-18 02:03:15 -0700119 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
120endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800121
Yegor Derevenetsebc4ced2014-09-21 19:52:57 +0200122if (CAPSTONE_SPARC_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800123 add_definitions(-DCAPSTONE_HAS_SPARC)
124 set(SOURCES
125 ${SOURCES}
126 arch/Sparc/SparcDisassembler.c
127 arch/Sparc/SparcInstPrinter.c
128 arch/Sparc/SparcMapping.c
129 arch/Sparc/SparcModule.c
130 )
131 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
132endif ()
133
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200134if (CAPSTONE_SYSZ_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800135 add_definitions(-DCAPSTONE_HAS_SYSZ)
136 set(SOURCES
137 ${SOURCES}
138 arch/SystemZ/SystemZDisassembler.c
139 arch/SystemZ/SystemZInstPrinter.c
140 arch/SystemZ/SystemZMapping.c
141 arch/SystemZ/SystemZModule.c
142 arch/SystemZ/SystemZMCTargetDesc.c
143 )
144 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
145endif ()
146
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200147if (CAPSTONE_XCORE_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800148 add_definitions(-DCAPSTONE_HAS_XCORE)
149 set(SOURCES
150 ${SOURCES}
151 arch/XCore/XCoreDisassembler.c
152 arch/XCore/XCoreInstPrinter.c
153 arch/XCore/XCoreMapping.c
154 arch/XCore/XCoreModule.c
155 )
156 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
157endif ()
158
daniel96ecc332014-05-18 02:03:15 -0700159include_directories("${PROJECT_SOURCE_DIR}/include")
160
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000161## properties
162# version info
163set_property(GLOBAL PROPERTY VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
164set_property(GLOBAL PROPERTY SOVERSION SOVERSION ${VERSION_MAJOR})
165
166## targets
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200167if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000168 add_library(capstone-static STATIC ${SOURCES})
169 set_property(TARGET capstone-static PROPERTY OUTPUT_NAME capstone)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000170 set(default-target capstone-static)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800171endif ()
172
Nguyen Anh Quynh4822f992015-02-03 18:25:12 +0800173# Force static runtime libraries
174if (CAPSTONE_BUILD_STATIC_RUNTIME)
175 FOREACH(flag
176 CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
177 CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
178 CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
179 CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
180 STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
181 SET("${flag}" "${${flag}} /EHsc")
182 ENDFOREACH()
183endif ()
184
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200185if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000186 add_library(capstone-shared SHARED ${SOURCES})
187 set_property(TARGET capstone-shared PROPERTY OUTPUT_NAME capstone)
188 set_property(TARGET capstone-shared PROPERTY COMPILE_FLAGS -DCAPSTONE_SHARED)
189
190 if(NOT DEFINED default-target) # honor `capstone-static` for tests first.
191 set(default-target capstone-shared)
192 add_definitions(-DCAPSTONE_SHARED)
193 endif ()
194endif ()
daniel96ecc332014-05-18 02:03:15 -0700195
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200196if (CAPSTONE_BUILD_TESTS)
daniel96ecc332014-05-18 02:03:15 -0700197 foreach (TSRC ${TEST_SOURCES})
flyingsymbolsd91f9642014-10-22 03:21:43 -0400198 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
199 add_executable(${TBIN} "tests/${TSRC}")
200 target_link_libraries(${TBIN} ${default-target})
daniel96ecc332014-05-18 02:03:15 -0700201 endforeach ()
flyingsymbolsd91f9642014-10-22 03:21:43 -0400202 if (CAPSTONE_ARM_SUPPORT)
203 set(ARM_REGRESS_TEST test_arm_regression.c)
204 STRING(REGEX REPLACE ".c$" "" ARM_REGRESS_BIN ${ARM_REGRESS_TEST})
205 add_executable(${ARM_REGRESS_BIN} "suite/arm/${ARM_REGRESS_TEST}")
206 target_link_libraries(${ARM_REGRESS_BIN} ${default-target})
207 endif()
daniel96ecc332014-05-18 02:03:15 -0700208endif ()
209
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000210## installation
Yegor Derevenets17176cd2014-09-20 18:44:21 +0200211set(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 -0700212foreach (INC ${INCLUDES})
213 install(FILES "include/${INC}" DESTINATION include/capstone)
214endforeach ()
Nguyen Anh Quynh73438482014-05-28 21:55:37 +0800215
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200216if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000217 install(TARGETS capstone-static
218 RUNTIME DESTINATION bin
219 LIBRARY DESTINATION lib
220 ARCHIVE DESTINATION lib)
221endif ()
222
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200223if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000224 install(TARGETS capstone-shared
225 RUNTIME DESTINATION bin
226 LIBRARY DESTINATION lib
227 ARCHIVE DESTINATION lib)
228endif ()