Newer
Older
elif ! check_cmd mktemp -u XXXXXX; then
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp(){
tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
echo "$tmpname"
mkdir "$tmpname"
FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
die "Unable to create temporary directory in $TMPDIR."
tmp="${FFTMPDIR}/test"$2
(set -C; exec > $tmp) 2> /dev/null ||
die "Unable to create temporary file in $FFTMPDIR."
eval $1=$tmp
}
trap 'rm -rf -- "$FFTMPDIR"' EXIT
tmpfile TMPC .c
tmpfile TMPE $EXESUF
tmpfile TMPH .h
tmpfile TMPO .o
tmpfile TMPS .S
tmpfile TMPSH .sh
tmpfile TMPV .ver
# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
cat <<EOF
Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOF
die "Sanity test failed."
fi
armasm_flags(){
for flag; do
case $flag in
# Filter out MSVC cl.exe options from cflags that shouldn't
# be passed to gas-preprocessor
-M[TD]*) ;;
*) echo $flag ;;
esac
done
}
cparser_flags(){
for flag; do
case $flag in
-Wno-switch) echo -Wno-switch-enum ;;
-Wno-format-zero-length) ;;
-Wdisabled-optimization) ;;
-Wno-pointer-sign) echo -Wno-other ;;
*) echo $flag ;;
esac
done
}
msvc_common_flags(){
for flag; do
case $flag in
# In addition to specifying certain flags under the compiler
# specific filters, they must be specified here as well or else the
# generic catch all at the bottom will print the original flag.
-Wall) ;;
-Wextra) ;;
-std=c99) ;;
# Common flags
-g) echo -Z7 ;;
-fno-math-errno) ;;
-fno-common) ;;
-fno-signed-zeros) ;;
-mthumb) ;;
-march=*) ;;
-lz) echo zlib.lib ;;
-l*) echo ${flag#-l}.lib ;;
-LARGEADDRESSAWARE) echo $flag ;;
-L*) echo -libpath:${flag#-L} ;;
*) echo $flag ;;
esac
done
}
msvc_flags(){
msvc_common_flags "$@"
for flag; do
case $flag in
-Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
-wd4554 ;;
-Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
-wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
-wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
-wd4307 \
-wd4273 -wd4554 -wd4701 -wd4703 ;;
esac
done
}
icl_flags(){
msvc_common_flags "$@"
for flag; do
case $flag in
# Despite what Intel's documentation says -Wall, which is supported
# on Windows, does enable remarks so disable them here.
-Wall) echo $flag -Qdiag-disable:remark ;;
-std=c99) echo -Qstd=c99 ;;
esac
done
}
icc_flags(){
for flag; do
case $flag in
-flto) echo -ipo ;;
*) echo $flag ;;
esac
done
}
suncc_flags(){
for flag; do
case $flag in
-march=*|-mcpu=*)
case "${flag#*=}" in
native) echo -xtarget=native ;;
v9|niagara) echo -xarch=sparc ;;
ultrasparc) echo -xarch=sparcvis ;;
ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
i586|pentium) echo -xchip=pentium ;;
i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
pentium3*|c3-2) echo -xtarget=pentium3 ;;
pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
pentium4*) echo -xtarget=pentium4 ;;
prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
*-sse3) echo -xarch=sse3 ;;
core2) echo -xarch=ssse3 -xchip=core2 ;;
bonnell) echo -xarch=ssse3 ;;
corei7|nehalem) echo -xtarget=nehalem ;;
westmere) echo -xtarget=westmere ;;
silvermont) echo -xarch=sse4_2 ;;
corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
amdfam10|barcelona) echo -xtarget=barcelona ;;
btver2|bdver*|znver*) echo -xarch=avx ;;
athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
k8|opteron|athlon64|athlon-fx)
echo -xarch=sse2a ;;
athlon*) echo -xarch=pentium_proa ;;
esac
;;
-std=c99) echo -xc99 ;;
-fomit-frame-pointer) echo -xregs=frameptr ;;
-fPIC) echo -KPIC -xcode=pic32 ;;
-W*,*) echo $flag ;;
-f*-*|-W*|-mimpure-text) ;;
-shared) echo -G ;;
*) echo $flag ;;
esac
done
}
probe_cc(){
pfx=$1
_cc=$2
unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
unset _ld_o _ldflags _ld_lib _ld_path
unset _depflags _DEPCMD _DEPFLAGS
_flags_filter=echo
if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
true # no-op to avoid reading stdin in following checks
elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
_type=llvm_gcc
gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
_ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
_depflags='-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed='-O3'
_cflags_size='-Os'
elif $_cc -v 2>&1 | grep -qi ^gcc; then
_type=gcc
gcc_version=$($_cc --version | head -n1)
gcc_basever=$($_cc -dumpversion)
gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
case $gcc_basever in
*) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
if [ "$first" = true ]; then
case $gcc_basever in
4.2*)
warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
esac
fi
_cflags_speed='-O3'
_cflags_size='-Os'
elif $_cc --version 2>/dev/null | grep -q ^icc; then
_type=icc
_ident=$($_cc --version | head -n1)
_depflags='-MMD'
_cflags_speed='-O3'
_cflags_size='-Os'
_cflags_noopt='-O1'
_flags_filter=icc_flags
elif $_cc -v 2>&1 | grep -q xlc; then
_type=xlc
_ident=$($_cc -qversion 2>/dev/null | head -n1)
_cflags_speed='-O5'
_cflags_size='-O5 -qcompact'
elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
test -d "$sysroot" || die "No valid sysroot specified."
_type=armcc
_ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
armcc_conf="$PWD/armcc.conf"
$_cc --arm_linux_configure \
--arm_linux_config_file="$armcc_conf" \
--configure_sysroot="$sysroot" \
--configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
die "Error creating armcc configuration file."
$_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
_flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
as_default="${cross_prefix}gcc"
_depflags='-MMD'
_cflags_speed='-O3'
_cflags_size='-Os'
elif $_cc -v 2>&1 | grep -q clang; then
_type=clang
_ident=$($_cc --version 2>/dev/null | head -n1)
_depflags='-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed='-O3'
_cflags_size='-Oz'
elif $_cc -V 2>&1 | grep -q Sun; then
_type=suncc
_ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
_DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
_DEPFLAGS='-xM1 -xc99'
_ldflags='-std=c99'
_cflags_speed='-O5'
_cflags_size='-O5 -xspace'
_flags_filter=suncc_flags
elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
_type=pathscale
_ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
_depflags='-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed='-O2'
_cflags_size='-Os'
_flags_filter='filter_out -Wdisabled-optimization'
elif $_cc -v 2>&1 | grep -q Open64; then
_type=open64
_ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
_depflags='-MMD -MF $(@:.o=.d) -MT $@'
_cflags_speed='-O2'
_cflags_size='-Os'
_flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
_type=armasm
_ident=$($_cc | head -n1)
# 4509: "This form of conditional instruction is deprecated"
_flags="-nologo -ignore 4509"
_flags_filter=armasm_flags
elif $_cc 2>&1 | grep -q Intel; then
_type=icl
_ident=$($_cc 2>&1 | head -n1)
_depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
# Not only is O3 broken on 13.x+ but it is slower on all previous
# versions (tested) as well.
_cflags_speed="-O2"
_cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
if $_cc 2>&1 | grep -q Linker; then
_ld_o='-out:$@'
else
_ld_o='-Fe$@'
fi
_cc_o='-Fo$@'
_flags_filter=icl_flags
_ld_lib='lib%.a'
_ld_path='-libpath:'
# -Qdiag-error to make icl error when seeing certain unknown arguments
_flags='-nologo -Qdiag-error:4044,10157'
# -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
# with MSVC which enables it by default.
_cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
# lld can emulate multiple different linkers; in ms link.exe mode,
# the -? parameter gives the help output which contains an identifyable
# string, while it gives an error in other modes.
_type=lld-link
# The link.exe mode doesn't have a switch for getting the version,
# but we can force it back to gnu mode and get the version from there.
_ident=$($_cc -flavor gnu --version 2>/dev/null)
_ld_o='-out:$@'
_flags_filter=msvc_flags
_ld_lib='lib%.a'
_ld_path='-libpath:'
elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
_ident=$($_cc 2>&1 | head -n1 | tr -d '\r')
_DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
_DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
_cflags_speed="-O2"
_cflags_size="-O1"
_cflags_noopt="-O1"
if $_cc -nologo- 2>&1 | grep -q Linker; then
_ld_o='-out:$@'
else
_ld_o='-Fe$@'
fi
_cc_o='-Fo$@'
_cc_e='-P -Fi$@'
_flags_filter=msvc_flags
_ld_lib='lib%.a'
_ld_path='-libpath:'
_flags='-nologo'
disable stripping
elif $_cc --version 2>/dev/null | grep -q ^cparser; then
_type=cparser
_ident=$($_cc --version | head -n1)
_depflags='-MMD'
_cflags_speed='-O4'
_cflags_size='-O2'
_flags_filter=cparser_flags
eval ${pfx}_type=\$_type
eval ${pfx}_ident=\$_ident
}
set_ccvars(){
eval ${1}_C=\${_cc_c-\${${1}_C}}
eval ${1}_E=\${_cc_e-\${${1}_E}}
eval ${1}_O=\${_cc_o-\${${1}_O}}
if [ -n "$_depflags" ]; then
eval ${1}_DEPFLAGS=\$_depflags
else
eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
eval DEP${1}FLAGS=\$_flags
fi
}
cflags_filter=$_flags_filter
cflags_speed=$_cflags_speed
cflags_size=$_cflags_size
cflags_noopt=$_cflags_noopt
add_cflags $_flags $_cflags
cc_ldflags=$_ldflags
set_ccvars CC
probe_cc hostcc "$host_cc"
host_cflags_filter=$_flags_filter
host_cflags_speed=$_cflags_speed
add_host_cflags $_flags $_cflags
set_ccvars HOSTCC
test -n "$cc_type" && enable $cc_type ||
warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
Måns Rullgård
committed
: ${as_default:=$cc}
: ${dep_cc_default:=$cc}
: ${host_ld_default:=$host_cc}
set_default ar as objcc dep_cc ld ln_s host_ld windres
probe_cc as "$as"
asflags_filter=$_flags_filter
add_asflags $_flags $_cflags
set_ccvars AS
probe_cc objcc "$objcc"
objcflags_filter=$_flags_filter
add_objcflags $_flags $_cflags
set_ccvars OBJC
probe_cc ld "$ld"
ldflags_filter=$_flags_filter
add_ldflags $_flags $_ldflags
test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
LD_O=${_ld_o-$LD_O}
LD_LIB=${_ld_lib-$LD_LIB}
LD_PATH=${_ld_path-$LD_PATH}
probe_cc hostld "$host_ld"
host_ldflags_filter=$_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O=${_ld_o-$HOSTLD_O}
if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
probe_cc depcc "$dep_cc"
CCDEP=${_DEPCMD:-$DEPCMD}
CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
DEPCCFLAGS=$_flags
fi
if $ar 2>&1 | grep -q Microsoft; then
arflags="-nologo"
ar_o='-out:$@'
elif $ar 2>&1 | grep -q "\[D\] "; then
arflags="rcD"
ar_o='$@'
arflags="rc"
add_cflags $extra_cflags
if test -n "$sysroot"; then
case "$cc_type" in
add_cppflags --sysroot="$sysroot"
add_ldflags --sysroot="$sysroot"
;;
esac
fi
if test "$cpu" = host; then
enabled cross_compile &&
die "--cpu=host makes no sense when cross-compiling."
case "$cc_type" in
check_native(){
$cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
s/.*$1=\\([^ ]*\\).*/\\1/
p
q
}" $TMPE
}
cpu=$(check_native -march || check_native -mcpu)
;;
clang)
check_native(){
$cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
sed -n "/cc1.*-target-cpu /{
s/.*-target-cpu \\([^ ]*\\).*/\\1/
p
q
}" $TMPE
}
cpu=$(check_native -march)
;;
test "${cpu:-host}" = host &&
die "--cpu=host not supported with compiler $cc"
# Deal with common $arch aliases
case "$arch" in
aarch64|arm64)
arch="aarch64"
;;
case "$arch" in
*el)
add_cppflags -EL
add_ldflags -EL
;;
*eb)
add_cppflags -EB
add_ldflags -EB
;;
esac
arch="ppc"
;;
s390|s390x)
arch="s390"
;;
sh4|sh)
arch="sh4"
;;
tilegx|tile-gx)
arch="tilegx"
;;
i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
# Add processor-specific flags
if enabled aarch64; then
*)
cpuflags="-mcpu=$cpu"
elif enabled alpha; then
elif enabled arm; then
check_arm_arch() {
check_cpp_condition stddef.h \
"defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
$cpuflags
}
probe_arm_arch() {
if check_arm_arch 4; then echo armv4
elif check_arm_arch 4T; then echo armv4t
elif check_arm_arch 5; then echo armv5
elif check_arm_arch 5E; then echo armv5e
elif check_arm_arch 5T; then echo armv5t
elif check_arm_arch 5TE; then echo armv5te
elif check_arm_arch 5TEJ; then echo armv5te
elif check_arm_arch 6; then echo armv6
elif check_arm_arch 6J; then echo armv6j
elif check_arm_arch 6K; then echo armv6k
elif check_arm_arch 6Z; then echo armv6z
elif check_arm_arch 6ZK; then echo armv6zk
elif check_arm_arch 6T2; then echo armv6t2
elif check_arm_arch 7; then echo armv7
elif check_arm_arch 7A 7_A; then echo armv7-a
elif check_arm_arch 7S; then echo armv7-a
elif check_arm_arch 7R 7_R; then echo armv7-r
elif check_arm_arch 7M 7_M; then echo armv7-m
elif check_arm_arch 7EM 7E_M; then echo armv7-m
elif check_arm_arch 8A 8_A; then echo armv8-a
fi
}
[ "$cpu" = generic ] && cpu=$(probe_arm_arch)
case $cpu in
armv*)
cpuflags="-march=$cpu"
subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
;;
*)
cpuflags="-mcpu=$cpu"
case $cpu in
cortex-a*) subarch=armv7a ;;
cortex-r*) subarch=armv7r ;;
cortex-m*) enable thumb; subarch=armv7m ;;
arm11*) subarch=armv6 ;;
arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
*) subarch=$(probe_arm_arch) ;;
case "$subarch" in
armv5t*) enable fast_clz ;;
Yu Xiaolei
committed
armv[6-8]*)
enable fast_clz
disabled fast_unaligned || enable fast_unaligned
;;
esac
elif enabled avr32; then
case $cpu in
ap7[02]0[0-2])
subarch="avr32_ap"
cpuflags="-mpart=$cpu"
;;
ap)
subarch="avr32_ap"
cpuflags="-march=$cpu"
;;
uc3[ab]*)
subarch="avr32_uc"
cpuflags="-mcpu=$cpu"
;;
uc)
subarch="avr32_uc"
cpuflags="-march=$cpu"
;;
esac
elif enabled bfin; then
cpuflags="-mcpu=$cpu"
elif enabled mips; then
cpuflags="-march=$cpu"
if [ "$cpu" != "generic" ]; then
disable mips32r2
disable mips32r5
disable mips64r2
disable mips32r6
disable mips64r6
disable loongson2
disable loongson3
case $cpu in
24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
enable mips32r2
disable msa
;;
disable mipsdsp
disable mipsdspr2
;;
loongson*)
enable loongson2
enable loongson3
enable local_aligned
enable simd_align_16
enable fast_64bit
enable fast_clz
enable fast_cmov
enable fast_unaligned
disable aligned_stack
disable mipsfpu
disable mipsdsp
disable mipsdspr2
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
case $cpu in
loongson3*)
cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
;;
loongson2e)
cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
;;
loongson2f)
cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
;;
esac
;;
*)
# Unknown CPU. Disable everything.
warn "unknown CPU. Disabling all MIPS optimizations."
disable mipsfpu
disable mipsdsp
disable mipsdspr2
disable msa
disable mmi
;;
esac
case $cpu in
24kc)
disable mipsfpu
disable mipsdsp
disable mipsdspr2
;;
24kf*)
disable mipsdsp
disable mipsdspr2
;;
24kec|34kc|1004kc)
disable mipsfpu
disable mipsdspr2
;;
24kef*|34kf*|1004kf*)
disable mipsdspr2
;;
74kc)
disable mipsfpu
;;
p5600)
enable mips32r5
check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
;;
i6400)
enable mips64r6
check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
;;
p6600)
enable mips64r6
check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
;;
esac
else
# We do not disable anything. Is up to the user to disable the unwanted features.
warn 'generic cpu selected'
fi
disable ldbrx
case $(tolower $cpu) in
601|ppc601|powerpc601)
603*|ppc603*|powerpc603*)
604*|ppc604*|powerpc604*)
g3|75*|ppc75*|powerpc75*)
g4|745*|ppc745*|powerpc745*)
74*|ppc74*|powerpc74*)
disable vsx
;;
power[7-8]*)
cpuflags="-mcpu=$cpu"
e500mc)
cpuflags="-mcpu=e500mc"
disable altivec
;;
e500v2)
cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
disable altivec
disable dcbzl
;;
e500)
cpuflags="-mcpu=8540 -mhard-float"
disable altivec
disable dcbzl
elif enabled sparc; then
cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
cpuflags="-mcpu=$cpu"
ultrasparc*|niagara[234])
cpuflags="-mcpu=$cpu"
;;
esac
case $cpu in
i[345]86|pentium)
cpuflags="-march=$cpu"
# targets that do NOT support nopl and conditional mov (cmov)
pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
cpuflags="-march=$cpu"
# targets that do support nopl and conditional mov (cmov)
i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
|core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
|amdfam10|barcelona|b[dt]ver*|znver*)
enable fast_cmov
;;
# targets that do support conditional mov but on which it's slow
pentium4|pentium4m|prescott|nocona)
cpuflags="-march=$cpu"
if [ "$cpu" != generic ]; then
add_cflags $cpuflags
add_asflags $cpuflags
test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
# compiler sanity check
check_exec <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; then
echo "$cc is unable to create an executable file."
if test -z "$cross_prefix" && ! enabled cross_compile ; then
echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
echo "Only do this if you know what cross compiling means."
fi
die "C compiler test failed."
fi
add_cppflags -D_ISOC99_SOURCE
check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
# some compilers silently accept -std=c11, so we also need to check that the
# version macro is defined properly
test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
add_cflags -std=c11 ||
check_cppflags -D_FILE_OFFSET_BITS=64
check_cppflags -D_LARGEFILE_SOURCE
add_host_cppflags -D_ISOC99_SOURCE
check_host_cflags -Wall
check_host_cflags $host_cflags_speed
check_64bit(){
arch32=$1
arch64=$2
check_code cc "" "int test[2*($expr) - 1]" &&
subarch=$arch64 || subarch=$arch32
enable $subarch
aarch64|alpha|ia64)
enabled shared && enable_weak pic
mips)
check_64bit mips mips64 '_MIPS_SIM > 1'
enabled shared && enable_weak pic
enabled shared && enable_weak pic
enabled shared && enable_weak pic
enabled shared && enable_weak pic
enabled shared && enable_weak pic
# Treat x32 as x64 for now. Note it also needs pic if shared
test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
subarch=x86_64 && enable x86_64 && disable x86_32
if enabled x86_64; then
enabled shared && enable_weak pic
objformat=elf64
Diego Biurrun
committed
# OS specific
add_cppflags '-I\$(SRC_PATH)/compat/aix'
enabled shared && add_ldflags -Wl,-brtl
arflags='-Xany -r -c'
android)
disable symver
enable section_data_rel_ro
SLIB_INSTALL_NAME='$(SLIBNAME)'
SLIB_INSTALL_LINKS=
SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
prefix_default="/boot/common"
network_extralibs="-lnetwork"
host_extralibs=
Diego Biurrun
committed
sunos)
enabled x86 && append SHFLAGS -mimpure-text
Diego Biurrun
committed
network_extralibs="-lsocket -lnsl"
Sean McGovern
committed
# When using suncc to build, the Solaris linker will mark
# an executable with each instruction set encountered by
# the Solaris assembler. As our libraries contain their own
# guards for processor-specific code, instead suppress
# generation of the HWCAPS ELF section on Solaris x86 only.
enabled_all suncc x86 &&
echo "hwcap_1 = OVERRIDE;" > mapfile &&
add_ldflags -Wl,-M,mapfile
version_script='-M'
VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
Diego Biurrun
committed
;;
netbsd)
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
enabled gcc || check_ldflags -Wl,-zmuldefs
Diego Biurrun
committed
;;
Diego Biurrun
committed
SHFLAGS='-shared'
SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
Diego Biurrun
committed
;;
dragonfly)
disable symver
;;
freebsd)
Diego Biurrun
committed
;;
bsd/os)
add_extralibs -lpoll -lgnugetopt
strip="strip -d"
Diego Biurrun
committed
;;
darwin)
enabled ppc && add_asflags -force_cpusubtype_ALL
install_name_dir_default='$(SHLIBDIR)'
SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
strip="${strip} -x"
add_ldflags -Wl,-dynamic,-search_paths_first
check_cflags -Werror=partial-availability
Diego Biurrun
committed
SLIBSUF=".dylib"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
enabled x86_64 && objformat="macho64" || objformat="macho32"
enabled_any pic shared x86_64 ||
{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
check_header dispatch/dispatch.h &&
add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
Martin Storsjö
committed
if test -n "$sysroot"; then
is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
is_in -isysroot $ld $LDFLAGS || check_ldflags -isysroot $sysroot
fi
version_script='-exported_symbols_list'
VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
Diego Biurrun
committed
;;
die "Native MSYS builds are discouraged, please use the MINGW environment."