blob: cd704721cda0170722ea0d02aab68a2aff249945 [file] [log] [blame]
daniel96ecc332014-05-18 02:03:15 -07001cmake_minimum_required(VERSION 2.6)
2project(capstone)
3
4set(VERSION_MAJOR 2)
5set(VERSION_MINOR 1)
6set(VERSION_PATCH 2)
7
Nguyen Anh Quynhe7f251b2014-05-28 15:15:58 +08008option(BUILD_DIET "Build diet library" OFF)
daniel96ecc332014-05-18 02:03:15 -07009option(BUILD_STATIC "Build static library" ON)
10option(BUILD_TESTS "Build tests" ON)
11option(USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
12option(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(X86_SUPPORT "X86 support" ON)
Nguyen Anh Quynhcfc691e2014-05-28 15:59:05 +080017option(X86_REDUCE "X86 with reduce instruction sets to minimize library" OFF)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +080018option(SPARC_SUPPORT "Sparc support" ON)
19option(SYSZ_SUPPORT "SystemZ support" ON)
20option(XCORE_SUPPORT "XCore support" ON)
daniel96ecc332014-05-18 02:03:15 -070021
22if (USE_DEFAULT_ALLOC)
Nguyen Anh Quynh2f661e02014-05-28 14:41:39 +080023 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
daniel96ecc332014-05-18 02:03:15 -070024endif ()
25
26set(SOURCES
27 cs.c
28 MCInst.c
29 MCInstrDesc.c
30 MCRegisterInfo.c
31 SStream.c
32 utils.c
33 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080034
Nguyen Anh Quynh6a899ff2014-05-28 16:09:09 +080035set(TEST_SOURCES test.c test_detail.c test_skipdata.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080036
daniel96ecc332014-05-18 02:03:15 -070037if (ARM_SUPPORT)
38 add_definitions(-DCAPSTONE_HAS_ARM)
39 set(SOURCES
40 ${SOURCES}
41 arch/ARM/ARMDisassembler.c
42 arch/ARM/ARMInstPrinter.c
43 arch/ARM/ARMMapping.c
44 arch/ARM/ARMModule.c
45 )
46 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
47endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080048
daniel96ecc332014-05-18 02:03:15 -070049if (ARM64_SUPPORT)
50 add_definitions(-DCAPSTONE_HAS_ARM64)
51 set(SOURCES
52 ${SOURCES}
53 arch/AArch64/AArch64BaseInfo.c
54 arch/AArch64/AArch64Disassembler.c
55 arch/AArch64/AArch64InstPrinter.c
56 arch/AArch64/AArch64Mapping.c
57 arch/AArch64/AArch64Module.c
58 )
59 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
60endif ()
61
62if (MIPS_SUPPORT)
63 add_definitions(-DCAPSTONE_HAS_MIPS)
64 set(SOURCES
65 ${SOURCES}
66 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080067 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070068 arch/Mips/MipsMapping.c
69 arch/Mips/MipsModule.c
70 )
71 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
72endif ()
73
74if (PPC_SUPPORT)
75 add_definitions(-DCAPSTONE_HAS_POWERPC)
76 set(SOURCES
77 ${SOURCES}
78 arch/PowerPC/PPCDisassembler.c
79 arch/PowerPC/PPCInstPrinter.c
80 arch/PowerPC/PPCMapping.c
81 arch/PowerPC/PPCModule.c
82 )
83 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
84endif ()
85
86if (X86_SUPPORT)
87 add_definitions(-DCAPSTONE_HAS_X86)
88 set(SOURCES
89 ${SOURCES}
90 arch/X86/X86ATTInstPrinter.c
91 arch/X86/X86Disassembler.c
92 arch/X86/X86DisassemblerDecoder.c
93 arch/X86/X86IntelInstPrinter.c
94 arch/X86/X86Mapping.c
95 arch/X86/X86Module.c
96 )
97 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
98endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080099
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800100if (SPARC_SUPPORT)
101 add_definitions(-DCAPSTONE_HAS_SPARC)
102 set(SOURCES
103 ${SOURCES}
104 arch/Sparc/SparcDisassembler.c
105 arch/Sparc/SparcInstPrinter.c
106 arch/Sparc/SparcMapping.c
107 arch/Sparc/SparcModule.c
108 )
109 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
110endif ()
111
112if (SYSZ_SUPPORT)
113 add_definitions(-DCAPSTONE_HAS_SYSZ)
114 set(SOURCES
115 ${SOURCES}
116 arch/SystemZ/SystemZDisassembler.c
117 arch/SystemZ/SystemZInstPrinter.c
118 arch/SystemZ/SystemZMapping.c
119 arch/SystemZ/SystemZModule.c
120 arch/SystemZ/SystemZMCTargetDesc.c
121 )
122 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
123endif ()
124
125if (XCORE_SUPPORT)
126 add_definitions(-DCAPSTONE_HAS_XCORE)
127 set(SOURCES
128 ${SOURCES}
129 arch/XCore/XCoreDisassembler.c
130 arch/XCore/XCoreInstPrinter.c
131 arch/XCore/XCoreMapping.c
132 arch/XCore/XCoreModule.c
133 )
134 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
135endif ()
136
daniel96ecc332014-05-18 02:03:15 -0700137include_directories("${PROJECT_SOURCE_DIR}/include")
138
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800139if (BUILD_DIET)
140 add_definitions(-DCAPSTONE_DIET)
141endif ()
142
Nguyen Anh Quynh31ec5422014-05-28 15:58:35 +0800143if (X86_REDUCE)
144 add_definitions(-DCAPSTONE_X86_REDUCE)
145endif ()
146
daniel96ecc332014-05-18 02:03:15 -0700147if (BUILD_STATIC)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800148 add_library(libcapstone STATIC ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700149else ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800150 add_library(libcapstone SHARED ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700151endif ()
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800152
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800153set_target_properties(libcapstone PROPERTIES
daniel96ecc332014-05-18 02:03:15 -0700154 VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
155 SOVERSION ${VERSION_MAJOR})
156
157if (BUILD_TESTS)
158 foreach (TSRC ${TEST_SOURCES})
159 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
160 add_executable(${TBIN} "tests/${TSRC}")
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800161 target_link_libraries(${TBIN} libcapstone)
daniel96ecc332014-05-18 02:03:15 -0700162 endforeach ()
163endif ()
164
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800165set(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 -0700166foreach (INC ${INCLUDES})
167 install(FILES "include/${INC}" DESTINATION include/capstone)
168endforeach ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800169install(TARGETS libcapstone
daniel96ecc332014-05-18 02:03:15 -0700170 RUNTIME DESTINATION bin
171 LIBRARY DESTINATION lib
172 ARCHIVE DESTINATION lib)