blob: c55c2eccadb6b218d6827d978c0d78147a60edd4 [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!
10option(BUILD_STATIC "Build static library" ON)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000011option(BUILD_SHARED "Build shared library" ON)
Nguyen Anh Quynh56e4efd2014-05-28 16:27:53 +080012option(BUILD_DIET "Build diet library" OFF)
daniel96ecc332014-05-18 02:03:15 -070013option(BUILD_TESTS "Build tests" ON)
Nguyen Anh Quynhd765ab22014-06-03 17:38:29 +080014option(USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080015
daniel96ecc332014-05-18 02:03:15 -070016option(ARM_SUPPORT "ARM support" ON)
17option(ARM64_SUPPORT "ARM64 support" ON)
18option(MIPS_SUPPORT "MIPS support" ON)
19option(PPC_SUPPORT "PowerPC support" ON)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +080020option(SPARC_SUPPORT "Sparc support" ON)
21option(SYSZ_SUPPORT "SystemZ support" ON)
22option(XCORE_SUPPORT "XCore support" ON)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080023option(X86_SUPPORT "x86 support" ON)
24option(X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +080025
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080026if (BUILD_DIET)
27 add_definitions(-DCAPSTONE_DIET)
28endif ()
daniel96ecc332014-05-18 02:03:15 -070029
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080030if (USE_DEFAULT_ALLOC)
Nguyen Anh Quynhd765ab22014-06-03 17:38:29 +080031 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +080032endif ()
33
34if (X86_REDUCE)
35 add_definitions(-DCAPSTONE_X86_REDUCE)
daniel96ecc332014-05-18 02:03:15 -070036endif ()
37
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000038## sources
daniel96ecc332014-05-18 02:03:15 -070039set(SOURCES
40 cs.c
41 MCInst.c
42 MCInstrDesc.c
43 MCRegisterInfo.c
44 SStream.c
45 utils.c
46 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080047
Nguyen Anh Quynh6a899ff2014-05-28 16:09:09 +080048set(TEST_SOURCES test.c test_detail.c test_skipdata.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080049
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +000050## architecture support
daniel96ecc332014-05-18 02:03:15 -070051if (ARM_SUPPORT)
52 add_definitions(-DCAPSTONE_HAS_ARM)
53 set(SOURCES
54 ${SOURCES}
55 arch/ARM/ARMDisassembler.c
56 arch/ARM/ARMInstPrinter.c
57 arch/ARM/ARMMapping.c
58 arch/ARM/ARMModule.c
59 )
60 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
61endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080062
daniel96ecc332014-05-18 02:03:15 -070063if (ARM64_SUPPORT)
64 add_definitions(-DCAPSTONE_HAS_ARM64)
65 set(SOURCES
66 ${SOURCES}
67 arch/AArch64/AArch64BaseInfo.c
68 arch/AArch64/AArch64Disassembler.c
69 arch/AArch64/AArch64InstPrinter.c
70 arch/AArch64/AArch64Mapping.c
71 arch/AArch64/AArch64Module.c
72 )
73 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
74endif ()
75
76if (MIPS_SUPPORT)
77 add_definitions(-DCAPSTONE_HAS_MIPS)
78 set(SOURCES
79 ${SOURCES}
80 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080081 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070082 arch/Mips/MipsMapping.c
83 arch/Mips/MipsModule.c
84 )
85 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
86endif ()
87
88if (PPC_SUPPORT)
89 add_definitions(-DCAPSTONE_HAS_POWERPC)
90 set(SOURCES
91 ${SOURCES}
92 arch/PowerPC/PPCDisassembler.c
93 arch/PowerPC/PPCInstPrinter.c
94 arch/PowerPC/PPCMapping.c
95 arch/PowerPC/PPCModule.c
96 )
97 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
98endif ()
99
100if (X86_SUPPORT)
101 add_definitions(-DCAPSTONE_HAS_X86)
Nguyen Anh Quynha71a27b2014-05-28 21:20:30 +0800102 set(SOURCES
103 ${SOURCES}
104 arch/X86/X86Disassembler.c
105 arch/X86/X86DisassemblerDecoder.c
106 arch/X86/X86IntelInstPrinter.c
107 arch/X86/X86Mapping.c
108 arch/X86/X86Module.c
109 )
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +0800110 if (NOT BUILD_DIET)
111 set(SOURCES ${SOURCES} arch/X86/X86ATTInstPrinter.c)
112 endif ()
daniel96ecc332014-05-18 02:03:15 -0700113 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
114endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800115
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800116if (SPARC_SUPPORT)
117 add_definitions(-DCAPSTONE_HAS_SPARC)
118 set(SOURCES
119 ${SOURCES}
120 arch/Sparc/SparcDisassembler.c
121 arch/Sparc/SparcInstPrinter.c
122 arch/Sparc/SparcMapping.c
123 arch/Sparc/SparcModule.c
124 )
125 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
126endif ()
127
128if (SYSZ_SUPPORT)
129 add_definitions(-DCAPSTONE_HAS_SYSZ)
130 set(SOURCES
131 ${SOURCES}
132 arch/SystemZ/SystemZDisassembler.c
133 arch/SystemZ/SystemZInstPrinter.c
134 arch/SystemZ/SystemZMapping.c
135 arch/SystemZ/SystemZModule.c
136 arch/SystemZ/SystemZMCTargetDesc.c
137 )
138 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
139endif ()
140
141if (XCORE_SUPPORT)
142 add_definitions(-DCAPSTONE_HAS_XCORE)
143 set(SOURCES
144 ${SOURCES}
145 arch/XCore/XCoreDisassembler.c
146 arch/XCore/XCoreInstPrinter.c
147 arch/XCore/XCoreMapping.c
148 arch/XCore/XCoreModule.c
149 )
150 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
151endif ()
152
daniel96ecc332014-05-18 02:03:15 -0700153include_directories("${PROJECT_SOURCE_DIR}/include")
154
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000155## properties
156# version info
157set_property(GLOBAL PROPERTY VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
158set_property(GLOBAL PROPERTY SOVERSION SOVERSION ${VERSION_MAJOR})
159
160## targets
Nguyen Anh Quynh758fcbe2014-05-31 10:44:27 +0800161if (BUILD_STATIC)
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000162 add_library(capstone-static STATIC ${SOURCES})
163 set_property(TARGET capstone-static PROPERTY OUTPUT_NAME capstone)
164 set_property(TARGET capstone-static PROPERTY PREFIX lib)
165 set(default-target capstone-static)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800166endif ()
167
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000168if (BUILD_SHARED)
169 add_library(capstone-shared SHARED ${SOURCES})
170 set_property(TARGET capstone-shared PROPERTY OUTPUT_NAME capstone)
171 set_property(TARGET capstone-shared PROPERTY COMPILE_FLAGS -DCAPSTONE_SHARED)
172
173 if(NOT DEFINED default-target) # honor `capstone-static` for tests first.
174 set(default-target capstone-shared)
175 add_definitions(-DCAPSTONE_SHARED)
176 endif ()
177endif ()
daniel96ecc332014-05-18 02:03:15 -0700178
179if (BUILD_TESTS)
180 foreach (TSRC ${TEST_SOURCES})
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000181 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
182 add_executable(${TBIN} "tests/${TSRC}")
183 target_link_libraries(${TBIN} ${default-target})
daniel96ecc332014-05-18 02:03:15 -0700184 endforeach ()
185endif ()
186
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000187## installation
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800188set(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 -0700189foreach (INC ${INCLUDES})
190 install(FILES "include/${INC}" DESTINATION include/capstone)
191endforeach ()
Nguyen Anh Quynh73438482014-05-28 21:55:37 +0800192
Ali Rizvi-Santiago10053ba2014-06-03 21:04:23 +0000193if (BUILD_STATIC)
194 install(TARGETS capstone-static
195 RUNTIME DESTINATION bin
196 LIBRARY DESTINATION lib
197 ARCHIVE DESTINATION lib)
198endif ()
199
200if (BUILD_SHARED)
201 install(TARGETS capstone-shared
202 RUNTIME DESTINATION bin
203 LIBRARY DESTINATION lib
204 ARCHIVE DESTINATION lib)
205endif ()