1# -*-makefile-gmake-*- (emacs mode)
2#########################################################################
3#
4#  This file is part of the Yices SMT Solver.
5#  Copyright (C) 2017 SRI International.
6#
7#  Yices is free software: you can redistribute it and/or modify
8#  it under the terms of the GNU General Public License as published by
9#  the Free Software Foundation, either version 3 of the License, or
10#  (at your option) any later version.
11#
12#  Yices is distributed in the hope that it will be useful,
13#  but WITHOUT ANY WARRANTY; without even the implied warranty of
14#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15#  GNU General Public License for more details.
16#
17#  You should have received a copy of the GNU General Public License
18#  along with Yices.  If not, see <http://www.gnu.org/licenses/>.
19#
20#########################################################################
21
22
23#
24# Build Makefile
25#
26# Must be invoked with the following variables set
27#
28#   YICES_TOP_DIR = top-level directory of Yices
29#   YICES_MODE = build mode
30#   YICES_MAKE_INCLUDE = configuration file to include
31#   YICES_VERSION = full version
32#   MAJOR = major version number
33#   MINOR = minor version number
34#   PATCH_LEVEL = patch level
35#   ARCH = architecture (e.g, i686-pc-linux-gnu)
36#   POSIXOS = OS (e.g., linux)
37#
38# Config variables are imported by including the file
39#   $(YICES_TOP_DIR)/$(YICES_MAKE_INCLUDE)
40#
41# This file is constructed by running configure on the
42# host and it defines the compilation tools and flags
43# and the GMP libraries to use.
44#
45
46SHELL=/bin/sh
47
48ifeq (,$(YICES_TOP_DIR))
49 $(error "YICES_TOP_DIR is undefined")
50endif
51
52ifeq (,$(YICES_MAKE_INCLUDE))
53 $(error "YICES_MAKE_INCLUDE is undefined")
54endif
55
56include $(YICES_TOP_DIR)/$(YICES_MAKE_INCLUDE)
57
58#
59# ldconfig is used by the install rules.
60# We don't check for ldconfig in configure.ac (since that doesn't
61# make much sense). We use /sbin/ldconfig as default here. If that's
62# wrong, change it on the command line:
63#
64#   make install LDCONFIG=...
65#
66LDCONFIG=/sbin/ldconfig
67
68#
69# Script/command to build a README file from a template
70#
71arm_android=$(findstring arm-linux-android,$(ARCH))
72ifeq ($(arm_android),arm-linux-android)
73MKREADME=./utils/mkreadme-android
74else
75MKREADME=./utils/mkreadme
76endif
77
78#
79# Template + script to construct yices_version.c
80#
81template=./src/api/yices_version_template.txt
82MKVERSION=./utils/make_source_version
83
84#
85# Source directories
86#
87srcdir = src
88srcsubdirs = mt io terms utils solvers solvers/floyd_warshall \
89    solvers/funs solvers/bv solvers/egraph solvers/cdcl solvers/simplex \
90    parser_utils model scratch api frontend frontend/common \
91    frontend/smt1 frontend/yices frontend/smt2 context exists_forall \
92    mcsat mcsat/eq mcsat/uf mcsat/bool mcsat/ite mcsat/nra mcsat/bv \
93    mcsat/bv/explain mcsat/utils
94
95testdir = tests/unit
96regressdir = tests/regress
97
98#
99# Build directory: for this architecture and mode
100#
101build_dir = build/$(ARCH)-$(YICES_MODE)
102
103#
104# Build subdirectories: we build two versions of Yices.  One is
105# compiled and statically linked with GMP. The other one does not
106# include GMP so it requires GMP as a dynamic library at runtime.
107#
108# build/obj: object files (for version without GMP included)
109# build/lib: libraries (GMP not included)
110# build/bin: binaries (GMP not included)
111#
112# build/static_obj: object files (for version statically linked with GMP)
113# build/static_lib: libraries (GMP included)
114# build/static_bin: binaries linked statically with GMP (and other libraries if possible)
115#
116# build/static_dll_obj: for mingw and cygwin objectfiles to construct the static
117# variant of cygyices.dll or libyices.dll
118#
119dyn_objdir := $(build_dir)/obj
120dyn_libdir := $(build_dir)/lib
121dyn_bindir := $(build_dir)/bin
122
123static_objdir := $(build_dir)/static_obj
124static_libdir := $(build_dir)/static_lib
125static_bindir := $(build_dir)/static_bin
126
127static_dll_objdir := $(build_dir)/static_dll_obj
128
129dyn_objsubdirs := $(srcsubdirs:%=$(dyn_objdir)/%)
130static_objsubdirs := $(srcsubdirs:%=$(static_objdir)/%)
131static_dll_objsubdirs := $(srcsubdirs:%=$(static_dll_objdir)/%)
132
133#
134# Binary distributions:
135#
136# build_dir/dist: binaries + libraries with distribution not linked with GMP
137# build_dir/static_dist: includes GMP (statically linked)
138#
139dist_dir = $(build_dir)
140static_dist_dir = $(build_dir)/static_dist
141
142
143#
144# Directories and temporary file to build tarfiles
145# - we do this in two steps: the includes, binaries, and library files
146#   to be distributed are constructed by invoking make -C src
147#   and copied into $(dist_dir)
148#   (what's required is defined in src/Makefile and may depend
149#    on the OS + compilation mode).
150# - the full tar file is built from $(dist_dir) + the generic files
151#   that are independent of OS and compilation modes
152# - the name of the tar file depends on ARCH + MODE
153#
154# All tarfiles are stored in ./distributions
155#
156distributions = ./distributions
157bindist_dir = yices-$(YICES_VERSION)
158
159ifeq ($(YICES_MODE),debug)
160  bindist_tarfile = $(bindist_dir)-$(ARCH)-dbg.tar.gz
161  static_bindist_tarfile = $(bindist_dir)-$(ARCH)-static-gmp-dbg.tar.gz
162else
163  bindist_tarfile = $(bindist_dir)-$(ARCH).tar.gz
164  static_bindist_tarfile = $(bindist_dir)-$(ARCH)-static-gmp.tar.gz
165endif
166
167
168
169#
170# Build subdirectories if they are missing
171#
172$(build_dir):
173	$(MKDIR_P) $(build_dir)
174
175$(dyn_objdir):
176	$(MKDIR_P) $(dyn_objdir)
177
178$(dyn_objsubdirs):
179	$(MKDIR_P) $@
180
181$(dyn_libdir):
182	$(MKDIR_P) $(dyn_libdir)
183
184$(dyn_bindir):
185	$(MKDIR_P) $(dyn_bindir)
186
187$(static_objdir):
188	$(MKDIR_P) $(static_objdir)
189
190$(static_objsubdirs):
191	$(MKDIR_P) $@
192
193$(static_dll_objdir):
194	$(MKDIR_P) $(static_dll_objdir)
195
196$(static_dll_objsubdirs):
197	$(MKDIR_P) $@
198
199$(static_libdir):
200	$(MKDIR_P) $(static_libdir)
201
202$(static_bindir):
203	$(MKDIR_P) $(static_bindir)
204
205$(distdir):
206	$(MKDIR_P) $(distdir)
207
208$(static_distdir):
209	$(MKDIR_P) $(static_distdir)
210
211
212build_subdirs: $(build_dir) $(dyn_objsubdirs) $(dyn_libdir) $(dyn_bindir)
213
214static_build_subdirs-mingw static_build_subdirs-cygwin: $(static_dll_objsubdirs)
215
216static_build_subdirs-darwin static_build_subdirs-linux static_build_subdirs-unix static_build_subdirs-dragonfly static_build_subdirs-netbsd:
217
218static_build_subdirs: $(build_dir) $(static_objsubdirs) $(static_libdir) $(static_bindir) \
219	static_build_subdirs-$(POSIXOS)
220
221.PHONY: build_subdirs static_build_subdirs static_build_subdirs-darwin static-build_subdirs-cygwin \
222	static_build_subdirs-mingw static_build_subdirs-linux static_build_subdirs-unix \
223	static_build_subdirs-dragonfly static_build_subdirs-netbsd
224
225#
226# Compilation
227#
228all: obj static-obj lib static-lib bin static-bin
229
230obj: build_subdirs version
231	@ echo "=== Building objects ==="
232	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) obj
233
234static-obj: static_build_subdirs version
235	@ echo "=== Building static objects ==="
236	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-obj
237
238lib: build_subdirs version
239	@ echo "=== Building libraries ==="
240	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) lib
241
242static-lib: static_build_subdirs build_subdirs version
243	@ echo "=== Building libraries with GMP ==="
244	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-lib
245
246bin: build_subdirs version
247	@ echo "=== Building binaries ==="
248	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) bin
249
250static-bin: static_build_subdirs version
251	@ echo "=== Building static binaries ==="
252	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-bin
253
254
255#
256# Force a new 'yices_version.c' to be generated.
257# Compilation date and mode, git revision, and version numbers
258# are copied into yices_version.c.
259#
260version:
261	$(MKVERSION) $(template) src/api/yices_$(YICES_MODE)_version.c $(YICES_VERSION) $(YICES_MODE) $(ARCH)
262
263.PHONY: version
264
265
266
267#
268# Tests: all use libyices.a in lib
269# Static tests: use libyices.a in static-lib
270# Don't regenerate the version file
271#
272test: build_subdirs version
273	@ echo "=== Building libraries ==="
274	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) lib
275	@ echo "=== Building tests ==="
276	@ $(MAKE) -C $(testdir) BUILD=../../$(build_dir) all
277
278static-test: static_build_subdirs version
279	@ echo "=== Building libraries with GMP ==="
280	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-lib
281	@ echo "=== Building tests ==="
282	@ $(MAKE) -C $(testdir) BUILD=../../$(build_dir) all-static
283
284#
285# Regressions
286#
287check: regress
288
289static-check: static-regress
290
291regress: build_subdirs version
292	@ echo "=== Building binaries ==="
293	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) bin
294	@ echo "=== Running regressions ==="
295	@ $(regressdir)/check.sh $(regressdir) $(build_dir)/bin
296
297
298static-regress: static_build_subdirs version
299	@ echo "=== Building binaries ==="
300	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-bin
301	@ echo "=== Running regressions ==="
302	@ $(regressdir)/check.sh $(regressdir) $(build_dir)/static_bin
303
304
305.PHONY: all obj static-obj lib static-lib bin static-bin test static-test \
306    regress static-regress check static-check
307
308
309#
310# Documentation: for now we just build manual.pdf
311# this assumes latexmk is available
312#
313doc:
314	@ echo "=== Building the documentation ==="
315	@ (cd doc/manual ; \
316          (latexmk -pdf manual || \
317            (echo "===================================="; \
318             echo "  WARNING: can't run latexmk"; \
319             echo "   manual.pdf may be out-of-date"; \
320             echo "===================================="; )))
321
322
323documentation manual: doc
324
325.PHONY: doc documentation manual
326
327
328#
329# Binary distribution:
330#
331# On mingw, there's a manual step involved. So build the
332# distribution as follows:
333# 1) make dist (or make static-dist)
334# 2) from a Visual Studio console,
335#    go to ./build/i686-pc-mingw32-release/dist/lib
336#    then type 'lib /machine:x86 /def:libyices.def
337# 3) clean up: remove libyices.def and libyices.exp
338#    from ./build/i686-pc-mingw32-release/dist/lib
339# 4) make tarfile (or make static-tarfile)
340#
341# On other platforms: make binary-distribution or make
342# static-distribution should work.
343#
344# On MacOS X, the tar command adds files of the form ._xxxx to store
345# metadata/extended file attributes. This gets ugly if we untar on
346# some other platform. To prevent generation of these ._xxxx files, it
347# is enough to set the environment variable COPYFILE_DISABLE to 1. We
348# do this systematically (even on other systems). Hopefully,
349# COPYFILE_DISABLE should not matter on other systems than MacOS X.
350#
351# We use a shell script ./util/mkreadme to make sure
352# the README file in the tarfile is up to date (probably
353# not foolproof)
354#
355$(distributions):
356	$(MKDIR_P) $(distributions)
357
358$(dist_dir):
359	$(MKDIR_P) $(dist_dir)
360
361$(static_dist_dir):
362	$(MKDIR_P) $(static_dist_dir)
363
364binary-distribution: dist tarfile
365
366static-distribution: static-dist static-tarfile
367
368dist: build_subdirs version $(dist_dir)
369	@ echo "=== Preparing binary distribution ==="
370	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) dist
371
372static-dist: static_build_subdirs build_subdirs version $(static_dist_dir)
373	@ echo "=== Preparing static binary distribution ==="
374	@ $(MAKE) -C $(srcdir) BUILD=../$(build_dir) static-dist
375
376
377tarfile: $(distributions) doc
378	@ echo "=== Building $(bindist_tarfile) ==="
379	rm -f -r $(bindist_dir)
380	$(MKDIR_P) $(bindist_dir)
381	cp -r $(dist_dir)/* $(bindist_dir)
382	cp etc/NOTICES $(bindist_dir)
383	cp LICENSE.txt $(bindist_dir)/LICENSE
384	$(MKREADME) $(dist_dir) etc/README.$(POSIXOS) > $(bindist_dir)/README
385	if test -f etc/install-yices.$(POSIXOS) ; then \
386	  cp etc/install-yices.$(POSIXOS) $(bindist_dir)/install-yices ; \
387	  chmod ug+x $(bindist_dir)/install-yices ; \
388	fi
389	$(MKDIR_P) $(bindist_dir)/etc
390	cp etc/pstdint.h $(bindist_dir)/etc
391	$(MKDIR_P) $(bindist_dir)/examples
392	for file in `ls examples | $(EGREP) '\.ys$$|\.smt$$|\.c$$|\.smt2$$|\.cpp$$' ` ; do \
393	  cp examples/$$file $(bindist_dir)/examples ; \
394	done || true
395	$(MKDIR_P) $(bindist_dir)/doc
396	cp doc/YICES-LANGUAGE $(bindist_dir)/doc
397	cp doc/manual/manual.pdf $(bindist_dir)/doc
398	chmod -R og+rX $(bindist_dir)
399	COPYFILE_DISABLE=1 tar -czf $(distributions)/$(bindist_tarfile) $(bindist_dir)
400	chmod -R og+rX $(distributions)
401	rm -f -r $(bindist_dir)
402
403static-tarfile: $(distributions) doc
404	@ echo "=== Building $(static_bindist_tarfile) ==="
405	rm -f -r $(bindist_dir)
406	$(MKDIR_P) $(bindist_dir)
407	cp -r $(static_dist_dir)/* $(bindist_dir)
408	cp etc/NOTICES $(bindist_dir)
409	cp LICENSE.txt $(bindist_dir)/LICENSE
410	$(MKREADME) $(static_dist_dir) etc/README.static.$(POSIXOS) > $(bindist_dir)/README
411	if test -f etc/install-yices.$(POSIXOS) ; then \
412	  cp etc/install-yices.$(POSIXOS) $(bindist_dir)/install-yices ; \
413	  chmod ug+x $(bindist_dir)/install-yices ; \
414	fi
415	$(MKDIR_P) $(bindist_dir)/etc
416	cp etc/pstdint.h $(bindist_dir)/etc
417	$(MKDIR_P) $(bindist_dir)/examples
418	for file in `ls examples | $(EGREP) '\.ys$$|\.smt$$|\.c$$|\.smt2$$|\.cpp$$' ` ; do \
419	  cp examples/$$file $(bindist_dir)/examples ; \
420	done || true
421	$(MKDIR_P) $(bindist_dir)/doc
422	cp doc/YICES-LANGUAGE $(bindist_dir)/doc
423	cp doc/manual/manual.pdf $(bindist_dir)/doc
424	chmod -R og+rX $(bindist_dir)
425	COPYFILE_DISABLE=1 tar -czf $(distributions)/$(static_bindist_tarfile) $(bindist_dir)
426	chmod -R og+rX $(distributions)
427	rm -f -r $(bindist_dir)
428
429
430.PHONY: binary-distribution static-distribution dist static-dist \
431	tarfile static-tarfile
432
433
434
435#
436# Install from the source.
437#
438# The target directories are determined by ./configure:
439#   bindir = where to put binaries
440#   libdir = where to put the libraries
441#   includedir = where to put the include files
442#
443# We assume 'make binary-distribution' was done first,
444# then we copy the $(dist_dir) content:
445#   $(dist_dir)/bin     into $(bindir)
446#   $(dist_dir)/lib     into $(libdir)
447#   $(dist_dir)/include into $(includedir)
448#
449# Note: the default bindir, libdir, includedir are set by the
450# configure script, and are imported from $(YICES_MAKE_INCLUDE).
451# These defaults can be changed by using 'make install prefix=...'
452#
453# We also (try to) support the DESTDIR convention.
454#
455# The reason we don't want to force compilation in 'make install' is
456# that we typically need to do 'sudo make install' but we don't want
457# to compile with 'sudo make binary-distribution'.  That can easily
458# fail if the source and build directory or file permissions are
459# wrong, or lead to other problems.
460#
461install: install-$(POSIXOS)
462
463install-default:
464	$(MKDIR_P) $(DESTDIR)$(bindir)
465	$(MKDIR_P) $(DESTDIR)$(libdir)
466	$(MKDIR_P) $(DESTDIR)$(includedir)
467	$(INSTALL) -m 664 $(dist_dir)/../../src/include/* $(DESTDIR)$(includedir)
468	$(INSTALL) $(dist_dir)/bin/* $(DESTDIR)$(bindir)
469	$(INSTALL) $(dist_dir)/lib/* $(DESTDIR)$(libdir)
470
471install-darwin: install-default
472	(cd $(DESTDIR)$(libdir) && $(LN_S) -f libyices.$(MAJOR).dylib libyices.dylib)
473
474install-solaris: install-default
475	$(LDCONFIG) -n $(DESTDIR)$(libdir) && (cd $(DESTDIR)$(libdir) && $(LN_S) -f libyices.so.$(YICES_VERSION) libyices.so)
476
477install-linux install-unix: install-default
478	$(LDCONFIG) -n $(DESTDIR)$(libdir) && (cd $(DESTDIR)$(libdir) && $(LN_S) -f libyices.so.$(YICES_VERSION) libyices.so)
479
480# on FreeBSD: the library file is libyices.so.X.Y and ldconfig does not take -n
481# TODO: fix this. We must also create a symbolic link: libyices.so.X in libdir
482# the ldconfig manpage on FreeBSD says 'filenames must conform to the lib*.so.[0-9] pattern in order to
483# be added to the hints file.' In other words, ldconfig on FreeBSD doesn't create the symbolic link,
484# as on Linux.
485install-dragonfly: install-default
486
487install-netbsd: install-default
488	(cd $(DESTDIR)$(libdir) && $(LN_S) -f libyices.so.$(YICES_VERSION) libyices.so)
489
490#
491# cygwin and mingw install: copy the DLLs in $(bindir)
492#
493install-cygwin: $(build_dir) $(dist_dir)
494	$(MKDIR_P) $(DESTDIR)$(bindir)
495	$(MKDIR_P) $(DESTDIR)$(libdir)
496	$(MKDIR_P) $(DESTDIR)$(includedir)
497	$(INSTALL) -m 664 $(dist_dir)/include/* $(DESTDIR)$(includedir)
498	$(INSTALL) $(dist_dir)/bin/* $(DESTDIR)$(bindir)
499	$(INSTALL) $(dist_dir)/lib/*.a $(DESTDIR)$(libdir)
500
501install-mingw: install-cygwin
502
503
504.PHONY: install install-default install-darwin install-solaris \
505	install-linux install-dragonfly install-netbsd install-unix \
506        install-cygwin install-mingw
507
508
509
510#
511# SOURCE DISTRIBUTION
512#
513srcdist_dir = yices-$(YICES_VERSION)
514srcdist_tarfile= yices-$(YICES_VERSION)-src.tar.gz
515
516#
517# Build the source tar file
518#
519# NOTE: chmod -R .. may fail on some Solaris versions
520# - a workaround is to use a GNU/fileutils version of chmod
521#   instead of SUN's own version
522# - on CSL ungoliant: make sure /csl/bin is in the path before /bin
523#   and /usr/bin
524#
525# For tests: we copy all unit tests and the regression tests in
526# arrays/bv/efsmt/mantis/wd.
527#
528source-distribution: $(distributions) doc
529	@ echo "=== Building $(srcdist_tarfile) ==="
530	rm -f -r $(srcdist_dir)
531	$(MKDIR_P) $(srcdist_dir)
532	cp install-sh config.guess configure configure.ac config.sub gmaketest $(srcdist_dir)
533	cp Makefile Makefile.build make.include.in $(srcdist_dir)
534	$(MKDIR_P) $(srcdist_dir)/autoconf
535	cp autoconf/* $(srcdist_dir)/autoconf
536	$(MKDIR_P) $(srcdist_dir)/configs
537	$(MKDIR_P) $(srcdist_dir)/etc
538	cp etc/README.source $(srcdist_dir)/README
539	cp etc/NOTICES $(srcdist_dir)
540	cp LICENSE.txt $(srcdist_dir)/LICENSE
541	cp etc/* $(srcdist_dir)/etc
542	$(MKDIR_P) $(srcdist_dir)/src
543	rsync -R `find src/ -name "Makefile" -or -name "*.c" -or -name "*.h" -or -name "*.txt"` $(srcdist_dir)
544	$(MKDIR_P) $(srcdist_dir)/doc
545	$(MKDIR_P) $(srcdist_dir)/doc/manual
546	cp doc/COMPILING doc/NOTES doc/YICES-LANGUAGE doc/GMP doc/manual/manual.pdf \
547           $(srcdist_dir)/doc
548	cp doc/manual/*.pdf doc/manual/*.tex doc/manual/*.bib \
549           doc/manual/*.cls doc/manual/*.sty doc/manual/*.eps doc/manual/*.fig \
550	   $(srcdist_dir)/doc/manual
551	$(MKDIR_P) $(srcdist_dir)/utils
552	cp utils/gmp-hack.h utils/mingw-build utils/setup-vs2010 utils/setup-vs2013 \
553	   utils/yices_parser.txt utils/yices_input_tables.h \
554	   utils/smt_parser.txt utils/smt_input_tables.h \
555	   utils/smt2_parser.txt utils/smt2_input_tables.h \
556	   utils/table_builder.c utils/truth_table_compiler.c \
557	   utils/mkreadme utils/mkreadme-android utils/make_source_version \
558	   utils/lib_name utils/gmp_version utils/yices_version \
559           utils/remove_trailing_whitespaces \
560           $(srcdist_dir)/utils
561	$(MKDIR_P) $(srcdist_dir)/examples
562	for file in `ls examples | $(EGREP) '\.ys$$|\.smt$$|\.c$$|\.smt2$$|\.cpp$$' ` ; do \
563	  cp examples/$$file $(srcdist_dir)/examples ; \
564	done || true
565	$(MKDIR_P) $(srcdist_dir)/tests
566	cp -R tests/unit $(srcdist_dir)/tests
567	$(MKDIR_P) $(srcdist_dir)/tests/regress
568	for t in regress/arrays regress/bv regress/efsmt regress/mantis regress/wd ; do \
569	   cp -R tests/$$t $(srcdist_dir)/tests/regress ; \
570	done
571	cp tests/regress/check.sh $(srcdist_dir)/tests/regress
572	chmod -R og+rX $(srcdist_dir)
573	COPYFILE_DISABLE=1 tar -czf $(distributions)/$(srcdist_tarfile) $(srcdist_dir)
574	chmod -R og+rX $(distributions)
575	rm -f -r $(srcdist_dir)
576
577.PHONY: source-distribution
578
579
580
581#
582# CLEANUP
583#
584
585#
586# Basic clean: delete build sub-directories for architecture + mode
587#
588clean:
589	rm -rf $(build_dir)/*
590
591#
592# Arch clean: delete all build subdirectories for an architecture
593#
594arch-clean:
595	rm -rf build/$(ARCH)-*
596
597#
598# All clean delete all build directories
599# - also clean the src directory
600#
601all-clean:
602	rm -rf build/*
603	$(MAKE) -C $(srcdir) clean
604
605.PHONY: clean arch-clean all-clean
606
607
608
609#
610# Helper rule for debugging Makefiles and configure
611#
612show-details:
613	@ echo
614	@ echo "*** Recursive Makefile ***"
615	@ echo
616	@ echo "target is $@"
617	@ echo
618	@ echo "ARCH is $(ARCH)"
619	@ echo "POSIXOS is $(POSIXOS)"
620	@ echo "YICES_TOP_DIR is $(YICES_TOP_DIR)"
621	@ echo "YICES_MAKE_INCLUDE is $(YICES_MAKE_INCLUDE)"
622	@ echo "YICES_MODE is $(YICES_MODE)"
623	@ echo "YICES_VERSION is $(YICES_VERSION)"
624	@ echo "MAJOR is $(MAJOR)"
625	@ echo "MINOR is $(MINOR)"
626	@ echo "PATCH_LEVEL is $(PATCH_LEVEL)"
627	@ echo
628	@ echo "Configuration"
629	@ echo "  EXEEXT   = $(EXEEXT)"
630	@ echo "  SED      = $(SED)"
631	@ echo "  LN_S     = $(LN_S)"
632	@ echo "  MKDIR_P  = $(MKDIR_P)"
633	@ echo "  CC       = $(CC)"
634	@ echo "  CPPFLAGS = $(CPPFLAGS)"
635	@ echo "  CFLAGS   = $(CFLAGS)"
636	@ echo "  LIBS     = $(LIBS)"
637	@ echo "  LDFLAGS  = $(LDFLAGS)"
638	@ echo "  LD       = $(LD)"
639	@ echo "  AR       = $(AR)"
640	@ echo "  RANLIB   = $(RANLIB)"
641	@ echo "  GPERF    = $(GPERF)"
642	@ echo "  STRIP    = $(STRIP)"
643	@ echo
644	@ echo "  NO_STACK_PROTECTOR = $(NO_STACK_PROTECTOR)"
645	@ echo
646	@ echo "  STATIC_GMP = $(STATIC_GMP)"
647	@ echo "  STATIC_GMP_INCLUDE_DIR = $(STATIC_GMP_INCLUDE_DIR)"
648	@ echo
649	@ echo "  PIC_GMP = $(PIC_GMP)"
650	@ echo "  PIC_GMP_INCLUDE_DIR = $(PIC_GMP_INCLUDE_DIR)"
651	@ echo
652	@ echo "  ENABLE_MCSAT = $(ENABLE_MCSAT)"
653	@ echo
654	@ echo "  STATIC_LIBPOLY = $(STATIC_LIBPOLY)"
655	@ echo "  STATIC_LIBPOLY_INCLUDE_DIR = $(STATIC_LIBPOLY_INCLUDE_DIR)"
656	@ echo
657	@ echo "  PIC_LIBPOLY = $(PIC_LIBPOLY)"
658	@ echo "  PIC_LIBPOLY_INCLUDE_DIR = $(PIC_LIBPOLY_INCLUDE_DIR)"
659	@ echo
660
661
662.PHONY: show-details
663
664
665#
666# Make sure everything here is serialized
667# The sub makes can be run in parallel so option -j x should be allowed
668#
669.NOTPARALLEL:
670