configure 36.9 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
aligned_stack=1
532
case $host_cpu in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
533
534
535
536
    i*86)
        ARCH="X86"
        AS="yasm"
        ASFLAGS="$ASFLAGS -O2"
Steven Walters's avatar
Steven Walters committed
537
538
539
540
541
542
543
        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
544
545
            CFLAGS="-m32 $CFLAGS"
            LDFLAGS="-m32 $LDFLAGS"
Steven Walters's avatar
Steven Walters committed
546
547
548
549
550
551
        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
552
                    aligned_stack=0
Steven Walters's avatar
Steven Walters committed
553
554
555
556
557
558
559
                # 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
560
            [ $SYS = WINDOWS ] && define BROKEN_STACK_ALIGNMENT && aligned_stack=0
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
561
562
563
        fi
        if [ "$SYS" = MACOSX ]; then
            ASFLAGS="$ASFLAGS -f macho -DPREFIX"
564
        elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
565
566
            ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
            LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
Henrik Gramner's avatar
Henrik Gramner committed
567
            [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--nxcompat -Wl,--dynamicbase"
568
            [ $compiler = GNU ] && RCFLAGS="--target=pe-i386 $RCFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
569
570
        else
            ASFLAGS="$ASFLAGS -f elf"
Sean McGovern's avatar
Sean McGovern committed
571
572
        fi
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
573
574
575
    x86_64)
        ARCH="X86_64"
        AS="yasm"
576
        [ $compiler = GNU ] && CFLAGS="-m64 $CFLAGS" && LDFLAGS="-m64 $LDFLAGS"
577
        if [ "$SYS" = MACOSX ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
578
579
580
581
582
            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
583
        elif [ "$SYS" = WINDOWS ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
584
            ASFLAGS="$ASFLAGS -f win32 -m amd64"
Steven Walters's avatar
Steven Walters committed
585
586
            # only the GNU toolchain is inconsistent in prefixing function names with _
            [ $compiler = GNU ] && cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
Henrik Gramner's avatar
Henrik Gramner committed
587
            [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--nxcompat -Wl,--dynamicbase"
588
            [ $compiler = GNU ] && RCFLAGS="--target=pe-x86-64 $RCFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
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
638
639
640
641
        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"
        ;;
642
    hppa*|parisc*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
643
644
645
646
647
        ARCH="PARISC"
        ;;
    ia64)
        ARCH="IA64"
        ;;
648
649
650
    alpha*)
        ARCH="ALPHA"
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
651
652
653
    *)
        ARCH="$(echo $host_cpu | tr a-z A-Z)"
        ;;
654
esac
655
ASFLAGS="$ASFLAGS -DHAVE_ALIGNED_STACK=${aligned_stack}"
656

Henrik Gramner's avatar
Henrik Gramner committed
657
658
659
660
661
662
if [ $SYS = WINDOWS ]; then
    if ! rc_check "0 RCDATA {0}" ; then
        RC=""
    fi
fi

Diogo Franco's avatar
Diogo Franco committed
663
664
665
666
667
668
669
670
671
672
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 ""

673
674
# check requirements

675
676
cc_check || die "No working C compiler found."

Steven Walters's avatar
Steven Walters committed
677
if [ $compiler != ICL ]; then
678
    if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
Steven Walters's avatar
Steven Walters committed
679
        CFLAGS="$CFLAGS -std=gnu99"
680
    elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
Steven Walters's avatar
Steven Walters committed
681
        CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
682
683
    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
684
    fi
685
686
fi

687
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
688
689
690
    pic="yes"
fi

691
if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
692
    if ! as_check "vpmovzxwd ymm0, xmm0" ; then
