blob: a2dfa8837bea57d48aaccc81d94ab5608ed19e0b (
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
|
#!/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
die "Unknown commandline argument: $name $val"
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
LDFLAGS_DEP = $mpi_libs
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
|