--target-os=OS compiler targets OS [$target_os]
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
+ --target-samples=DIR path to samples directory on target
--toolchain=NAME set tool defaults according to NAME
--nm=NM use nm tool NM [$nm_default]
--ar=AR use archive tool AR [$ar_default]
static void sighandler(int sig){
raise(SIGTERM);
}
-int func(void){
+int foo(void){
$code
}
-int (*func_ptr)(void) = func;
+int (*func_ptr)(void) = foo;
int main(void){
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
struct_sockaddr_in6
struct_sockaddr_sa_len
struct_sockaddr_storage
+ struct_stat_st_mtim_tv_nsec
struct_v4l2_frmivalenum_discrete
symver_asm_label
symver_gnu_asm
target_exec
target_os
target_path
+ target_samples
toolchain
valgrind
yasmexe
flv_encoder_select="h263_encoder"
fourxm_decoder_select="dsputil"
fraps_decoder_select="dsputil huffman"
+g2m_decoder_select="dsputil zlib"
g729_decoder_select="dsputil"
h261_decoder_select="error_resilience mpegvideo"
h261_encoder_select="aandcttables mpegvideoenc"
v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
vfwcap_indev_extralibs="-lavicap32"
+xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
+xv_outdev_extralibs="-lXv -lX11 -lXext"
x11grab_indev_deps="x11grab"
# protocols
boxblur_filter_deps="gpl"
colormatrix_filter_deps="gpl"
cropdetect_filter_deps="gpl"
-dctdnoiz_filter_deps="avcodec"
+dctdnoiz_filter_deps="avcodec fft"
delogo_filter_deps="gpl"
deshake_filter_deps="avcodec"
deshake_filter_select="dsputil"
hue_filter_deps="gpl"
interlace_filter_deps="gpl"
kerndeint_filter_deps="gpl"
+mcdeint_filter_deps="avcodec gpl"
movie_filter_deps="avcodec avformat"
mp_filter_deps="gpl avcodec swscale inline_asm"
mpdecimate_filter_deps="gpl avcodec"
pan_filter_deps="swresample"
pp_filter_deps="gpl postproc"
removelogo_filter_deps="avcodec avformat swscale"
+sab_filter_deps="gpl swscale"
scale_filter_deps="swscale"
smartblur_filter_deps="gpl swscale"
showspectrum_filter_deps="avcodec rdft"
add_cflags -fsanitize=thread -pie
add_ldflags -fsanitize=thread -pie
;;
+ gcc-asan)
+ cc_default="gcc"
+ add_cflags -fsanitize=address
+ add_ldflags -fsanitize=address
+ ;;
+ gcc-tsan)
+ cc_default="gcc"
+ add_cflags -fsanitize=thread -pie -fPIC
+ add_ldflags -fsanitize=thread -pie -fPIC
+ ;;
valgrind-massif)
target_exec_default=${valgrind:-"valgrind"}
target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
ar_default="lib"
target_os_default="win32"
;;
+ icl)
+ cc_default="c99wrap -noconv icl"
+ ld_default="c99wrap xilink"
+ nm_default="dumpbin -symbols"
+ ar_default="xilib"
+ target_os_default="win32"
+ ;;
gcov)
add_cflags -fprofile-arcs -ftest-coverage
add_ldflags -fprofile-arcs -ftest-coverage
done
}
-msvc_flags(){
+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) ;;
+ -std=c99) ;;
+ # Common flags
-fomit-frame-pointer) echo -Oy ;;
-g) echo -Z7 ;;
- -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
- -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
- -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
- -wd4554 \
- -wd4996 -wd4273 ;;
- -std=c99) ;;
-fno-math-errno) ;;
-fno-common) ;;
-fno-signed-zeros) ;;
-fPIC) ;;
+ -mthumb) ;;
+ -march=*) ;;
-lz) echo zlib.lib ;;
-lavifil32) echo vfw32.lib ;;
-lavicap32) echo vfw32.lib user32.lib ;;
done
}
+msvc_flags(){
+ msvc_common_flags "$@"
+ for flag; do
+ case $flag in
+ -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
+ -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
+ -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
+ -wd4554 \
+ -wd4996 -wd4273 ;;
+ 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
+}
+
pgi_flags(){
for flag; do
case $flag in
append _cflags -Dsnprintf=_snprintf
fi
disable stripping
+ 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's slower on all previous versions (tested) as well
+ _cflags_speed="-O2"
+ _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
+ # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
+ if $_cc 2>&1 | grep -q Linker; then
+ _ld_o='-out $@'
+ else
+ _ld_o='-Fe$@'
+ fi
+ _cc_o='-Fo $@'
+ _cc_e='-P'
+ _flags_filter=icl_flags
+ _ld_lib='lib%.a'
+ _ld_path='-libpath:'
+ # -Qdiag-error to make icl error when presented with certain unknown arguments
+ _flags='-nologo -Qdiag-error:4044,10157'
+ # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency with msvc which enables it by default
+ _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
+ if [ $pfx = hostcc ]; then
+ append _cflags -Dsnprintf=_snprintf
+ fi
fi
eval ${pfx}_type=\$_type
objformat="win32"
ranlib=:
enable dos_paths
- disable pic
;;
win32|win64)
if enabled shared; then
objformat="win32"
ranlib=:
enable dos_paths
- disable pic
;;
cygwin*)
target_os=cygwin
SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
objformat="win32"
enable dos_paths
- disable pic
;;
*-dos|freedos|opendos)
network_extralibs="-lsocket"
disabled pic && return
enable pic
add_cppflags -DPIC
- add_cflags -fPIC
+ case "$target_os" in
+ mingw*|cygwin*)
+ ;;
+ *)
+ add_cflags -fPIC
+ ;;
+ esac
add_asflags -fPIC
}
check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
- enabled_all armv6t2 shared !pic && enable_weak_pic
+ [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
elif enabled mips; then
check_func ${malloc_prefix}posix_memalign && enable posix_memalign
check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
check_func setrlimit
+check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
check_func strerror_r
check_func sched_getaffinity
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
check_func_headers windows.h Sleep
check_func_headers windows.h VirtualAlloc
check_func_headers glob.h glob
+check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
check_header cl/cl.h
check_header direct.h
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
if enabled libcdio; then
- check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
+ check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
+ check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
+ die "ERROR: libcdio-paranoia not found"
fi
enabled x11grab &&
add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
elif enabled msvc; then
enabled x86_32 && disable aligned_stack
+elif enabled icl; then
+ enabled x86_32 && disable aligned_stack
+ # basically -fstrict-aliasing for icl that doesn't work (correctly) on 13.x+
+ check_cpp_condition "windows.h" "__ICL < 1300" && add_cflags -Qansi-alias
+ # icl will pass the inline asm tests but inline asm is currently not supported (build will fail)
+ disable inline_asm
fi
case $target_os in
HOSTLD_O=$HOSTLD_O
TARGET_EXEC=$target_exec $target_exec_args
TARGET_PATH=$target_path
+TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
LIBS-ffplay=$sdl_libs
CFLAGS-ffplay=$sdl_cflags
ZLIB=$($ldflags_filter -lz)