3 ########################################################################
4 # The following variables can be overwritten from the command line
17 BINDIR ?
= $(PREFIX
)/bin
18 MANDIR ?
= $(PREFIX
)/share
/man
20 PKG_CONFIG ?
= pkg-config
22 CHECKER_FLAGS ?
= -Wno-vla
24 # Allow users to override build settings without dirtying their trees
25 # For debugging, put this in local.mk:
27 # CFLAGS += -O0 -DDEBUG -g3 -gdwarf-2
29 SPARSE_LOCAL_CONFIG ?
= local.mk
30 -include ${SPARSE_LOCAL_CONFIG}
31 ########################################################################
35 LIB_OBJS
+= allocate.o
38 LIB_OBJS
+= compat-
$(OS
).o
41 LIB_OBJS
+= dominate.o
42 LIB_OBJS
+= evaluate.o
44 LIB_OBJS
+= expression.o
46 LIB_OBJS
+= flowgraph.o
50 LIB_OBJS
+= linearize.o
51 LIB_OBJS
+= liveness.o
54 LIB_OBJS
+= optimize.o
57 LIB_OBJS
+= predefine.o
58 LIB_OBJS
+= pre-process.o
62 LIB_OBJS
+= show-parse.o
63 LIB_OBJS
+= simplify.o
70 LIB_OBJS
+= target-alpha.o
71 LIB_OBJS
+= target-arm.o
72 LIB_OBJS
+= target-arm64.o
73 LIB_OBJS
+= target-bfin.o
74 LIB_OBJS
+= target-default.o
75 LIB_OBJS
+= target-h8300.o
76 LIB_OBJS
+= target-m68k.o
77 LIB_OBJS
+= target-microblaze.o
78 LIB_OBJS
+= target-mips.o
79 LIB_OBJS
+= target-nds32.o
80 LIB_OBJS
+= target-nios2.o
81 LIB_OBJS
+= target-openrisc.o
82 LIB_OBJS
+= target-ppc.o
83 LIB_OBJS
+= target-riscv.o
84 LIB_OBJS
+= target-s390.o
85 LIB_OBJS
+= target-sh.o
86 LIB_OBJS
+= target-sparc.o
87 LIB_OBJS
+= target-x86.o
88 LIB_OBJS
+= target-xtensa.o
89 LIB_OBJS
+= tokenize.o
101 PROGRAMS
+= test-dissect
102 PROGRAMS
+= test-lexing
103 PROGRAMS
+= test-linearize
104 PROGRAMS
+= test-parsing
105 PROGRAMS
+= test-show-type
106 PROGRAMS
+= test-unssa
108 INST_PROGRAMS
=sparse cgcc
109 INST_MAN1
=sparse
.1 cgcc
.1
114 ########################################################################
115 # common flags/options/...
117 cflags = -fno-strict-aliasing
118 cflags += -Wall
-Wwrite-strings
120 GCC_BASE
:= $(shell $(CC
) --print-file-name
=)
121 cflags += -DGCC_BASE
=\"$(GCC_BASE
)\"
123 MULTIARCH_TRIPLET
:= $(shell $(CC
) -print-multiarch
2>/dev
/null
)
124 cflags += -DMULTIARCH_TRIPLET
=\"$(MULTIARCH_TRIPLET
)\"
127 bindir := $(DESTDIR
)$(BINDIR
)
128 man1dir := $(DESTDIR
)$(MANDIR
)/man1
130 ########################################################################
131 # target specificities
133 compile
: compile-i386.o
134 EXTRA_OBJS
+= compile-i386.o
136 # Can we use GCC's generated dependencies?
137 HAVE_GCC_DEP
:=$(shell touch .gcc-test.c
&& \
138 $(CC
) -c
-Wp
,-MP
,-MMD
,.gcc-test.d .gcc-test.c
2>/dev
/null
&& \
139 echo
'yes'; rm -f .gcc-test.d .gcc-test.o .gcc-test.c
)
140 ifeq ($(HAVE_GCC_DEP
),yes
)
141 cflags += -Wp
,-MP
,-MMD
,$(@D
)/.
$(@F
).d
144 # Can we use libxml (needed for c2xml)?
145 HAVE_LIBXML
:=$(shell $(PKG_CONFIG
) --exists libxml-2.0
2>/dev
/null
&& echo
'yes')
146 ifeq ($(HAVE_LIBXML
),yes
)
149 c2xml-ldlibs
:= $(shell $(PKG_CONFIG
) --libs libxml-2.0
)
150 c2xml-cflags
:= $(shell $(PKG_CONFIG
) --cflags libxml-2.0
)
152 $(warning Your system does not have libxml
, disabling c2xml
)
155 HAVE_SQLITE
:= $(shell $(PKG_CONFIG
) --exists sqlite3
2>/dev
/null
&& echo
'yes')
156 ifeq ($(HAVE_SQLITE
),yes
)
157 SQLITE_VERSION
:=$(shell $(PKG_CONFIG
) --modversion sqlite3
)
158 SQLITE_VNUMBER
:=$(shell printf
'%d%02d%02d' $(subst .
, ,$(SQLITE_VERSION
)))
159 ifeq ($(shell expr
"$(SQLITE_VNUMBER)" '>=' 32400),1)
161 INST_PROGRAMS
+= semind
162 INST_MAN1
+= semind
.1
163 semind-ldlibs
:= $(shell $(PKG_CONFIG
) --libs sqlite3
)
164 semind-cflags
:= $(shell $(PKG_CONFIG
) --cflags sqlite3
)
165 semind-cflags
+= -std
=gnu99
167 $(warning Your SQLite3 version
($(SQLITE_VERSION
)) is too old
, 3.24.0 or later is required.
)
170 $(warning Your system does not have sqlite3
, disabling semind
)
173 # Can we use gtk (needed for test-inspect)
175 HAVE_GTK
:=$(shell $(PKG_CONFIG
) --exists gtk
+-$(GTK_VERSION
) 2>/dev
/null
&& echo
'yes')
176 ifneq ($(HAVE_GTK
),yes
)
178 HAVE_GTK
:=$(shell $(PKG_CONFIG
) --exists gtk
+-$(GTK_VERSION
) 2>/dev
/null
&& echo
'yes')
180 ifeq ($(HAVE_GTK
),yes
)
181 GTK_CFLAGS
:= $(shell $(PKG_CONFIG
) --cflags gtk
+-$(GTK_VERSION
))
182 ast-view-cflags
:= $(GTK_CFLAGS
)
183 ast-model-cflags
:= $(GTK_CFLAGS
)
184 ast-inspect-cflags
:= $(GTK_CFLAGS
)
185 test-inspect-cflags
:= $(GTK_CFLAGS
)
186 test-inspect-ldlibs
:= $(shell $(PKG_CONFIG
) --libs gtk
+-$(GTK_VERSION
))
187 test-inspect
: ast-model.o ast-view.o ast-inspect.o
188 EXTRA_OBJS
+= ast-model.o ast-view.o ast-inspect.o
189 PROGRAMS
+= test-inspect
190 INST_PROGRAMS
+= test-inspect
192 $(warning Your system does not have gtk3
/gtk2
, disabling test-inspect
)
195 # Can we use LLVM (needed for ... sparse-llvm)?
196 LLVM_CONFIG
:=llvm-config
197 HAVE_LLVM
:=$(shell $(LLVM_CONFIG
) --version
>/dev
/null
2>&1 && echo
'yes')
198 ifeq ($(HAVE_LLVM
),yes
)
199 arch
:= $(shell uname
-m
)
200 ifeq (${MULTIARCH_TRIPLET},x86_64-linux-gnux32
)
203 ifneq ($(filter ${arch},i386 i486 i586 i686 x86_64 amd64
),)
204 LLVM_VERSION
:=$(shell $(LLVM_CONFIG
) --version
)
205 LLVM_VERSION_MAJOR
:=$(firstword $(subst .
, ,$(LLVM_VERSION
)))
206 ifeq ($(shell expr
"$(LLVM_VERSION_MAJOR)" '>=' 3),1)
207 LLVM_PROGS
:= sparse-llvm
208 $(LLVM_PROGS
): LD
:= $(CXX
)
209 LLVM_LDFLAGS
:= $(shell $(LLVM_CONFIG
) --ldflags)
210 LLVM_CFLAGS
:= $(shell $(LLVM_CONFIG
) --cppflags)
211 LLVM_LIBS
:= $(shell $(LLVM_CONFIG
) --libs
)
212 LLVM_LIBS
+= $(shell $(LLVM_CONFIG
) --system-libs
2>/dev
/null
)
213 LLVM_LIBS
+= $(shell $(LLVM_CONFIG
) --cxxflags | grep
-F
-q
-e
'-stdlib=libc++' && echo
-lc
++)
214 PROGRAMS
+= $(LLVM_PROGS
)
215 INST_PROGRAMS
+= sparse-llvm sparsec
216 sparse-llvm-cflags
:= $(LLVM_CFLAGS
)
217 sparse-llvm-ldflags
:= $(LLVM_LDFLAGS
)
218 sparse-llvm-ldlibs
:= $(LLVM_LIBS
)
220 $(warning LLVM
3.0 or later required. Your system has version
$(LLVM_VERSION
) installed.
)
223 $(warning sparse-llvm disabled on
${arch})
226 $(warning Your system does not have llvm
, disabling sparse-llvm
)
229 ifeq ($(HAVE_BOOLECTOR
),yes
)
231 scheck-cflags
:= -I
${BOOLECTORDIR}/include/boolector
232 scheck-ldflags
:= -L
${BOOLECTORDIR}/lib
233 scheck-ldlibs
:= -lboolector
-llgl
-lbtor2parser
236 ########################################################################
238 OBJS
:= $(LIB_OBJS
) $(EXTRA_OBJS
) $(PROGRAMS
:%=%.o
)
244 ########################################################################
247 ldflags += $($(@
)-ldflags) $(LDFLAGS
)
248 ldlibs
+= $($(@
)-ldlibs
) $(LDLIBS
)
249 $(PROGRAMS
): % : %.o
$(LIBS
)
251 $(Q
)$(LD
) $(ldflags) $^
$(ldlibs
) -o
$@
253 libsparse.a
: $(LIB_OBJS
)
258 cflags += $($(*)-cflags) $(CPPFLAGS
) $(CFLAGS
)
261 $(Q
)$(CC
) $(cflags) -c
-o
$@
$<
265 $(Q
)CHECK
=.
/sparse .
/cgcc
-no-compile
$(CHECKER_FLAGS
) $(cflags) -c
$<
267 selfcheck
: $(OBJS
:.o
=.sc
)
269 SPARSE_VERSION
:=$(shell git describe
--dirty
2>/dev
/null || echo
'$(VERSION)')
272 @echo
'#define SPARSE_VERSION "$(SPARSE_VERSION)"' > version.h.tmp
273 @if cmp
-s version.h version.h.tmp
; then \
277 mv version.h.tmp version.h
; \
282 $(Q
)cd validation
&& .
/test-suite
283 validation
/%: $(PROGRAMS
) FORCE
284 $(Q
)validation
/test-suite
$*
288 @
rm -f
*.
[oa
] .
*.d
$(PROGRAMS
) version.h
291 @find validation
/ \
( -name
"*.c.output.*" \
292 -o
-name
"*.c.error.*" \
297 install: install-bin install-man
298 install-bin
: $(INST_PROGRAMS
:%=$(bindir)/%)
299 install-man
: $(INST_MAN1
:%=$(man1dir)/%)
303 $(Q
)install -D
$< $@ || exit
1;
306 $(Q
)install -D
-m
644 $< $@ || exit
1;
311 -include $(OBJS
:%.o
=.
%.o.d
)