693
        VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1`
694
        echo "Found $VER"
695
        echo "Minimum version is yasm-1.2.0"
696
697
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
698
    fi
699
    if ! cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' ; then
700
        VER=`(${cross_prefix}as --version || echo no gnu as) 2>/dev/null | head -n 1`
701
702
703
704
705
706
        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
707
    define HAVE_MMX
708
fi
709

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

David Conrad's avatar
David Conrad committed
714
715
716
717
    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"
718
    else
719
        echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS."
720
721
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
722
723
724
    fi
fi

725
[ $asm = no ] && AS=""
726
[ "x$AS" = x ] && asm="no" || asm="yes"
727

Diogo Franco's avatar
Diogo Franco committed
728
729
define ARCH_$ARCH
define SYS_$SYS
730

Steven Walters's avatar
Steven Walters committed
731
732
733
# 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
734
    $CC $CFLAGS conftest.c -c -o conftest.o 2>/dev/null || die "endian test failed"
Steven Walters's avatar
Steven Walters committed
735
736
737
738
739
    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
740
fi
Loren Merritt's avatar
Loren Merritt committed
741

742
743
# autodetect options that weren't forced nor disabled

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

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

797
if cc_check "math.h" "-Werror" "return log2f(2);" ; then
Diogo Franco's avatar
Diogo Franco committed
798
    define HAVE_LOG2F
799
800
fi

801
802
803
804
805
806
807
808
809
810
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
811
812
fi

813
814
if [ "$swscale" = "auto" ] ; then
    swscale="no"
815
    if ${cross_prefix}pkg-config --exists libswscale 2>/dev/null; then
816
817
        SWSCALE_LIBS="$SWSCALE_LIBS $(${cross_prefix}pkg-config --libs libswscale libavutil)"
        SWSCALE_CFLAGS="$SWSCALE_CFLAGS $(${cross_prefix}pkg-config --cflags libswscale libavutil)"
818
819
820
    fi
    [ -z "$SWSCALE_LIBS" ] && SWSCALE_LIBS="-lswscale -lavutil"

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

Steven Walters's avatar
Steven Walters committed
830
831
if [ "$lavf" = "auto" ] ; then
    lavf="no"
832
    if ${cross_prefix}pkg-config --exists libavformat libavcodec libswscale 2>/dev/null; then
833
834
        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)"
835
    fi
836
    if [ -z "$LAVF_LIBS" -a -z "$LAVF_CFLAGS" ]; then
837
        LAVF_LIBS="-lavformat"
838
        for lib in -lpostproc -lavcodec -lavcore -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32; do
839
            cc_check "" $lib && LAVF_LIBS="$LAVF_LIBS $lib"
840
841
        done
    fi
842
    LAVF_LIBS="-L. $LAVF_LIBS"
843
    if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "avformat_close_input(0);" ; then
844
845
        if [ "$swscale" = "yes" ]; then
            lavf="yes"
846
        else
847
            echo "Warning: libavformat is not supported without swscale support"
848
849
850
851
        fi
    fi
fi

Steven Walters's avatar
Steven Walters committed
852
if [ "$ffms" = "auto" ] ; then
853
    ffms_major="2"; ffms_minor="16"; ffms_micro="2"; ffms_bump="0"
Steven Walters's avatar
Steven Walters committed
854
    ffms="no"
855

856
    if ${cross_prefix}pkg-config --exists ffms2 2>/dev/null; then
857
        FFMS2_LIBS="$FFMS2_LIBS $(${cross_prefix}pkg-config --libs ffms2)"
James Darnley's avatar
James Darnley committed
858
        FFMS2_CFLAGS="$FFMS2_CFLAGS $(${cross_prefix}pkg-config --cflags ffms2)"
859
860
861
862
    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
863
        ffms="yes"
864
    elif cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS -lstdc++ $LAVF_LIBS" "FFMS_DestroyVideoSource(0);" ; then
Steven Walters's avatar
Steven Walters committed
865
        ffms="yes"
866
        FFMS2_LIBS="$FFMS2_LIBS -lstdc++ $LAVF_LIBS"
867
    fi
Diogo Franco's avatar
Diogo Franco committed
868

869
870
871
872
873
874
875
876
    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
877
    fi
878
879
fi

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
880
if [ "$swscale" = "yes" ]; then
881
882
    LDFLAGSCLI="$SWSCALE_LIBS $LDFLAGSCLI"
    CFLAGS="$CFLAGS $SWSCALE_CFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
883
884
885
886
887
888
    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
889
    if [ "$ffms" = "yes" ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
890
891
892
893
        LDFLAGSCLI="$FFMS2_LIBS $LDFLAGSCLI"
        CFLAGS="$CFLAGS $FFMS2_CFLAGS"
        define HAVE_FFMS
    fi
894
895
fi

Steven Walters's avatar
Steven Walters committed
896
897
if [ "$gpac" = "auto" ] ; then
    gpac="no"
898
899
900
901
    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
902
903
904
    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
905
906
907
908
        else
            echo "Warning: gpac is too old, update to 2007-06-21 UTC or later"
        fi
    fi
909
fi
Steven Walters's avatar
Steven Walters committed
910
911
if [ "$gpac" = "yes" ] ; then
    define HAVE_GPAC
912
    if cc_check gpac/isomedia.h "-Werror $GPAC_LIBS" "void *p; p = gf_malloc(1); gf_free(p);" ; then
913
914
        define HAVE_GF_MALLOC
    fi
915
    LDFLAGSCLI="$GPAC_LIBS $LDFLAGSCLI"
916
917
fi

Steven Walters's avatar
Steven Walters committed
918
if [ "$avs" = "auto" ] ; then
919
    avs="no"
920
921
    # 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
922
923
        avs="yes"
        define HAVE_AVS
Anton Mitrofanov's avatar
Anton Mitrofanov committed
924
    fi
925
926
fi

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

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

937
if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
Nikoli's avatar
Nikoli committed
938
939
940
941
942
    CFLAGS="$CFLAGS -fomit-frame-pointer"
fi

if [ "$strip" = "yes" ]; then
    CFLAGS="$CFLAGS -s"
Loren Merritt's avatar
Loren Merritt committed
943
    LDFLAGS="$LDFLAGS -s"
944
945
fi

Loren Merritt's avatar
Loren Merritt committed
946
if [ "$debug" = "yes" ]; then
947
    CFLAGS="-O1 -g $CFLAGS"
948
949
950
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
951
    CFLAGS="-O3 -fno-fast-math $CFLAGS"
952
else
Diogo Franco's avatar
Diogo Franco committed
953
    CFLAGS="-O3 -ffast-math $CFLAGS"
954
955
fi

956
957
958
959
if cc_check '' -fno-tree-vectorize ; then
    CFLAGS="$CFLAGS -fno-tree-vectorize"
fi

Steven Walters's avatar
Steven Walters committed
960
if [ $SYS = WINDOWS -a $ARCH = X86 -a $compiler = GNU ] ; then
961
962
963
964
    # 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
965
if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
966
967
    define fseek fseeko
    define ftell ftello
Loren Merritt's avatar
Loren Merritt committed
968
elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
969
970
    define fseek fseeko64
    define ftell ftello64
Steven Walters's avatar
Steven Walters committed
971
972
973
elif cc_check "stdio.h" "" "_fseeki64(stdin,0,0);" ; then
    define fseek _fseeki64
    define ftell _ftelli64
Loren Merritt's avatar
Loren Merritt committed
974
975
fi

976
977
978
979
if cc_check '' -Wshadow ; then
    CFLAGS="-Wshadow $CFLAGS"
fi

980
if [ "$bit_depth" -gt "8" ]; then
981
    define HIGH_BIT_DEPTH
982
983
984
    ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=1"
else
    ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=0"
985
986
fi

987
988
989
990
if [ "$chroma_format" != "all" ]; then
    define CHROMA_FORMAT CHROMA_$chroma_format
fi

991
ASFLAGS="$ASFLAGS -DBIT_DEPTH=$bit_depth"
992

993
[ $gpl = yes ] && define HAVE_GPL && x264_gpl=1 || x264_gpl=0
994

995
996
[ $interlaced = yes ] && define HAVE_INTERLACED && x264_interlaced=1 || x264_interlaced=0

997
998
999
1000
#define undefined vars as 0
for var in $CONFIG_HAVE; do
    grep -q "HAVE_$var 1" config.h || define HAVE_$var 0
done
1001

Steven Walters's avatar
Steven Walters committed
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
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=
1012
    [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -I\$(SRCPATH)/extras -fo"
Steven Walters's avatar
Steven Walters committed
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
    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
1026
    [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -o "
Steven Walters's avatar
Steven Walters committed
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
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
1043
1044
rm -f conftest*

1045
1046
# generate exported config file

1047
1048
config_chroma_format="X264_CSP_I$chroma_format"
[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0"
1049
cat > x264_config.h << EOF
1050
1051
1052
1053
#define X264_BIT_DEPTH     $bit_depth
#define X264_GPL           $x264_gpl
#define X264_INTERLACED    $x264_interlaced
#define X264_CHROMA_FORMAT $config_chroma_format
1054
1055
EOF