1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
|
## -*- mode: Makefile-Automake -*-
##
## Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018 The University of Utah
## All rights reserved.
##
## This file is distributed under the University of Illinois Open Source
## License. See the file COPYING for details.
###############################################################################
libexec_PROGRAMS = clang_delta
GIT_HASH := $(shell "$(top_srcdir)/git-hash.sh" "$(top_srcdir)" || echo error)
DUMMY1 := $(shell echo "$(GIT_HASH)" > git_version.txt.tmp)
DUMMY2 := $(shell cmp -s git_version.txt.tmp git_version.txt || \
cp git_version.txt.tmp git_version.txt)
DUMMY3 := $(shell rm -f git_version.txt.tmp)
git_version_edit = sed \
-e 's|@GIT_HASH[@]|$(GIT_HASH)|g'
git_version.cpp: git_version.cpp.in git_version.txt
rm -f $@ $@.tmp
srcdir=''; \
test -f ./$@.in || srcdir=$(srcdir)/; \
$(git_version_edit) $${srcdir}$@.in > $@.tmp
mv $@.tmp $@
# llvm-lit is not installed into LLVM_BINDIR. To run `make check-clang-delta',
# we have to manually copy llvm-lit from LLVM's build dir. This is also the
# reason that I didn't create a check-local rule for running clang_delta tests.
# It would fail everywhere else llvm-lit does exist, e.g. travis?
check-clang-delta: tests/lit.site.cfg remove_lit_checks clang_delta
@ echo "--- Running tests for clang_delta ---"
@ $(LLVM_BINDIR)/llvm-lit -sv tests
tests/lit.site.cfg: tests/lit.site.cfg.in
@ echo s=@abs_builddir[@]=$(abs_builddir)=g > lit.site.cfg.tmp
@ echo s=@LLVM_BINDIR[@]=$(LLVM_BINDIR)=g >> lit.site.cfg.tmp
@ echo s=@clang_delta_srcdir@=$(abs_srcdir)=g >> lit.site.cfg.tmp
@ sed -f lit.site.cfg.tmp tests/lit.site.cfg.in > $@
@ rm -f lit.site.cfg.tmp
remove_lit_checks: tests/remove_lit_checks.in
@ echo s=@PERL_EXECUTABLE[@]=$(PERL)=g > remove_lit_checks.tmp
@ sed -f remove_lit_checks.tmp tests/remove_lit_checks.in > tests/$@
@ chmod +x tests/$@
@ rm -f remove_lit_checks.tmp
# When setting `LLVMCXXFLAGS', we weed out command-line options that might be
# troublesome (e.g., -W/-f options that are not supported by `CXX', or -W
# options that turn warnings into errors). We also weed out options that might
# override choices that *we* want to control (e.g., debug and optimization
# options).
#
# The subparts of the `grep' invocation below remove compiler command-line
# options of the following forms:
# -W... --- warning options
# -w --- inhibits all warnings
# -pedantic... --- pedantic warning options
# -f...diagnostics... --- diagnostics reporting options (GCC, Clang)
# -f...show... --- diagnostics reporting options (Clang)
# -g... --- debugging options
# -O... --- optimization options
# [And for the llvm.org-provided binary of Clang 3.8.0 for OS X, weed out:]
# -isysroot
# /Applications/Xcode.app/...
#
# The `tr/sed | grep | xargs' pipeline is intended to be portable. We use
# `grep' for matching because writing fancy, portable `sed' expressions is
# difficult. For example, some implementations use "\b" to match word
# boundaries while others use "[[:<:]]" and "[[:>:]]". The Autoconf
# documentation says that anchored matches in `sed' are not portable. Give up;
# use `grep' instead. Bonus: better readability!
#
# The funny quoting in `LLVMLIBS' avoids a warning from Automake:
# ...: linker flags such as `--libs' belong in `clang_delta_LDFLAGS'
# The warning comes about because Automake doesn't understand $(shell).
# Avoid the warning by making `--ldflags' and `--libs' not look like
# linker options.
#
LLVMCXXFLAGS := $(shell \
"$(LLVM_CONFIG)" --cxxflags | \
tr '\t' ' ' | sed -e 's/ */ /g' | tr ' ' '\n' | \
grep -v -e '^-W' \
-e '^-w$$' \
-e '^-pedantic' \
-e '^-f[a-z-]*diagnostics' \
-e '^-f[a-z-]*show' \
-e '^-g' \
-e '^-O$$' \
-e '^-O[0-9s]' \
-e '^-isysroot$$' \
-e '^/Applications/Xcode\.app/.*\.sdk$$' | \
xargs) \
-fno-rtti -fno-exceptions
LLVMLDFLAGS := $(shell "$(LLVM_CONFIG)" \--ldflags)
LLVMINCLUDEDIR := $(shell "$(LLVM_CONFIG)" --includedir)
LLVMLIBS := $(shell "$(LLVM_CONFIG)" \--libs) \
$(shell "$(LLVM_CONFIG)" \--system-libs)
clang_delta_CPPFLAGS = \
$(CLANG_CPPFLAGS) \
-I"$(LLVMINCLUDEDIR)/clang"
clang_delta_CXXFLAGS = \
$(LLVMCXXFLAGS)
# See comment below about `clang_delta_LDADD' and `LLVMLDFLAGS'.
# clang_delta_LDFLAGS = \
# $(LLVMLDFLAGS)
# Try to do the "right thing" by putting these in `clang_delta_LDADD' instead
# of `clang_delta_LDFLAGS'. This leads to the funny escape in `LLVMLIBS',
# above, and the need to define `clang_delta_DEPENDENCIES', below.
#
# Pre LLVM-3.5, the output of `llvm-config --ldflags' would often contain
# library directives that must come *after* all the LLVM/Clang libraries on the
# link line: e.g., "-lpthread -lffi -ldl -lm". The easiest way to get these
# into the right place is to add `LLVMLDFLAGS' to `clang_delta_LDADD' --- *not*
# to `clang_delta_LDFLAGS'. Automake puts LDFLAGS early in the link line.
#
# Newer LLVM's (post-3.4) support `llvm-config --system-libs', which will
# possibly help us to straighten this out in the future.
#
# In LLVM 3.5, `llvm-config --ldflags' does not contain the list of system
# libraries. So probably, we could move `LLVMLDFLAGS' back to the definition
# of `clang_delta_LDFLAGS'. I'll do that later.
clang_delta_LDADD = \
-lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers \
-lclangStaticAnalyzerCore \
-lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization \
-lclangCodeGen -lclangParse -lclangSema -lclangAnalysis \
-lclangRewriteFrontend -lclangRewrite -lclangAST -lclangBasic -lclangEdit -lclangLex \
-lclangARCMigrate \
$(LLVMLIBS) \
$(CLANG_LDFLAGS) \
$(LLVMLDFLAGS)
# Automake doesn't grok our use of $(shell) in `clang_delta_LDADD', so it puts
# $(LLVMLIBS) in the dependencies by default. To avoid this problem, we must
# define `clang_delta_DEPENDENCIES' explicitly.
#
clang_delta_DEPENDENCIES =
clang_delta_SOURCES = \
AggregateToScalar.cpp \
AggregateToScalar.h \
BinOpSimplification.cpp \
BinOpSimplification.h \
CallExprToValue.cpp \
CallExprToValue.h \
ClangDelta.cpp \
ClassTemplateToClass.cpp \
ClassTemplateToClass.h \
CombineGlobalVarDecl.cpp \
CombineGlobalVarDecl.h \
CombineLocalVarDecl.cpp \
CombineLocalVarDecl.h \
CommonParameterRewriteVisitor.h \
CommonRenameClassRewriteVisitor.h \
CommonStatementVisitor.h \
CommonTemplateArgumentVisitor.h \
CopyPropagation.cpp \
CopyPropagation.h \
EmptyStructToInt.cpp \
EmptyStructToInt.h \
ExpressionDetector.cpp \
ExpressionDetector.h \
InstantiateTemplateParam.cpp \
InstantiateTemplateParam.h \
InstantiateTemplateTypeParamToInt.cpp \
InstantiateTemplateTypeParamToInt.h \
LiftAssignmentExpr.cpp \
LiftAssignmentExpr.h \
LocalToGlobal.cpp \
LocalToGlobal.h \
MoveFunctionBody.cpp \
MoveFunctionBody.h \
MoveGlobalVar.cpp \
MoveGlobalVar.h \
ParamToGlobal.cpp \
ParamToGlobal.h \
ParamToLocal.cpp \
ParamToLocal.h \
ReduceArrayDim.cpp \
ReduceArrayDim.h \
ReduceArraySize.cpp \
ReduceArraySize.h \
ReduceClassTemplateParameter.cpp \
ReduceClassTemplateParameter.h \
ReducePointerLevel.cpp \
ReducePointerLevel.h \
ReducePointerPairs.cpp \
ReducePointerPairs.h \
RemoveAddrTaken.cpp \
RemoveAddrTaken.h \
RemoveArray.cpp \
RemoveArray.h \
RemoveBaseClass.cpp \
RemoveBaseClass.h \
RemoveCtorInitializer.cpp \
RemoveCtorInitializer.h \
RemoveEnumMemberValue.cpp \
RemoveEnumMemberValue.h \
RemoveNamespace.cpp \
RemoveNamespace.h \
RemoveNestedFunction.cpp \
RemoveNestedFunction.h \
RemovePointer.cpp \
RemovePointer.h \
RemoveTrivialBaseTemplate.cpp \
RemoveTrivialBaseTemplate.h \
RemoveUnresolvedBase.cpp \
RemoveUnresolvedBase.h \
RemoveUnusedEnumMember.cpp \
RemoveUnusedEnumMember.h \
RemoveUnusedFunction.cpp \
RemoveUnusedFunction.h \
RemoveUnusedOuterClass.cpp \
RemoveUnusedOuterClass.h \
RemoveUnusedStructField.cpp \
RemoveUnusedStructField.h \
RemoveUnusedVar.cpp \
RemoveUnusedVar.h \
RenameCXXMethod.cpp \
RenameCXXMethod.h \
RenameClass.cpp \
RenameClass.h \
RenameFun.cpp \
RenameFun.h \
RenameParam.cpp \
RenameParam.h \
RenameVar.cpp \
RenameVar.h \
ReplaceArrayAccessWithIndex.cpp \
ReplaceArrayAccessWithIndex.h \
ReplaceArrayIndexVar.cpp \
ReplaceArrayIndexVar.h \
ReplaceCallExpr.cpp \
ReplaceCallExpr.h \
ReplaceClassWithBaseTemplateSpec.cpp \
ReplaceClassWithBaseTemplateSpec.h \
ReplaceDependentName.cpp \
ReplaceDependentName.h \
ReplaceDependentTypedef.cpp \
ReplaceDependentTypedef.h \
ReplaceDerivedClass.cpp \
ReplaceDerivedClass.h \
ReplaceFunctionDefWithDecl.cpp \
ReplaceFunctionDefWithDecl.h \
ReplaceOneLevelTypedefType.cpp \
ReplaceOneLevelTypedefType.h \
ReplaceSimpleTypedef.cpp \
ReplaceSimpleTypedef.h \
ReplaceUndefinedFunction.cpp \
ReplaceUndefinedFunction.h \
ReturnVoid.cpp \
ReturnVoid.h \
RewriteUtils.cpp \
RewriteUtils.h \
SimpleInliner.cpp \
SimpleInliner.h \
SimplifyCallExpr.cpp \
SimplifyCallExpr.h \
SimplifyCommaExpr.cpp \
SimplifyCommaExpr.h \
SimplifyDependentTypedef.cpp \
SimplifyDependentTypedef.h \
SimplifyIf.cpp \
SimplifyIf.h \
SimplifyNestedClass.cpp \
SimplifyNestedClass.h \
SimplifyRecursiveTemplateInstantiation.cpp \
SimplifyRecursiveTemplateInstantiation.h \
SimplifyStruct.cpp \
SimplifyStruct.h \
SimplifyStructUnionDecl.cpp \
SimplifyStructUnionDecl.h \
TemplateArgToInt.cpp \
TemplateArgToInt.h \
TemplateNonTypeArgToInt.cpp \
TemplateNonTypeArgToInt.h \
Transformation.cpp \
Transformation.h \
TransformationManager.cpp \
TransformationManager.h \
UnifyFunctionDecl.cpp \
UnifyFunctionDecl.h \
UnionToStruct.cpp \
UnionToStruct.h \
VectorToArray.cpp \
VectorToArray.h \
git_version.h
nodist_clang_delta_SOURCES = \
git_version.cpp
CLEANFILES = \
git_version.txt \
git_version.txt.tmp \
git_version.cpp \
git_version.cpp.tmp \
tests/lit.site.cfg \
tests/remove_lit_checks
EXTRA_DIST = \
CMakeLists.txt \
README.txt \
git_version.cpp.in \
test_transformation \
tests/lit.cfg \
tests/lit.site.cfg.in \
tests/local-to-global/unnamed_1.c \
tests/local-to-global/unnamed_2.c \
tests/local-to-global/unnamed_3.c \
tests/remove-unused-field/designated1.c \
tests/remove-unused-field/designated2.c \
tests/remove-unused-field/designated3.c \
tests/remove-unused-field/designated4.c \
tests/remove-unused-field/designated5.c \
tests/remove-unused-field/unused_field1.c \
tests/remove-unused-field/unused_field2.c \
tests/remove-unused-var/unused_var.cpp \
tests/remove_lit_checks.in \
tests/rename-fun/test1.c \
tests/rename-fun/test1.h \
tests/rename-var/rename-var.c \
tests/union-to-struct/union1.c \
tests/union-to-struct/union2.c \
tests/union-to-struct/union3.c
CLEAN_TESTDIRS = $(sort $(dir $(wildcard tests/*/Output/.)))
clean-local:
list='$(CLEAN_TESTDIRS)'; \
for dir in $$list; do \
if test -d "$$dir"; then \
rm -rf $$dir; \
fi; \
done
###############################################################################
## End of file.
|