configure 36.6 KB
Newer Older
1
#!/bin/bash
2

Loren Merritt's avatar
Loren Merritt committed
3
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
4
5
cat <<EOF
Usage: ./configure [options]
Loren Merritt's avatar
Loren Merritt committed
6

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
7
8
Help:
  -h, --help               print this message
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
9

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
10
11
12
13
14
15
16
17
18
19
20
Standard options:
  --prefix=PREFIX          install architecture-independent files in PREFIX
                           [/usr/local]
  --exec-prefix=EPREFIX    install architecture-dependent files in EPREFIX
                           [PREFIX]
  --bindir=DIR             install binaries in DIR [EPREFIX/bin]
  --libdir=DIR             install libs in DIR [EPREFIX/lib]
  --includedir=DIR         install includes in DIR [PREFIX/include]
  --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS
21
  --extra-rcflags=ERCFLAGS add ERCFLAGS to RCFLAGS
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
22
23
24

Configuration options:
  --disable-cli            disable cli
Nikoli's avatar
Nikoli committed
25
26
27
  --system-libx264         use system libx264 instead of internal
  --enable-shared          build shared library
  --enable-static          build static library
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
28
29
  --disable-gpl            disable GPL-only features
  --disable-thread         disable multithreaded encoding
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
30
  --enable-win32thread     use win32threads (windows only)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
31
32
33
  --disable-interlaced     disable interlaced encoding support
  --enable-visualize       enable visualization (X11 only)
  --bit-depth=BIT_DEPTH    set output bit depth (8-10) [8]
34
  --chroma-format=FORMAT   output chroma format (420, 422, 444, all) [all]
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
35
36
37
38
39
40

Advanced options:
  --disable-asm            disable platform-specific assembly optimizations
  --enable-debug           add -g
  --enable-gprof           add -pg
  --enable-strip           add -s
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
41
  --enable-pic             build position-independent code
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
42
43

Cross-compilation:
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
44
45
46
47
  --host=HOST              build programs to run on HOST
  --cross-prefix=PREFIX    use PREFIX for compilation tools
  --sysroot=SYSROOT        root of cross-build tree

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
48
49
50
51
52
53
54
External library support:
  --disable-avs            disable avisynth support (windows only)
  --disable-swscale        disable swscale support
  --disable-lavf           disable libavformat support
  --disable-ffms           disable ffmpegsource support
  --disable-gpac           disable gpac support

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
55
EOF
Loren Merritt's avatar
Loren Merritt committed
56
57
58
exit 1
fi

Diogo Franco's avatar
Diogo Franco committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
log_check() {
    echo -n "checking $1... " >> config.log
}

log_ok() {
    echo "yes" >> config.log
}

log_fail() {
    echo "no" >> config.log
}

log_msg() {
    echo "$1" >> config.log
}

Steven Walters's avatar
Steven Walters committed
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
intel_cflags() {
    # Intel Compiler issues an incredibly large number of warnings on any warning level,
    # suppress them by disabling all warnings rather than having to use #pragmas to disable most of them
    for arg in $*; do
        [ $arg = -ffast-math ] && arg=
        [[ "$arg" = -falign-loops* ]] && arg=
        [ "$arg" = -fno-tree-vectorize ] && arg=
        [ "$arg" = -Wshadow ] && arg=
        if [ $compiler = ICL ]; then
            [ "$arg" = -Wall ] && arg=-W0
            [ "$arg" = -g ] && arg=-Z7
            [ "$arg" = -fomit-frame-pointer ] && arg=
            [ "$arg" = -s ] && arg=
            [ "$arg" = -fPIC ] && arg=
        else
            [ "$arg" = -Wall ] && arg=-w0
        fi

        [ -n "$arg" ] && echo -n "$arg "
    done
}

