blob: a8b5804e5972d8697d158a4b779934b942669126 (
plain)
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
|
#!/bin/bash
# mg2d configure script
# partially inspired by/based on the FFmpeg configure script
die() {
echo "$@" >&2
exit 1
}
bootstrap() {
local source_dir
[ -e configure ] && die "Cannot build from the source dir, create a separate build directory"
source_dir=$(realpath $(dirname "$0"))
[ -d "$source_dir" ] || die "Cannot locate source directory"
[ -h src ] || ln -s "$source_dir" src
[ -h Makefile ] || ln -s "$source_dir/Makefile"
echo $source_dir
}
toupper() {
echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
}
is_in() {
value=$1
shift
for var in $*; do
[ $var = $value ] && return 0
done
return 1
}
probe_arch() {
arch=$(cc -dumpmachine | sed 's/-.*//')
}
check_mpi() {
pkg-config --exists mpi || return 1
mpi_cflags=$(pkg-config --cflags mpi)
mpi_libs=$(pkg-config --libs mpi)
}
check_nasm() {
if ! command -v nasm &> /dev/null; then
echo "nasm not found, assembly code will not be built"
return 1
fi
}
check_component() {
name=$1
shift
eval "check_$name" $@ && eval "have_$name=yes"
}
source_dir=$(bootstrap)
CMDLINE_SET="
cc
"
cc=cc
for arg; do
name="${arg%%=*}"
name="${name#--}"
name=$(echo "$name" | sed 's/-/_/g')
val="${arg#*=}"
if is_in $name $CMDLINE_SET; then
eval $name='$val'
continue
fi
case "$name" in
extra_cflags)
extra_cflags=$val $extra_cflags
;;
extra_ldflags)
extra_ldflags=$val $extra_ldflags
;;
*)
die "Unknown commandline argument: $arg"
;;
esac
done
probe_arch
COMPONENTS_REQUIRED="
mpi
"
COMPONENTS_OPTIONAL="
nasm
"
COMPONENTS="
$COMPONENTS_REQUIRED
$COMPONENTS_OPTIONAL
"
for c in $COMPONENTS_REQUIRED; do
check_component $c || die "Required component $c not found"
done
for c in $COMPONENTS_OPTIONAL; do
check_component $c
done
cat > config.mak <<EOF
SOURCE_DIR = $source_dir
CC = $cc
CFLAGS_DEP = $mpi_cflags
CFLAGS_EXTRA = $extra_cflags
LDFLAGS_DEP = $mpi_libs
LDFLAGS_EXTRA = $extra_ldflags
EOF
cat > config.h <<EOF
#ifndef MG2D_CONFIG_H
#define MG2D_CONFIG_H
EOF
cat > config.asm << EOF
EOF
case "$arch" in
x86_64)
echo "ARCH_X86_64 = 1" >> config.mak
echo "#define ARCH_X86_64 1" >> config.h
echo "%define ARCH_X86_64 1" >> config.asm
;;
*)
echo "ARCH_X86_64 = 0" >> config.mak
echo "#define ARCH_X86_64 0" >> config.h
echo "%define ARCH_X86_64 0" >> config.asm
;;
esac
for c in $COMPONENTS; do
C=$(toupper $c)
have_ref=have_$c
if [ -n "${!have_ref}" ]; then
val_mak=yes
val_c=1
else
val_mak=no
val_c=0
fi
echo "HAVE_$C = $val_mak" >> config.mak
echo "#define HAVE_$C $val_c" >> config.h
done
echo "#endif // MG2D_CONFIG_H" >> config.h
|