forked from SRI-CSL/pce
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
162 lines (137 loc) · 4.03 KB
/
Makefile
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
#
# Top-level Makefile
#
# Determine the architecture and top directory
# Import architecture include files from top-dir/configs/make.include.$(ARCH)
#
SHELL=/bin/sh
MCSAT_TOP_DIR=$(PWD)
#
# Find platform
#
ARCH=$(shell ./config.sub `./config.guess`)
POSIXOS=$(shell ./autoconf/os)
ifeq (,$(POSIXOS))
$(error "Problem running ./autoconf/os")
else
ifeq (unknown,$(POSIXOS))
$(error "Unknown OS")
endif
endif
#
# Alternative ABI
#
# 1) On Mac OS X/intel, we compile in 32 bit mode by default.
# It's possible to build in 64 bit mode on the same machine.
# - To select 64bit mode, type 'Make MODE=... ABI=64'
# - This changes ARCH from
# i386-apple-darwin9.x.y to x86_64-apple-darwin9.x.y
# and the corresponding make.include should be constructed using
# ./configure --build=x86_64-apple-darwin.x.y CFLAGS=-m64
#
# 2) On Linux/x86_64, we compile in 64 bit mode by default.
# It may be possible to build in 32 bit mode on the same machine.
# - To select 32bit mode, type 'Make MODE=... ABI=32'
# - This changes ARCH from
# x86_64-unknown-linux-gnu to i686-unknown-linux-gnu
# and there must be a corresponding make.include file in ./configs
# - To construct that file use
# ./configure --build=i686-unknown-linux-gnu CFLAGS=-m32
#
ifneq ($(ABI),)
ifeq ($(ABI),32)
newarch=$(subst x86_64,i686,$(ARCH))
else
ifeq ($(ABI),64)
newarch=$(subst i386,x86_64,$(ARCH))
else
$(error "Invalid ABI option: $(ABI)")
endif
endif
ifeq ($(newarch),$(ARCH))
$(error "ABI option $(ABI) not supported on platform $(ARCH)")
endif
ARCH := $(newarch)
endif
#
# Check whether make.include exists
#
# Note: we don't want to run ./configure from here.
# The user may need to give options to the ./configure
# script.
#
make_include = configs/make.include.$(ARCH)
known_make_includes = $(filter-out %.in, $(wildcard configs/make.include.*))
MCSAT_MAKE_INCLUDE := $(findstring $(make_include), $(known_make_includes))
ifeq (,$(MCSAT_MAKE_INCLUDE))
$(error Could not find $(make_include). Run ./configure)
endif
#
# Check build mode
#
default_mode=release
allowed_modes=release static debug profile valgrind purify quantify
MODE ?= $(default_mode)
MCSAT_MODE := $(filter $(allowed_modes), $(MODE))
ifeq (,$(MCSAT_MODE))
$(error "Invalid build mode: $(MODE)")
endif
#
# Source distribution
#
distdir=./distributions
tmpdir=./mcsat
srctarfile=$(distdir)/mcsat-src.tar.gz
#
# Just print configuration
#
check: checkgmake
@ echo "ARCH is $(ARCH)"
@ echo "POSIXOS is $(POSIXOS)"
@ echo "MCSAT_TOP_DIR is $(MCSAT_TOP_DIR)"
@ echo "MCSAT_MAKE_INCLUDE is $(MCSAT_MAKE_INCLUDE)"
@ echo "MCSAT_MODE is $(MCSAT_MODE)"
checkgmake:
@ ./gmaketest --make=$(MAKE) || \
(echo "GNU-Make is required to compile MCSAT. Aborting."; exit1)
#
# Invoke submake that will do the real work
#
.DEFAULT bin lib test : checkgmake
@ echo "Mode: $(MCSAT_MODE)"
@ echo "Platform: $(ARCH)"
@ $(MAKE) -f Makefile.build \
MCSAT_MODE=$(MCSAT_MODE) \
ARCH=$(ARCH) \
POSIXOS=$(POSIXOS) \
MCSAT_TOP_DIR="$(MCSAT_TOP_DIR)" \
MCSAT_MAKE_INCLUDE="$(MCSAT_MAKE_INCLUDE)" \
$@
#
# Build the tar file
#
distribution:
rm -f -r $(tmpdir)
mkdir $(tmpdir)
mkdir $(tmpdir)/autoconf
mkdir $(tmpdir)/configs
mkdir $(tmpdir)/src
mkdir $(tmpdir)/examples
mkdir $(tmpdir)/doc
mkdir -p $(tmpdir)/bin/windows $(tmpdir)/bin/linux $(tmpdir)/bin/linux64 $(tmpdir)/bin/macos10.5
cp install-sh config.guess configure configure.ac config.sub gmaketest $(tmpdir)
cp README Makefile Makefile.build make.include.in $(tmpdir)
cp autoconf/* $(tmpdir)/autoconf
cp src/Makefile src/*.h src/*.c src/*.y $(tmpdir)/src
cp doc/*.muse doc/*.pdf doc/*.html $(tmpdir)/doc
cp examples/* $(tmpdir)/examples
cp build/i686-pc-linux-gnu-release/bin/* $(tmpdir)/bin/linux
cp build/x86_64-unknown-linux-gnu-release/bin/* $(tmpdir)/bin/linux64
cp build/i386-apple-darwin9.2.2-release/bin/* $(tmpdir)/bin/macos10.5
cp build/i686-pc-mingw32-release/bin/* $(tmpdir)/bin/windows
chmod -R og+rX $(tmpdir)
mkdir -p $(distdir)
tar -czf $(srctarfile) $(tmpdir)
chmod -R og+rX $(distdir)
rm -f -r $(tmpdir)
.PHONY: checkgmake check distribution bin