blob: e8f67e20ceb5b02691a80725d9bf70aba963d8a6 [file] [log] [blame]
daniel96ecc332014-05-18 02:03:15 -07001cmake_minimum_required(VERSION 2.6)
2project(capstone)
3
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +08004set(VERSION_MAJOR 2)
Nguyen Anh Quynhde8c6892014-05-31 10:45:15 +08005set(VERSION_MINOR 2)
6set(VERSION_PATCH 0)
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!
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020010option(CAPSTONE_BUILD_STATIC "Build static library" ON)
11option(CAPSTONE_BUILD_SHARED "Build shared library" ON)
12option(CAPSTONE_BUILD_DIET "Build diet library" OFF)
13option(CAPSTONE_BUILD_TESTS "Build tests" ON)
14option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080015
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020016option(CAPSTONE_ARM_SUPPORT "ARM support" ON)
17option(CAPSTONE_ARM64_SUPPORT "ARM64 support" ON)
18option(CAPSTONE_MIPS_SUPPORT "MIPS support" ON)
19option(CAPSTONE_PPC_SUPPORT "PowerPC support" ON)
Yegor Derevenetsebc4ced2014-09-21 19:52:57 +020020option(CAPSTONE_SPARC_SUPPORT "Sparc support" ON)
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020021option(CAPSTONE_SYSZ_SUPPORT "SystemZ support" ON)
22option(CAPSTONE_XCORE_SUPPORT "XCore support" ON)
23option(CAPSTONE_X86_SUPPORT "x86 support" ON)
24option(CAPSTONE_X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF)
25option(CAPSTONE_X86_ATT_DISABLE, "Disable x86 AT&T syntax" OFF)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080026
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020027if (CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080028 add_definitions(-DCAPSTONE_DIET)
29endif ()
daniel96ecc332014-05-18 02:03:15 -070030
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020031if (CAPSTONE_USE_DEFAULT_ALLOC)
Nguyen Anh Quynhd765ab22014-06-03 17:38:29 +080032 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080033endif ()
34
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020035if (CAPSTONE_X86_REDUCE)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080036 add_definitions(-DCAPSTONE_X86_REDUCE)
daniel96ecc332014-05-18 02:03:15 -070037endif ()
38
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020039if (CAPSTONE_X86_ATT_DISABLE)
baguette86e84502014-08-17 20:59:05 +020040 add_definitions(-DCAPSTONE_X86_ATT_DISABLE)
41endif ()
42
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000043## sources
daniel96ecc332014-05-18 02:03:15 -070044set(SOURCES
45 cs.c
46 MCInst.c
47 MCInstrDesc.c
48 MCRegisterInfo.c
49 SStream.c
50 utils.c
51 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080052
Nguyen Anh Quynh0a2eca72014-10-11 00:36:16 +080053set(TEST_SOURCES test.c test_detail.c test_skipdata.c test_iter.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080054
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000055## architecture support
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020056if (CAPSTONE_ARM_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070057 add_definitions(-DCAPSTONE_HAS_ARM)
58 set(SOURCES
59 ${SOURCES}
60 arch/ARM/ARMDisassembler.c
61 arch/ARM/ARMInstPrinter.c
62 arch/ARM/ARMMapping.c
63 arch/ARM/ARMModule.c
64 )
65 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
66endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080067
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020068if (CAPSTONE_ARM64_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070069 add_definitions(-DCAPSTONE_HAS_ARM64)
70 set(SOURCES
71 ${SOURCES}
72 arch/AArch64/AArch64BaseInfo.c
73 arch/AArch64/AArch64Disassembler.c
74 arch/AArch64/AArch64InstPrinter.c
75 arch/AArch64/AArch64Mapping.c
76 arch/AArch64/AArch64Module.c
77 )
78 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
79endif ()
80
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020081if (CAPSTONE_MIPS_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070082 add_definitions(-DCAPSTONE_HAS_MIPS)
83 set(SOURCES
84 ${SOURCES}
85 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080086 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070087 arch/Mips/MipsMapping.c
88 arch/Mips/MipsModule.c
89 )
90 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
91endif ()
92
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +020093if (CAPSTONE_PPC_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -070094 add_definitions(-DCAPSTONE_HAS_POWERPC)
95 set(SOURCES
96 ${SOURCES}
97 arch/PowerPC/PPCDisassembler.c
98 arch/PowerPC/PPCInstPrinter.c
99 arch/PowerPC/PPCMapping.c
100 arch/PowerPC/PPCModule.c
101 )
102 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
103endif ()
104
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200105if (CAPSTONE_X86_SUPPORT)
daniel96ecc332014-05-18 02:03:15 -0700106 add_definitions(-DCAPSTONE_HAS_X86)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +0800107 set(SOURCES
108 ${SOURCES}
109 arch/X86/X86Disassembler.c
110 arch/X86/X86DisassemblerDecoder.c
111 arch/X86/X86IntelInstPrinter.c
112 arch/X86/X86Mapping.c
113 arch/X86/X86Module.c
114 )
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200115 if (NOT CAPSTONE_BUILD_DIET)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +0800116 set(SOURCES ${SOURCES} arch/X86/X86ATTInstPrinter.c)
117 endif ()
daniel96ecc332014-05-18 02:03:15 -0700118 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
119endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800120
Yegor Derevenetsebc4ced2014-09-21 19:52:57 +0200121if (CAPSTONE_SPARC_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800122 add_definitions(-DCAPSTONE_HAS_SPARC)
123 set(SOURCES
124 ${SOURCES}
125 arch/Sparc/SparcDisassembler.c
126 arch/Sparc/SparcInstPrinter.c
127 arch/Sparc/SparcMapping.c
128 arch/Sparc/SparcModule.c
129 )
130 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
131endif ()
132
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200133if (CAPSTONE_SYSZ_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800134 add_definitions(-DCAPSTONE_HAS_SYSZ)
135 set(SOURCES
136 ${SOURCES}
137 arch/SystemZ/SystemZDisassembler.c
138 arch/SystemZ/SystemZInstPrinter.c
139 arch/SystemZ/SystemZMapping.c
140 arch/SystemZ/SystemZModule.c
141 arch/SystemZ/SystemZMCTargetDesc.c
142 )
143 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
144endif ()
145
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200146if (CAPSTONE_XCORE_SUPPORT)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800147 add_definitions(-DCAPSTONE_HAS_XCORE)
148 set(SOURCES
149 ${SOURCES}
150 arch/XCore/XCoreDisassembler.c
151 arch/XCore/XCoreInstPrinter.c
152 arch/XCore/XCoreMapping.c
153 arch/XCore/XCoreModule.c
154 )
155 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
156endif ()
157
daniel96ecc332014-05-18 02:03:15 -0700158include_directories("${PROJECT_SOURCE_DIR}/include")
159
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000160## properties
161# version info
162set_property(GLOBAL PROPERTY VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
163set_property(GLOBAL PROPERTY SOVERSION SOVERSION ${VERSION_MAJOR})
164
165## targets
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200166if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000167 add_library(capstone-static STATIC ${SOURCES})
168 set_property(TARGET capstone-static PROPERTY OUTPUT_NAME capstone)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000169 set(default-target capstone-static)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800170endif ()
171
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200172if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000173 add_library(capstone-shared SHARED ${SOURCES})
174 set_property(TARGET capstone-shared PROPERTY OUTPUT_NAME capstone)
175 set_property(TARGET capstone-shared PROPERTY COMPILE_FLAGS -DCAPSTONE_SHARED)
176
177 if(NOT DEFINED default-target) # honor `capstone-static` for tests first.
178 set(default-target capstone-shared)
179 add_definitions(-DCAPSTONE_SHARED)
180 endif ()
181endif ()
daniel96ecc332014-05-18 02:03:15 -0700182
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200183if (CAPSTONE_BUILD_TESTS)
daniel96ecc332014-05-18 02:03:15 -0700184 foreach (TSRC ${TEST_SOURCES})
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000185 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
186 add_executable(${TBIN} "tests/${TSRC}")
187 target_link_libraries(${TBIN} ${default-target})
daniel96ecc332014-05-18 02:03:15 -0700188 endforeach ()
189endif ()
190
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000191## installation
Yegor Derevenets17176cd2014-09-20 18:44:21 +0200192set(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 -0700193foreach (INC ${INCLUDES})
194 install(FILES "include/${INC}" DESTINATION include/capstone)
195endforeach ()
Nguyen Anh Quynh73438482014-05-28 21:55:37 +0800196
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200197if (CAPSTONE_BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000198 install(TARGETS capstone-static
199 RUNTIME DESTINATION bin
200 LIBRARY DESTINATION lib
201 ARCHIVE DESTINATION lib)
202endif ()
203
Yegor Derevenetsb4d78d92014-09-19 18:39:22 +0200204if (CAPSTONE_BUILD_SHARED)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000205 install(TARGETS capstone-shared
206 RUNTIME DESTINATION bin
207 LIBRARY DESTINATION lib
208 ARCHIVE DESTINATION lib)
209endif ()