icl_ldflags() {
    for arg in $*; do
        arg=${arg/LIBPATH/libpath}
        [ ${arg#-libpath:} == $arg -a ${arg#-l} != $arg ] && arg=${arg#-l}.lib
        [ ${arg#-L} != $arg ] && arg=-libpath:${arg#-L}
        [ $arg = -Wl,--large-address-aware ] && arg=-largeaddressaware
        [ $arg = -s ] && arg=
        [ "$arg" = -Wl,-Bsymbolic ] && arg=

        arg=${arg/pthreadGC/pthreadVC}
        [ "$arg" = avifil32.lib ] && arg=vfw32.lib
        [ "$arg" = gpac_static.lib ] && arg=libgpac_static.lib

        [ -n "$arg" ] && echo -n "$arg "
    done
}

114
cc_check() {
Diogo Franco's avatar
Diogo Franco committed
115
    if [ -z "$3" ]; then
116
        if [ -z "$1$2" ]; then
Diogo Franco's avatar
Diogo Franco committed
117
            log_check "whether $CC works"
118
119
        elif [ -z "$1" ]; then
            log_check "for $2"
Diogo Franco's avatar
Diogo Franco committed
120
121
122
123
        else
            log_check "for $1"
        fi
    elif [ -z "$1" ]; then
124
125
126
127
128
        if [ -z "$2" ]; then
            log_check "whether $CC supports $3"
        else
            log_check "whether $CC supports $3 with $2"
        fi
Diogo Franco's avatar
Diogo Franco committed
129
    else
130
        log_check "for $3 in $1";
Diogo Franco's avatar
Diogo Franco committed
131
    fi
132
133
134
    rm -f conftest.c
    [ -n "$1" ] && echo "#include <$1>" > conftest.c
    echo "int main () { $3 return 0; }" >> conftest.c
Steven Walters's avatar
Steven Walters committed
135
136
137
138
139
140
    if [ $compiler = ICL ]; then
        cc_cmd="$CC conftest.c $CFLAGS $2 -link $(icl_ldflags $2 $LDFLAGSCLI $LDFLAGS)"
    else
        cc_cmd="$CC conftest.c $CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest"
    fi
    if $cc_cmd >conftest.log 2>&1; then
Diogo Franco's avatar
Diogo Franco committed
141
142
143
144
145
146
147
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
Steven Walters's avatar
Steven Walters committed
148
        log_msg "$cc_cmd"
149
150
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
151
152
153
154
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
    fi
    return $res
}

cpp_check() {
    log_check "whether $3 is true"
    rm -f conftest.c
    [ -n "$1" ] && echo "#include <$1>" > conftest.c
    echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c

    if $CC conftest.c $CFLAGS $2 -E -o conftest >conftest.log 2>&1; then
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
172
173
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
174
175
176
177
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
178
179
    fi
    return $res
180
181
}

182
as_check() {
Diogo Franco's avatar
Diogo Franco committed
183
    log_check "whether $AS supports $1"
184
    echo "$1" > conftest.asm
Diogo Franco's avatar
Diogo Franco committed
185
186
187
188
189
190
191
192
193
194
195
    if $AS conftest.asm $ASFLAGS $2 -o conftest.o >conftest.log 2>&1; then
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
        log_msg "$AS conftest.asm $ASFLAGS $2 -o conftest.o"
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
196
197
198
199
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.asm >> config.log
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
200
201
    fi
    return $res
202
203
}

Henrik Gramner's avatar
Henrik Gramner committed
204
205
206
rc_check() {
    log_check "whether $RC works"
    echo "$1" > conftest.rc
207
    if [ $compiler = ICL ]; then
208
        rc_cmd="$RC $RCFLAGS -foconftest.o conftest.rc"
209
    else
210
        rc_cmd="$RC $RCFLAGS -o conftest.o conftest.rc"
211
212
    fi
    if $rc_cmd >conftest.log 2>&1; then
Henrik Gramner's avatar
Henrik Gramner committed
213
214
215
216
217
218
219
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
220
        log_msg "$rc_cmd"
Henrik Gramner's avatar
Henrik Gramner committed
221
222
223
224
225
226
227
228
229
230
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.rc >> config.log
        log_msg "--------------------------------------------------"
    fi
    return $res
}

Diogo Franco's avatar
Diogo Franco committed
231
define() {
Steven Walters's avatar
Steven Walters committed
232
    echo "#define $1$([ -n "$2" ] && echo " $2" || echo " 1")" >> config.h
Diogo Franco's avatar
Diogo Franco committed
233
234
}

235
die() {
Diogo Franco's avatar
Diogo Franco committed
236
    log_msg "DIED: $@"
237
238
239
240
    echo "$@"
    exit 1
}

Steven Walters's avatar
Steven Walters committed
241
rm -f x264_config.h config.h config.mak config.log x264.pc x264.def conftest*
Loren Merritt's avatar
Loren Merritt committed
242

Oka Motofumi's avatar
Oka Motofumi committed
243
244
245
SRCPATH="$(cd $(dirname $0); pwd)"
[ "$SRCPATH" = "$(pwd)" ] && SRCPATH=.
[ -n "$(echo $SRCPATH | grep ' ')" ] && die "Out of tree builds are impossible with whitespace in source path."
246
[ -e "$SRCPATH/config.h" -o -e "$SRCPATH/x264_config.h" ] && die "Out of tree builds are impossible with config.h/x264_config.h in source dir."
Oka Motofumi's avatar
Oka Motofumi committed
247

248
prefix='/usr/local'
Loren Merritt's avatar
Loren Merritt committed
249
250
251
exec_prefix='${prefix}'
bindir='${exec_prefix}/bin'
libdir='${exec_prefix}/lib'
252
includedir='${prefix}/include'
253
DEVNULL='/dev/null'
254

Nikoli's avatar
Nikoli committed
255
256
257
258
cli="yes"
cli_libx264="internal"
shared="no"
static="no"
Steven Walters's avatar
Steven Walters committed
259
260
261
262
avs="auto"
lavf="auto"
ffms="auto"
gpac="auto"
263
gpl="yes"
264
thread="auto"
265
swscale="auto"
266
asm="auto"
267
interlaced="yes"
268
debug="no"
269
gprof="no"
Nikoli's avatar
Nikoli committed
270
strip="no"
271
pic="no"
Loren Merritt's avatar
Loren Merritt committed
272
vis="no"
273
bit_depth="8"
274
chroma_format="all"
Steven Walters's avatar
Steven Walters committed
275
compiler="GNU"
Loren Merritt's avatar
Loren Merritt committed
276

Oka Motofumi's avatar
Oka Motofumi committed
277
CFLAGS="$CFLAGS -Wall -I. -I\$(SRCPATH)"
278
LDFLAGS="$LDFLAGS"
279
LDFLAGSCLI="$LDFLAGSCLI"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
280
ASFLAGS="$ASFLAGS"
281
RCFLAGS="$RCFLAGS"
282
HAVE_GETOPT_LONG=1
Anton Mitrofanov's avatar
Anton Mitrofanov committed
283
cross_prefix=""
284

Loren Merritt's avatar
Loren Merritt committed
285
286
EXE=""

287
# list of all preprocessor HAVE values we can define
288
CONFIG_HAVE="MALLOC_H ALTIVEC ALTIVEC_H MMX ARMV6 ARMV6T2 NEON BEOSTHREAD POSIXTHREAD WIN32THREAD THREAD LOG2F VISUALIZE SWSCALE LAVF FFMS GPAC GF_MALLOC AVS GPL VECTOREXT INTERLACED CPU_COUNT"
289

290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# parse options

for opt do
    optarg="${opt#*=}"
    case "$opt" in
        --prefix=*)
            prefix="$optarg"
            ;;
        --exec-prefix=*)
            exec_prefix="$optarg"
            ;;
        --bindir=*)
            bindir="$optarg"
            ;;
        --libdir=*)
            libdir="$optarg"
            ;;
        --includedir=*)
            includedir="$optarg"
            ;;
