1+ #
2+ # Copyright (c) 2013 Pantazis Deligiannis (p.deligiannis@imperial.ac.uk)
3+ # This file is distributed under the MIT License. See LICENSE for details.
4+ #
5+
6+ cmake_minimum_required (VERSION 2.8 )
7+ project (smack)
8+
9+ if (NOT WIN32 OR MSYS OR CYGWIN )
10+ find_program (LLVM_CONFIG_EXECUTABLE NAMES llvm-config PATHS ${LLVM_CONFIG} NO_DEFAULT_PATH DOC "llvm-config" )
11+
12+ if (LLVM_CONFIG_EXECUTABLE STREQUAL "LLVM_CONFIG_EXECUTABLE-NOTFOUND" )
13+ message (FATAL_ERROR "llvm-config could not be found!" )
14+ endif ()
15+
16+ execute_process (
17+ COMMAND ${LLVM_CONFIG_EXECUTABLE} --cxxflags
18+ OUTPUT_VARIABLE LLVM_CXXFLAGS
19+ OUTPUT_STRIP_TRAILING_WHITESPACE
20+ )
21+
22+ set (LLVM_CXXFLAGS "${LLVM_CXXFLAGS} -fno-exceptions -fno-rtti" )
23+
24+ execute_process (
25+ COMMAND ${LLVM_CONFIG_EXECUTABLE} --libs
26+ OUTPUT_VARIABLE LLVM_LIBS
27+ OUTPUT_STRIP_TRAILING_WHITESPACE
28+ )
29+
30+ execute_process (
31+ COMMAND ${LLVM_CONFIG_EXECUTABLE} --ldflags
32+ OUTPUT_VARIABLE LLVM_LDFLAGS
33+ OUTPUT_STRIP_TRAILING_WHITESPACE
34+ )
35+
36+ else ()
37+ set (LLVM_SRC "" CACHE PATH "LLVM source directory" )
38+ set (LLVM_BUILD "" CACHE PATH "LLVM build directory" )
39+ set (LLVM_BUILD_TYPE "" CACHE STRING "LLVM build type" )
40+
41+ if (NOT EXISTS "${LLVM_SRC} /include/llvm" )
42+ message (FATAL_ERROR "Invalid LLVM source directory: ${LLVM_SRC} " )
43+ endif ()
44+
45+ set (LLVM_LIBDIR "${LLVM_BUILD} /lib/${LLVM_BUILD_TYPE} " )
46+ if (NOT EXISTS "${LLVM_LIBDIR} " )
47+ message (FATAL_ERROR "Invalid LLVM build directory: ${LLVM_BUILD} " )
48+ endif ()
49+
50+ set (LLVM_CXXFLAGS "\" /I${LLVM_SRC} /include\" \" /I${LLVM_BUILD} /include\" -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4244 -wd4355 -wd4482 -wd4800" )
51+ set (LLVM_LDFLAGS "" )
52+ set (LLVM_LIBS "${LLVM_LIBDIR} /LLVMTransformUtils.lib" "${LLVM_LIBDIR} /LLVMipa.lib" "${LLVM_LIBDIR} /LLVMAnalysis.lib" "${LLVM_LIBDIR} /LLVMTarget.lib" "${LLVM_LIBDIR} /LLVMMC.lib" "${LLVM_LIBDIR} /LLVMObject.lib" "${LLVM_LIBDIR} /LLVMBitReader.lib" "${LLVM_LIBDIR} /LLVMCore.lib" "${LLVM_LIBDIR} /LLVMSupport.lib" )
53+
54+ endif ()
55+
56+ include_directories (include )
57+
58+ add_library (assistDS STATIC
59+ include /assistDS/ArgCast.h
60+ include /assistDS/FuncSimplify.h
61+ include /assistDS/Int2PtrCmp.h
62+ include /assistDS/SimplifyExtractValue.h
63+ include /assistDS/StructReturnToPointer.h
64+ include /assistDS/DSNodeEquivs.h
65+ include /assistDS/FuncSpec.h
66+ include /assistDS/SimplifyGEP.h
67+ include /assistDS/TypeChecks.h
68+ include /assistDS/DataStructureCallGraph.h
69+ include /assistDS/GEPExprArgs.h
70+ include /assistDS/LoadArgs.h
71+ include /assistDS/SimplifyInsertValue.h
72+ include /assistDS/TypeChecksOpt.h
73+ include /assistDS/Devirt.h
74+ include /assistDS/IndCloner.h
75+ include /assistDS/MergeGEP.h
76+ include /assistDS/SimplifyLoad.h
77+ lib/AssistDS/ArgCast.cpp
78+ lib/AssistDS/Devirt.cpp
79+ lib/AssistDS/GEPExprArgs.cpp
80+ lib/AssistDS/LoadArgs.cpp
81+ lib/AssistDS/SimplifyExtractValue.cpp
82+ lib/AssistDS/StructReturnToPointer.cpp
83+ lib/AssistDS/ArgSimplify.cpp
84+ lib/AssistDS/DynCount.cpp
85+ lib/AssistDS/IndCloner.cpp
86+ lib/AssistDS/SimplifyGEP.cpp
87+ lib/AssistDS/TypeChecks.cpp
88+ lib/AssistDS/DSNodeEquivs.cpp
89+ lib/AssistDS/FuncSimplify.cpp
90+ lib/AssistDS/Int2PtrCmp.cpp
91+ lib/AssistDS/MergeGEP.cpp
92+ lib/AssistDS/SimplifyInsertValue.cpp
93+ lib/AssistDS/TypeChecksOpt.cpp
94+ lib/AssistDS/DataStructureCallGraph.cpp
95+ lib/AssistDS/FuncSpec.cpp
96+ lib/AssistDS/SVADevirt.cpp
97+ lib/AssistDS/SimplifyLoad.cpp
98+ )
99+
100+ add_library (dsa STATIC
101+ include /dsa/AddressTakenAnalysis.h
102+ include /dsa/DSCallGraph.h
103+ include /dsa/DSNode.h
104+ include /dsa/EntryPointAnalysis.h
105+ include /dsa/keyiterator.h
106+ include /dsa/svset.h
107+ include /dsa/AllocatorIdentification.h
108+ include /dsa/DSGraph.h
109+ include /dsa/DSSupport.h
110+ include /dsa/stl_util.h
111+ include /dsa/CallTargets.h
112+ include /dsa/DSGraphTraits.h
113+ include /dsa/DataStructure.h
114+ include /dsa/TypeSafety.h
115+ include /dsa/super_set.h
116+ lib/DSA/AddressTakenAnalysis.cpp
117+ lib/DSA/CallTargets.cpp
118+ lib/DSA/DSTest.cpp
119+ lib/DSA/EquivClassGraphs.cpp
120+ lib/DSA/StdLibPass.cpp
121+ lib/DSA/AllocatorIdentification.cpp
122+ lib/DSA/CompleteBottomUp.cpp
123+ lib/DSA/DataStructure.cpp
124+ lib/DSA/GraphChecker.cpp
125+ lib/DSA/Printer.cpp
126+ lib/DSA/TopDownClosure.cpp
127+ lib/DSA/Basic.cpp
128+ lib/DSA/DSCallGraph.cpp
129+ lib/DSA/DataStructureStats.cpp
130+ lib/DSA/TypeSafety.cpp
131+ lib/DSA/BottomUpClosure.cpp
132+ lib/DSA/DSGraph.cpp
133+ lib/DSA/EntryPointAnalysis.cpp
134+ lib/DSA/Local.cpp
135+ lib/DSA/SanityCheck.cpp
136+ )
137+
138+ add_library (smackTranslator STATIC
139+ include /smack/smack.h
140+ include /smack/BoogieAst.h
141+ include /smack/BplFilePrinter.h
142+ include /smack/BplPrinter.h
143+ include /smack/DSAAliasAnalysis.h
144+ include /smack/SmackInstGenerator.h
145+ include /smack/SmackModuleGenerator.h
146+ include /smack/SmackOptions.h
147+ include /smack/SmackRep.h
148+ include /smack/SmackRep2dMem.h
149+ include /smack/SmackRepFlatMem.h
150+ lib/smack/BoogieAst.cpp
151+ lib/smack/BplFilePrinter.cpp
152+ lib/smack/BplPrinter.cpp
153+ lib/smack/DSAAliasAnalysis.cpp
154+ lib/smack/SmackInstGenerator.cpp
155+ lib/smack/SmackModuleGenerator.cpp
156+ lib/smack/SmackOptions.cpp
157+ lib/smack/SmackRep.cpp
158+ lib/smack/SmackRep2dMem.cpp
159+ lib/smack/SmackRepFlatMem.cpp
160+ )
161+
162+ add_executable (smack
163+ tools/smack/smack.cpp
164+ )
165+
166+ set_target_properties (smack smackTranslator assistDS dsa
167+ PROPERTIES COMPILE_FLAGS "${LLVM_CXXFLAGS} " )
168+
169+ target_link_libraries (smackTranslator ${LLVM_LIBS} ${LLVM_LDFLAGS} )
170+ target_link_libraries (smack smackTranslator assistDS dsa )
171+
172+ INSTALL (TARGETS smack smackTranslator assistDS dsa
173+ RUNTIME DESTINATION bin
174+ LIBRARY DESTINATION lib
175+ ARCHIVE DESTINATION lib
176+ )
177+
178+ INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR} /bin/boogie
179+ ${CMAKE_CURRENT_SOURCE_DIR} /bin/corral
180+ ${CMAKE_CURRENT_SOURCE_DIR} /bin/llvm2bpl.py
181+ ${CMAKE_CURRENT_SOURCE_DIR} /bin/smackgen.py
182+ ${CMAKE_CURRENT_SOURCE_DIR} /bin/smack-verify.py
183+ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
184+ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
185+ DESTINATION bin
186+ )
187+
0 commit comments