blob: f6512d84b52b39cb48f144f8b7a491e39456a32d [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
8option(BUILD_STATIC "Build static library" ON)
Nguyen Anh Quynh56e4efd2014-05-28 16:27:53 +08009
10option(BUILD_DIET "Build diet library" OFF)
daniel96ecc332014-05-18 02:03:15 -070011option(BUILD_TESTS "Build tests" ON)
12option(USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
13option(ARM_SUPPORT "ARM support" ON)
14option(ARM64_SUPPORT "ARM64 support" ON)
15option(MIPS_SUPPORT "MIPS support" ON)
16option(PPC_SUPPORT "PowerPC support" ON)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +080017option(X86_SUPPORT "X86 support" ON)
Nguyen Anh Quynhcfc691e2014-05-28 15:59:05 +080018option(X86_REDUCE "X86 with reduce instruction sets to minimize library" OFF)
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +080019option(SPARC_SUPPORT "Sparc support" ON)
20option(SYSZ_SUPPORT "SystemZ support" ON)
21option(XCORE_SUPPORT "XCore support" ON)
daniel96ecc332014-05-18 02:03:15 -070022
23if (USE_DEFAULT_ALLOC)
Nguyen Anh Quynh2f661e02014-05-28 14:41:39 +080024 add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
daniel96ecc332014-05-18 02:03:15 -070025endif ()
26
27set(SOURCES
28 cs.c
29 MCInst.c
30 MCInstrDesc.c
31 MCRegisterInfo.c
32 SStream.c
33 utils.c
34 )
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080035
Nguyen Anh Quynh6a899ff2014-05-28 16:09:09 +080036set(TEST_SOURCES test.c test_detail.c test_skipdata.c)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080037
daniel96ecc332014-05-18 02:03:15 -070038if (ARM_SUPPORT)
39 add_definitions(-DCAPSTONE_HAS_ARM)
40 set(SOURCES
41 ${SOURCES}
42 arch/ARM/ARMDisassembler.c
43 arch/ARM/ARMInstPrinter.c
44 arch/ARM/ARMMapping.c
45 arch/ARM/ARMModule.c
46 )
47 set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
48endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080049
daniel96ecc332014-05-18 02:03:15 -070050if (ARM64_SUPPORT)
51 add_definitions(-DCAPSTONE_HAS_ARM64)
52 set(SOURCES
53 ${SOURCES}
54 arch/AArch64/AArch64BaseInfo.c
55 arch/AArch64/AArch64Disassembler.c
56 arch/AArch64/AArch64InstPrinter.c
57 arch/AArch64/AArch64Mapping.c
58 arch/AArch64/AArch64Module.c
59 )
60 set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
61endif ()
62
63if (MIPS_SUPPORT)
64 add_definitions(-DCAPSTONE_HAS_MIPS)
65 set(SOURCES
66 ${SOURCES}
67 arch/Mips/MipsDisassembler.c
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +080068 arch/Mips/MipsInstPrinter.c
daniel96ecc332014-05-18 02:03:15 -070069 arch/Mips/MipsMapping.c
70 arch/Mips/MipsModule.c
71 )
72 set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
73endif ()
74
75if (PPC_SUPPORT)
76 add_definitions(-DCAPSTONE_HAS_POWERPC)
77 set(SOURCES
78 ${SOURCES}
79 arch/PowerPC/PPCDisassembler.c
80 arch/PowerPC/PPCInstPrinter.c
81 arch/PowerPC/PPCMapping.c
82 arch/PowerPC/PPCModule.c
83 )
84 set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
85endif ()
86
87if (X86_SUPPORT)
88 add_definitions(-DCAPSTONE_HAS_X86)
89 set(SOURCES
90 ${SOURCES}
91 arch/X86/X86ATTInstPrinter.c
92 arch/X86/X86Disassembler.c
93 arch/X86/X86DisassemblerDecoder.c
94 arch/X86/X86IntelInstPrinter.c
95 arch/X86/X86Mapping.c
96 arch/X86/X86Module.c
97 )
98 set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
99endif ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800100
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800101if (SPARC_SUPPORT)
102 add_definitions(-DCAPSTONE_HAS_SPARC)
103 set(SOURCES
104 ${SOURCES}
105 arch/Sparc/SparcDisassembler.c
106 arch/Sparc/SparcInstPrinter.c
107 arch/Sparc/SparcMapping.c
108 arch/Sparc/SparcModule.c
109 )
110 set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
111endif ()
112
113if (SYSZ_SUPPORT)
114 add_definitions(-DCAPSTONE_HAS_SYSZ)
115 set(SOURCES
116 ${SOURCES}
117 arch/SystemZ/SystemZDisassembler.c
118 arch/SystemZ/SystemZInstPrinter.c
119 arch/SystemZ/SystemZMapping.c
120 arch/SystemZ/SystemZModule.c
121 arch/SystemZ/SystemZMCTargetDesc.c
122 )
123 set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
124endif ()
125
126if (XCORE_SUPPORT)
127 add_definitions(-DCAPSTONE_HAS_XCORE)
128 set(SOURCES
129 ${SOURCES}
130 arch/XCore/XCoreDisassembler.c
131 arch/XCore/XCoreInstPrinter.c
132 arch/XCore/XCoreMapping.c
133 arch/XCore/XCoreModule.c
134 )
135 set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
136endif ()
137
daniel96ecc332014-05-18 02:03:15 -0700138include_directories("${PROJECT_SOURCE_DIR}/include")
139
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800140if (BUILD_DIET)
141 add_definitions(-DCAPSTONE_DIET)
142endif ()
143
Nguyen Anh Quynh31ec5422014-05-28 15:58:35 +0800144if (X86_REDUCE)
145 add_definitions(-DCAPSTONE_X86_REDUCE)
146endif ()
147
daniel96ecc332014-05-18 02:03:15 -0700148if (BUILD_STATIC)
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800149 add_library(libcapstone STATIC ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700150else ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800151 add_library(libcapstone SHARED ${SOURCES})
daniel96ecc332014-05-18 02:03:15 -0700152endif ()
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800153
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800154set_target_properties(libcapstone PROPERTIES
daniel96ecc332014-05-18 02:03:15 -0700155 VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
156 SOVERSION ${VERSION_MAJOR})
157
158if (BUILD_TESTS)
159 foreach (TSRC ${TEST_SOURCES})
160 STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
161 add_executable(${TBIN} "tests/${TSRC}")
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800162 target_link_libraries(${TBIN} libcapstone)
daniel96ecc332014-05-18 02:03:15 -0700163 endforeach ()
164endif ()
165
Nguyen Anh Quynhd0023192014-05-28 15:15:00 +0800166set(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 -0700167foreach (INC ${INCLUDES})
168 install(FILES "include/${INC}" DESTINATION include/capstone)
169endforeach ()
Nguyen Anh Quynhf6af5092014-05-28 14:29:20 +0800170install(TARGETS libcapstone
daniel96ecc332014-05-18 02:03:15 -0700171 RUNTIME DESTINATION bin
172 LIBRARY DESTINATION lib
173 ARCHIVE DESTINATION lib)