Nikoli's avatar
Nikoli committed
310
311
312
313
314
315
316
317
318
319
320
321
        --disable-cli)
            cli="no"
            ;;
        --system-libx264)
            cli_libx264="system"
            ;;
        --enable-shared)
            shared="yes"
            ;;
        --enable-static)
            static="yes"
            ;;
322
323
324
        --disable-asm)
            asm="no"
            ;;
325
326
327
        --disable-interlaced)
            interlaced="no"
            ;;
Steven Walters's avatar
Steven Walters committed
328
329
        --disable-avs)
            avs="no"
330
            ;;
Steven Walters's avatar
Steven Walters committed
331
332
        --disable-lavf)
            lavf="no"
333
            ;;
Steven Walters's avatar
Steven Walters committed
334
335
        --disable-ffms)
            ffms="no"
336
            ;;
Steven Walters's avatar
Steven Walters committed
337
338
        --disable-gpac)
            gpac="no"
339
            ;;
340
341
342
        --disable-gpl)
            gpl="no"
            ;;
343
        --extra-asflags=*)
344
            ASFLAGS="$ASFLAGS $optarg"
345
346
            ;;
        --extra-cflags=*)
347
            CFLAGS="$CFLAGS $optarg"
348
349
            ;;
        --extra-ldflags=*)
350
            LDFLAGS="$LDFLAGS $optarg"
351
            ;;
352
353
354
        --extra-rcflags=*)
            RCFLAGS="$RCFLAGS $optarg"
            ;;
355
356
357
358
359
        --disable-thread)
            thread="no"
            ;;
        --enable-win32thread)
            thread="win32"
360
            ;;
361
362
363
        --disable-swscale)
            swscale="no"
            ;;
364
365
366
367
368
369
370
371
        --enable-debug)
            debug="yes"
            ;;
        --enable-gprof)
            CFLAGS="$CFLAGS -pg"
            LDFLAGS="$LDFLAGS -pg"
            gprof="yes"
            ;;
Nikoli's avatar
Nikoli committed
372
373
374
        --enable-strip)
            strip="yes"
            ;;
375
376
377
378
379
380
381
        --enable-pic)
            pic="yes"
            ;;
        --enable-visualize)
            vis="yes"
            ;;
        --host=*)
382
            host="$optarg"
383
            ;;
Anton Mitrofanov's avatar
Anton Mitrofanov committed
384
        --cross-prefix=*)
385
            cross_prefix="$optarg"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
386
            ;;
David Conrad's avatar
David Conrad committed
387
        --sysroot=*)
388
389
            CFLAGS="$CFLAGS --sysroot=$optarg"
            LDFLAGS="$LDFLAGS --sysroot=$optarg"
David Conrad's avatar
David Conrad committed
390
            ;;
391
        --bit-depth=*)
392
            bit_depth="$optarg"
393
394
395
396
397
398
            if [ "$bit_depth" -lt "8" -o "$bit_depth" -gt "10" ]; then
                echo "Supplied bit depth must be in range [8,10]."
                exit 1
            fi
            bit_depth=`expr $bit_depth + 0`
            ;;
399
400
401
402
403
404
405
        --chroma-format=*)
            chroma_format="$optarg"
            if [ $chroma_format != "420" -a $chroma_format != "422" -a $chroma_format != "444" -a $chroma_format != "all" ]; then
                echo "Supplied chroma format must be 420, 422, 444 or all."
                exit 1
            fi
            ;;
406
407
408
409
410
411
        *)
            echo "Unknown option $opt, ignored"
            ;;
    esac
done

Nikoli's avatar
Nikoli committed
412
413
[ "$cli" = "no" -a "$shared" = "no" -a "$static" = "no" ] && die "Nothing to build. Enable cli, shared or static."

Anton Mitrofanov's avatar
Anton Mitrofanov committed
414
415
416
417
418
CC="${CC-${cross_prefix}gcc}"
AR="${AR-${cross_prefix}ar}"
RANLIB="${RANLIB-${cross_prefix}ranlib}"
STRIP="${STRIP-${cross_prefix}strip}"

419
if [ "x$host" = x ]; then
Oka Motofumi's avatar
Oka Motofumi committed
420
    host=`${SRCPATH}/config.guess`
421
422
fi
# normalize a triplet into a quadruplet
Oka Motofumi's avatar
Oka Motofumi committed
423
host=`${SRCPATH}/config.sub $host`
424

425
# split $host
Loren Merritt's avatar
Loren Merritt committed
426
host_cpu="${host%%-*}"
427
host="${host#*-}"
Loren Merritt's avatar
Loren Merritt committed
428
host_vendor="${host%%-*}"
429
host_os="${host#*-}"
430

Steven Walters's avatar
Steven Walters committed
431
432
433
434
435
436
# test for use of Intel Compiler
if [[ $host_os = mingw* || $host_os = cygwin* ]]; then
    if [[ `basename "$CC"` = icl* ]]; then
        # Windows Intel Compiler creates dependency generation with absolute Windows paths, Cygwin's make does not support Windows paths.
        [[ $host_os = cygwin* ]] && die "Windows Intel Compiler support requires MSYS"
        compiler=ICL
437
        CFLAGS="$CFLAGS -Qstd=c99 -nologo -Qms0 -DHAVE_STRING_H -I\$(SRCPATH)/extras"
Steven Walters's avatar
Steven Walters committed
438
439
440
441
442
443
444
445
446
447
448
449
450
        QPRE="-Q"
        `$CC 2>&1 | grep -q IA-32` && host_cpu=i486
        `$CC 2>&1 | grep -q "Intel(R) 64"` && host_cpu=x86_64
        cpp_check "" "" "_MSC_VER >= 1400" || die "Windows Intel Compiler support requires Visual Studio 2005 or newer"
    fi
else
    if [[ `basename "$CC"` = icc* ]]; then
        AR="xiar"
        compiler=ICC
        QPRE="-"
    fi
fi

451
libm=""
452
case $host_os in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
453
454
455
456
457
458
459
    beos*)
        SYS="BEOS"
        define HAVE_MALLOC_H
        ;;
    darwin*)
        SYS="MACOSX"
        CFLAGS="$CFLAGS -falign-loops=16"
460
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
461
462
463
464
465
466
        if [ "$pic" = "no" ]; then
            cc_check "" -mdynamic-no-pic && CFLAGS="$CFLAGS -mdynamic-no-pic"
        fi
        ;;
    freebsd*)
        SYS="FREEBSD"
467
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
468
469
470
471
        ;;
    kfreebsd*-gnu)
        SYS="FREEBSD"
        define HAVE_MALLOC_H
472
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
473
474
475
        ;;
    netbsd*)
        SYS="NETBSD"
476
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
477
478
479
        ;;
    openbsd*)
        SYS="OPENBSD"
480
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
481
482
483
484
        ;;
    *linux*)
        SYS="LINUX"
        define HAVE_MALLOC_H
485
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
486
        ;;
487
488
489
    gnu*)
        SYS="HURD"
        define HAVE_MALLOC_H
490
        libm="-lm"
491
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
492
493
494
495
496
497
    cygwin*)
        EXE=".exe"
        if cc_check "" -mno-cygwin; then
            CFLAGS="$CFLAGS -mno-cygwin"
            LDFLAGS="$LDFLAGS -mno-cygwin"
        fi
498
499
500
501
502
503
        if cpp_check "" "" "defined(__CYGWIN32__)" ; then
            define HAVE_MALLOC_H
            SYS="CYGWIN"
        else
            SYS="WINDOWS"
            DEVNULL="NUL"
504
            RC="${RC-${cross_prefix}windres}"
505
        fi
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
506
507
        ;;
    mingw*)
Steven Walters's avatar
Steven Walters committed
508
        SYS="WINDOWS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
509
510
        EXE=".exe"
        DEVNULL="NUL"
511
        [ $compiler = ICL ] && RC="${RC-rc}" || RC="${RC-${cross_prefix}windres}"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
512
513
514
515
        ;;
    sunos*|solaris*)
        SYS="SunOS"
        define HAVE_MALLOC_H
516
        libm="-lm"
517
518
519
520
521
        if cc_check "" /usr/lib/64/values-xpg6.o; then
            LDFLAGS="$LDFLAGS /usr/lib/64/values-xpg6.o"
        else
            LDFLAGS="$LDFLAGS /usr/lib/values-xpg6.o"
        fi
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
522
523
524
525
526
        HAVE_GETOPT_LONG=0
        ;;
    *)
        die "Unknown system $host, edit the configure"
        ;;
527
528
esac

529
530
LDFLAGS="$LDFLAGS $libm"

531
case $host_cpu in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
532
533
534
535
    i*86)
        ARCH="X86"
        AS="yasm"
        ASFLAGS="$ASFLAGS -O2"
Steven Walters's avatar
Steven Walters committed
536
537
538
539
540
541
542
        if [ $compiler = GNU ]; then
            if [[ "$asm" == auto && "$CFLAGS" != *-march* ]]; then
                CFLAGS="$CFLAGS -march=i686"
            fi
            if [[ "$asm" == auto && "$CFLAGS" != *-mfpmath* ]]; then
                CFLAGS="$CFLAGS -mfpmath=sse -msse"
            fi
543
544
            CFLAGS="-m32 $CFLAGS"
            LDFLAGS="-m32 $LDFLAGS"
Steven Walters's avatar
Steven Walters committed
545
546
547
548
549
550
551
552
553
554
555
556
557
558
        else
            # icc on linux has various degrees of mod16 stack support
            if [ $SYS = LINUX ]; then
                # < 11 is completely incapable of keeping a mod16 stack
                if cpp_check "" "" "__INTEL_COMPILER < 1100" ; then
                    define BROKEN_STACK_ALIGNMENT
                # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so.
                elif cpp_check "" "" "__INTEL_COMPILER < 1200" ; then
                    CFLAGS="$CFLAGS -falign-stack=assume-16-byte"
                fi
                # >= 12 defaults to a mod16 stack
            fi
            # icl on windows has no mod16 stack support
            [ $SYS = WINDOWS ] && define BROKEN_STACK_ALIGNMENT
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
559
560
561
        fi
        if [ "$SYS" = MACOSX ]; then
            ASFLAGS="$ASFLAGS -f macho -DPREFIX"
562
        elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
563
564
            ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
            LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
565
            [ $compiler = GNU ] && RCFLAGS="--target=pe-i386 $RCFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
566
567
        else
            ASFLAGS="$ASFLAGS -f elf"
Sean McGovern's avatar
Sean McGovern committed
568
569
        fi
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
570
571
572
    x86_64)
        ARCH="X86_64"
        AS="yasm"
573
        [ $compiler = GNU ] && CFLAGS="-m64 $CFLAGS" && LDFLAGS="-m64 $LDFLAGS"
574
        if [ "$SYS" = MACOSX ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
575
576
577
578
579
            ASFLAGS="$ASFLAGS -f macho64 -m amd64 -DPIC -DPREFIX"
            if cc_check '' "-arch x86_64"; then
                CFLAGS="$CFLAGS -arch x86_64"
                LDFLAGS="$LDFLAGS -arch x86_64"
            fi
Steven Walters's avatar
Steven Walters committed
580
        elif [ "$SYS" = WINDOWS ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
581
            ASFLAGS="$ASFLAGS -f win32 -m amd64"
Steven Walters's avatar
Steven Walters committed
582
583
            # only the GNU toolchain is inconsistent in prefixing function names with _
            [ $compiler = GNU ] && cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
584
            [ $compiler = GNU ] && RCFLAGS="--target=pe-x86-64 $RCFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
        else
            ASFLAGS="$ASFLAGS -f elf -m amd64"
        fi
        ;;
    powerpc|powerpc64)
        ARCH="PPC"
        if [ $asm = auto ] ; then
            define HAVE_ALTIVEC
            AS="${AS-${cross_prefix}gcc}"
            if [ $SYS = MACOSX ] ; then
                CFLAGS="$CFLAGS -faltivec -fastf -mcpu=G4"
            else
                CFLAGS="$CFLAGS -maltivec -mabi=altivec"
                define HAVE_ALTIVEC_H
            fi
        fi
        ;;
    sparc)
        ARCH="SPARC"
        case $(uname -m) in
            sun4u|sun4v)
                if [ $asm = auto ]; then
                    ARCH="UltraSPARC"
                    if ! echo $CFLAGS | grep -Eq '\-mcpu' ; then
                        CFLAGS="$CFLAGS -mcpu=ultrasparc"
                        LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
                    fi
                    AS="${AS-${cross_prefix}as}"
                    ASFLAGS="$ASFLAGS -xarch=v8plusa"
                fi
                ;;
        esac
        ;;
    mips|mipsel|mips64|mips64el)
        ARCH="MIPS"
        ;;
    arm*)
        ARCH="ARM"
        if [ "$SYS" = MACOSX ] ; then
            AS="${AS-extras/gas-preprocessor.pl $CC}"
            ASFLAGS="$ASFLAGS -DPREFIX -DPIC"  # apple's ld doesn't support movw/movt relocations at all
            # build for armv7 by default
            if ! echo $CFLAGS | grep -Eq '\-arch' ; then
                CFLAGS="$CFLAGS -arch armv7"
                LDFLAGS="$LDFLAGS -arch armv7"
            fi
        else
            AS="${AS-${cross_prefix}gcc}"
        fi
        ;;
    s390|s390x)
        ARCH="S390"
        ;;
638
    hppa*|parisc*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
639
640
641
642
643
        ARCH="PARISC"
        ;;
    ia64)
        ARCH="IA64"
        ;;
644
645
646
    alpha*)
        ARCH="ALPHA"
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
647
648
649
    *)
        ARCH="$(echo $host_cpu | tr a-z A-Z)"
        ;;
650
651
esac

Henrik Gramner's avatar
Henrik Gramner committed
652
653
654
655
656
657
if [ $SYS = WINDOWS ]; then
    if ! rc_check "0 RCDATA {0}" ; then
        RC=""
    fi
fi

Diogo Franco's avatar
Diogo Franco committed
658
659
660
661
662
663
664
665
666
667
log_msg "x264 configure script"
if [ -n "$*" ]; then
    msg="Command line options:"
    for i in $@; do
        msg="$msg \"$i\""
    done
    log_msg "$msg"
fi
log_msg ""

668
669
# check requirements

670
671
cc_check || die "No working C compiler found."

Steven Walters's avatar
Steven Walters committed
672
if [ $compiler != ICL ]; then
673
    if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
Steven Walters's avatar
Steven Walters committed
674
        CFLAGS="$CFLAGS -std=gnu99"
675
    elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
Steven Walters's avatar
Steven Walters committed
676
        CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
677
678
    elif ! cc_check '' '' 'for( int i = 0; i < 9; i++ );' ; then
        die "C99 compiler is needed for compilation."
Steven Walters's avatar
Steven Walters committed
679
    fi
680
681
fi

682
if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o $ARCH = "ARM" -o $ARCH = "IA64" -o $ARCH = "PARISC" -o $ARCH = "MIPS" \) ] ; then
683
684
685
    pic="yes"
fi

686
if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
Anton Mitrofanov's avatar
Anton Mitrofanov committed
687
    if ! as_check "vpperm xmm0, xmm0, xmm0, xmm0" ; then
688
        VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1`
689
        echo "Found $VER"
690
        echo "Minimum version is yasm-1.0.0"
691
692
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
693
    fi
694
    if ! cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' ; then
695
        VER=`(${cross_prefix}as --version || echo no gnu as) 2>/dev/null | head -n 1`
696
697
698
699
700
701
        echo "Found $VER"
        echo "Minimum version is binutils-2.17"
        echo "Your compiler can't handle inline SSSE3 asm."
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
    fi
Diogo Franco's avatar
Diogo Franco committed
702
    define HAVE_MMX
703
fi
704

705
if [ $asm = auto -a $ARCH = ARM ] ; then
706
    # set flags so neon is built by default
707
    echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon"
708

David Conrad's avatar
David Conrad committed
709
710
711
712
    if  cc_check '' '' '__asm__("rev ip, ip");' ; then      define HAVE_ARMV6
        cc_check '' '' '__asm__("movt r0, #0");'         && define HAVE_ARMV6T2
        cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON
        ASFLAGS="$ASFLAGS $CFLAGS -c"
713
    else
714
        echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS."
715
716
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
717
718
719
    fi
fi

720
[ $asm = no ] && AS=""
721
[ "x$AS" = x ] && asm="no" || asm="yes"
722

Diogo Franco's avatar
Diogo Franco committed
723
724
define ARCH_$ARCH
define SYS_$SYS
725

Steven Walters's avatar
Steven Walters committed
726
727
728
# skip endianness check for Intel Compiler, as all supported platforms are little. the -ipo flag will also cause the check to fail
if [ $compiler = GNU ]; then
    echo "int i[2] = {0x42494745,0}; double f[2] = {0x1.0656e6469616ep+102,0};" > conftest.c
729
    $CC $CFLAGS conftest.c -c -o conftest.o 2>/dev/null || die "endian test failed"
Steven Walters's avatar
Steven Walters committed
730
731
732
733
734
    if (${cross_prefix}strings -a conftest.o | grep -q BIGE) && (${cross_prefix}strings -a conftest.o | grep -q FPendian) ; then
        define WORDS_BIGENDIAN
    elif !(${cross_prefix}strings -a conftest.o | grep -q EGIB && ${cross_prefix}strings -a conftest.o | grep -q naidnePF) ; then
        die "endian test failed"
    fi
Kieran Kunhya's avatar
Kieran Kunhya committed
735
fi
Loren Merritt's avatar
Loren Merritt committed
736

737
738
# autodetect options that weren't forced nor disabled

739
# pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows
Steven Walters's avatar
Steven Walters committed
740
[ "$SYS" = "WINDOWS" -a "$gpl" = "no" -a "$thread" = "auto" ] && thread="win32"
741

742
libpthread=""
743
744
if [ "$thread" = "auto" ]; then
    thread="no"
745
    case $SYS in
746
        BEOS)
747
748
            thread="beos"
            define HAVE_BEOSTHREAD
749
            ;;
Steven Walters's avatar
Steven Walters committed
750
        WINDOWS)
751
            if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
752
                thread="posix"
753
754
                libpthread="-lpthread"
            elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
755
                thread="posix"
756
757
                libpthread="-lpthreadGC2"
            elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
758
                thread="posix"
Loren Merritt's avatar
Loren Merritt committed
759
                libpthread="-lpthreadGC2 -lwsock32"
Diogo Franco's avatar
Diogo Franco committed
760
                define PTW32_STATIC_LIB
Anton Mitrofanov's avatar
Anton Mitrofanov committed
761
            elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
762
                thread="posix"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
763
                libpthread="-lpthreadGC2 -lws2_32"
Diogo Franco's avatar
Diogo Franco committed
764
                define PTW32_STATIC_LIB
765
766
767
            else
                # default to native threading if pthread-win32 is unavailable
                thread="win32"
768
769
            fi
            ;;
770
        *)
771
            cc_check pthread.h -lpthread && thread="posix" && libpthread="-lpthread"
772
773
774
            ;;
    esac
fi
775
if [ "$thread" = "posix" ]; then
776
    LDFLAGS="$LDFLAGS $libpthread"
777
    define HAVE_POSIXTHREAD
778
779
780
    if [ "$SYS" = "LINUX" ] && cc_check sched.h "-D_GNU_SOURCE -Werror" "cpu_set_t p_aff; return CPU_COUNT(&p_aff);" ; then
        define HAVE_CPU_COUNT
    fi
781
782
fi
if [ "$thread" = "win32" ]; then
783
    # cygwin does not support win32 threads
Steven Walters's avatar
Steven Walters committed
784
    if [ "$SYS" = "WINDOWS" ]; then
785
786
787
788
        define HAVE_WIN32THREAD
    else
        thread="no"
    fi
789
fi
790
[ "$thread" != "no" ] && define HAVE_THREAD
791

792
if cc_check "math.h" "-Werror" "return log2f(2);" ; then
Diogo Franco's avatar
Diogo Franco committed
793
    define HAVE_LOG2F
794
795
fi

796
797
798
799
800
801
802
803
804
805
if [ "$vis" = "yes" ] ; then
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -I/usr/X11R6/include"
    if cc_check "X11/Xlib.h" "-L/usr/X11R6/lib -lX11" "XOpenDisplay(0);" ; then
        LDFLAGS="-L/usr/X11R6/lib -lX11 $LDFLAGS"
        define HAVE_VISUALIZE
    else
        vis="no"
        CFLAGS="$save_CFLAGS"
   fi
806
807
fi

808
809
if [ "$swscale" = "auto" ] ; then
    swscale="no"
810
    if ${cross_prefix}pkg-config --exists libswscale 2>/dev/null; then
811
812
        SWSCALE_LIBS="$SWSCALE_LIBS $(${cross_prefix}pkg-config --libs libswscale libavutil)"
        SWSCALE_CFLAGS="$SWSCALE_CFLAGS $(${cross_prefix}pkg-config --cflags libswscale libavutil)"
813
814
815
    fi
    [ -z "$SWSCALE_LIBS" ] && SWSCALE_LIBS="-lswscale -lavutil"

Steven Walters's avatar
Steven Walters committed
816
    if cc_check "libswscale/swscale.h" "$SWSCALE_CFLAGS $SWSCALE_LIBS" "sws_init_context(0,0,0);" ; then
Steven Walters's avatar
Steven Walters committed
817
        if cpp_check "libavutil/pixdesc.h" "$SWSCALE_CFLAGS $SWSCALE_LIBS" "defined(PIX_FMT_RGB)" ; then
Steven Walters's avatar
Steven Walters committed
818
            swscale="yes"
819
        else
Steven Walters's avatar
Steven Walters committed
820
            echo "Warning: PIX_FMT_RGB is missing from libavutil, update for swscale support"
821
822
823
824
        fi
    fi
fi

Steven Walters's avatar
Steven Walters committed
825
826
if [ "$lavf" = "auto" ] ; then
    lavf="no"
827
    if ${cross_prefix}pkg-config --exists libavformat libavcodec libswscale 2>/dev/null; then
828
829
        LAVF_LIBS="$LAVF_LIBS $(${cross_prefix}pkg-config --libs libavformat libavcodec libavutil libswscale)"
        LAVF_CFLAGS="$LAVF_CFLAGS $(${cross_prefix}pkg-config --cflags libavformat libavcodec libavutil libswscale)"
830
    fi
831
    if [ -z "$LAVF_LIBS" -a -z "$LAVF_CFLAGS" ]; then
832
        LAVF_LIBS="-lavformat"
833
        for lib in -lpostproc -lavcodec -lavcore -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32; do
834
            cc_check "" $lib && LAVF_LIBS="$LAVF_LIBS $lib"
835
836
        done
    fi
837
    LAVF_LIBS="-L. $LAVF_LIBS"
838
    if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "avformat_find_stream_info(0,0); avcodec_open2(0,0,0);" ; then
839
840
        if [ "$swscale" = "yes" ]; then
            lavf="yes"
841
        else
842
            echo "Warning: libavformat is not supported without swscale support"
843
844
845
846
        fi
    fi
fi

Steven Walters's avatar
Steven Walters committed
847
if [ "$ffms" = "auto" ] ; then
848
    ffms_major="2"; ffms_minor="16"; ffms_micro="2"; ffms_bump="0"
Steven Walters's avatar
Steven Walters committed
849
    ffms="no"
850

851
    if ${cross_prefix}pkg-config --exists ffms2 2>/dev/null; then
852
        FFMS2_LIBS="$FFMS2_LIBS $(${cross_prefix}pkg-config --libs ffms2)"
James Darnley's avatar
James Darnley committed
853
        FFMS2_CFLAGS="$FFMS2_CFLAGS $(${cross_prefix}pkg-config --cflags ffms2)"
854
855
856
857
    fi
    [ -z "$FFMS2_LIBS" ] && FFMS2_LIBS="-lffms2"

    if cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS" "FFMS_DestroyVideoSource(0);" ; then
Steven Walters's avatar
Steven Walters committed
858
        ffms="yes"
859
    elif cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS -lstdc++ $LAVF_LIBS" "FFMS_DestroyVideoSource(0);" ; then
Steven Walters's avatar
Steven Walters committed
860
        ffms="yes"
861
        FFMS2_LIBS="$FFMS2_LIBS -lstdc++ $LAVF_LIBS"
862
    fi
Diogo Franco's avatar
Diogo Franco committed
863

864
865
866
867
868
869
870
871
    error="ffms must be at least version $ffms_major.$ffms_minor.$ffms_micro.$ffms_bump"
    if [ $ffms = "yes" ] && ! cpp_check "ffms.h" "$FFMS2_CFLAGS" "FFMS_VERSION >= (($ffms_major << 24) | ($ffms_minor << 16) | ($ffms_micro << 8) | $ffms_bump)" "$error"; then
       ffms="no"
       echo "Warning: $error"
    fi
    if [ "$ffms" = "yes" -a "$swscale" = "no" ]; then
        echo "Warning: ffms is not supported without swscale support"
        ffms="no"
Diogo Franco's avatar
Diogo Franco committed
872
    fi
873
874
fi

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
875
if [ "$swscale" = "yes" ]; then
876
877
    LDFLAGSCLI="$SWSCALE_LIBS $LDFLAGSCLI"
    CFLAGS="$CFLAGS $SWSCALE_CFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
878
879
880
881
882
883
    define HAVE_SWSCALE
    if [ "$lavf" = "yes" ]; then
        LDFLAGSCLI="$LAVF_LIBS $LDFLAGSCLI"
        CFLAGS="$CFLAGS $LAVF_CFLAGS"
        define HAVE_LAVF
    fi
Fiona Glaser's avatar
Fiona Glaser committed
884
    if [ "$ffms" = "yes" ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
885
886
887
888
        LDFLAGSCLI="$FFMS2_LIBS $LDFLAGSCLI"
        CFLAGS="$CFLAGS $FFMS2_CFLAGS"
        define HAVE_FFMS
    fi
889
890
fi

Steven Walters's avatar
Steven Walters committed
891
892
if [ "$gpac" = "auto" ] ; then
    gpac="no"
893
894
895
896
    cc_check "" -lz && GPAC_LIBS="-lgpac_static -lz" || GPAC_LIBS="-lgpac_static"
    if [ "$SYS" = "WINDOWS" ] ; then
        GPAC_LIBS="$GPAC_LIBS -lwinmm"
    fi
Steven Walters's avatar
Steven Walters committed
897
898
899
    if cc_check gpac/isomedia.h "$GPAC_LIBS" ; then
        if cc_check gpac/isomedia.h "$GPAC_LIBS" "gf_isom_set_pixel_aspect_ratio(0,0,0,0,0);" ; then
            gpac="yes"
Yusuke Nakamura's avatar
Yusuke Nakamura committed
900
901
902
903
        else
            echo "Warning: gpac is too old, update to 2007-06-21 UTC or later"
        fi
    fi
904
fi
Steven Walters's avatar
Steven Walters committed
905
906
907
if [ "$gpac" = "yes" ] ; then
    define HAVE_GPAC
    if cc_check gpac/isomedia.h "-Werror $GPAC_LIBS" "gf_malloc(1); gf_free(NULL);" ; then
908
909
        define HAVE_GF_MALLOC
    fi
910
    LDFLAGSCLI="$GPAC_LIBS $LDFLAGSCLI"
911
912
fi

Steven Walters's avatar
Steven Walters committed
913
if [ "$avs" = "auto" ] ; then
914
    avs="no"
915
916
    # cygwin can use avisynth if it can use LoadLibrary
    if [ $SYS = WINDOWS ] || ([ $SYS = CYGWIN ] && cc_check windows.h "" "LoadLibrary(0);") ; then
Steven Walters's avatar
Steven Walters committed
917
918
        avs="yes"
        define HAVE_AVS
Anton Mitrofanov's avatar
Anton Mitrofanov committed
919
    fi
920
921
fi

922
923
cc_check "stdint.h" "" "uint32_t test_vec __attribute__ ((vector_size (16))) = {0,1,2,3};" && define HAVE_VECTOREXT

924
925
if [ "$pic" = "yes" ] ; then
    CFLAGS="$CFLAGS -fPIC"
Loren Merritt's avatar
Loren Merritt committed
926
    ASFLAGS="$ASFLAGS -DPIC"
927
    # resolve textrels in the x86 asm
Sean McGovern's avatar
Sean McGovern committed
928
929
    cc_check stdio.h "-shared -Wl,-Bsymbolic" && SOFLAGS="$SOFLAGS -Wl,-Bsymbolic"
    [ $SYS = SunOS -a "$ARCH" = "X86" ] && SOFLAGS="$SOFLAGS -mimpure-text"
930
931
fi

932
if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
Nikoli's avatar
Nikoli committed
933
934
935
936
937
    CFLAGS="$CFLAGS -fomit-frame-pointer"
fi

if [ "$strip" = "yes" ]; then
    CFLAGS="$CFLAGS -s"
Loren Merritt's avatar
Loren Merritt committed
938
    LDFLAGS="$LDFLAGS -s"
939
940
fi

Loren Merritt's avatar
Loren Merritt committed
941
if [ "$debug" = "yes" ]; then
942
    CFLAGS="-O1 -g $CFLAGS"
943
944
945
elif [ $ARCH = ARM ]; then
    # arm-gcc-4.2 produces incorrect output with -ffast-math
    # and it doesn't save any speed anyway on 4.4, so disable it
Diogo Franco's avatar
Diogo Franco committed
946
    CFLAGS="-O3 -fno-fast-math $CFLAGS"
947
else
Diogo Franco's avatar
Diogo Franco committed
948
    CFLAGS="-O3 -ffast-math $CFLAGS"
949
950
fi

951
952
953
954
if cc_check '' -fno-tree-vectorize ; then
    CFLAGS="$CFLAGS -fno-tree-vectorize"
fi

Steven Walters's avatar
Steven Walters committed
955
if [ $SYS = WINDOWS -a $ARCH = X86 -a $compiler = GNU ] ; then
956
957
958
959
    # workaround gcc/ld bug with alignment of static variables/arrays that are initialized to zero
    cc_check '' -fno-zero-initialized-in-bss && CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
fi

Loren Merritt's avatar
Loren Merritt committed
960
if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
961
962
    define fseek fseeko
    define ftell ftello
Loren Merritt's avatar
Loren Merritt committed
963
elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
964
965
    define fseek fseeko64
    define ftell ftello64
Steven Walters's avatar
Steven Walters committed
966
967
968
elif cc_check "stdio.h" "" "_fseeki64(stdin,0,0);" ; then
    define fseek _fseeki64
    define ftell _ftelli64
Loren Merritt's avatar
Loren Merritt committed
969
970
fi

971
972
973
974
if cc_check '' -Wshadow ; then
    CFLAGS="-Wshadow $CFLAGS"
fi

975
if [ "$bit_depth" -gt "8" ]; then
976
    define HIGH_BIT_DEPTH
977
978
979
    ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=1"
else
    ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=0"
980
981
fi

982
983
984
985
if [ "$chroma_format" != "all" ]; then
    define CHROMA_FORMAT CHROMA_$chroma_format
fi

986
ASFLAGS="$ASFLAGS -DBIT_DEPTH=$bit_depth"
987

988
[ $gpl = yes ] && define HAVE_GPL && x264_gpl=1 || x264_gpl=0
989

990
991
[ $interlaced = yes ] && define HAVE_INTERLACED && x264_interlaced=1 || x264_interlaced=0

992
993
994
995
#define undefined vars as 0
for var in $CONFIG_HAVE; do
    grep -q "HAVE_$var 1" config.h || define HAVE_$var 0
done
996

Steven Walters's avatar
Steven Walters committed
997
998
999
1000
1001
1002
1003
1004
1005
1006
if [ $compiler = ICL ]; then
    AR="xilib -nologo -out:"
    DEPMM=-QMM
    DEPMT=-QMT
    HAVE_GETOPT_LONG=0
    LD="xilink -out:"
    LDFLAGS="-nologo -incremental:no $(icl_ldflags $LDFLAGS)"
    LDFLAGSCLI="$(icl_ldflags $LDFLAGSCLI)"
    LIBX264=libx264.lib
    RANLIB=
1007
    [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -I\$(SRCPATH)/extras -fo"
Steven Walters's avatar
Steven Walters committed
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
    STRIP=
    if [ $debug = yes ]; then
        LDFLAGS="-debug $LDFLAGS"
        CFLAGS="-D_DEBUG $CFLAGS"
    else
        CFLAGS="-DNDEBUG $CFLAGS"
    fi
else
    AR="$AR rc "
    DEPMM="-MM -g0"
    DEPMT="-MT"
    LD="$CC -o "
    LIBX264=libx264.a
1021
    [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -o "
Steven Walters's avatar
Steven Walters committed
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
fi
if [ $compiler = GNU ]; then
    PROF_GEN_CC="-fprofile-generate"
    PROF_GEN_LD="-fprofile-generate"
    PROF_USE_CC="-fprofile-use"
    PROF_USE_LD="-fprofile-use"
else
    CFLAGS="$(intel_cflags $CFLAGS)"
    # icc does not define __SSE__ until SSE2 optimization and icl never defines it or _M_IX86_FP
    [ \( $ARCH = X86_64 -o $ARCH = X86 \) -a $asm = yes ] && ! cpp_check "" "" "defined(__SSE__)" && define __SSE__
    PROF_GEN_CC="${QPRE}prof-gen ${QPRE}prof-dir."
    PROF_GEN_LD=
    PROF_USE_CC="${QPRE}prof-use ${QPRE}prof-dir."
    PROF_USE_LD=
fi

Loren Merritt's avatar
Loren Merritt committed
1038
1039
rm -f conftest*

1040
1041
# generate exported config file

1042
1043
config_chroma_format="X264_CSP_I$chroma_format"
[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0"
1044
cat > x264_config.h << EOF
1045
1046
1047
1048
#define X264_BIT_DEPTH     $bit_depth
#define X264_GPL           $x264_gpl
#define X264_INTERLACED    $x264_interlaced
#define X264_CHROMA_FORMAT $config_chroma_format
1049
1050
EOF

1051
1052
# generate config files

1053
cat > config.mak << EOF
Oka Motofumi's avatar
Oka Motofumi committed
1054
SRCPATH=$SRCPATH
1055
prefix=$prefix
Loren Merritt's avatar
Loren Merritt committed
1056
exec_prefix=$exec_prefix
1057
1058
1059
bindir=$bindir
libdir=$libdir
includedir=$includedir
1060
1061
1062
1063
ARCH=$ARCH
SYS=$SYS
CC=$CC
CFLAGS=$CFLAGS
Steven Walters's avatar
Steven Walters committed
1064
1065
1066
DEPMM=$DEPMM
DEPMT=$DEPMT
LD=$LD
1067
LDFLAGS=$LDFLAGS